Bootstrap

Redis JavaAPI、连接池、Cluster模式

Redis JavaAPI、连接池、Cluster模式

IDEA用Java连接Redis

1、新建Redis的Maven项目,并导入相关依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>4.0.1</version>
        </dependency>

2、使用Java代码连接Redis 6379

  • 1、建立连接
  • 2、测试连通性
  • 3、关闭Redis
package com.liangzai;

import redis.clients.jedis.Jedis;

public class RedisDemo1 {
    /*
    通过java代码操作Redis
     */
    public static void main(String[] args) {
        //1、建立连接
        Jedis jedis = new Jedis("master", 6379);
        //2、测试连通性
        System.out.println(jedis.ping());
        //关闭Redis连接
        jedis.close();
    }
}

运行结果:

上面三个红色的是Maven依赖缺包,无需理会,并不影响代码的运行

用java代码使用Redis的set、get

package com.liangzai;

import redis.clients.jedis.Jedis;

public class RedisDemo1 {
    /*
    通过java代码操作Redis
     */
    public static void main(String[] args) {
        //1、建立连接
        Jedis jedis = new Jedis("master", 6379);
        //2、测试连通性
        System.out.println(jedis.ping());
        String setk4 = jedis.set("k4", String.valueOf(4));
        System.out.println(setk4);
        String getk4 = jedis.get("k4");
        System.out.println(getk4);
        //关闭Redis连接
        jedis.close();
    }
}
运行结果:
PONG
OK
4

在我们实际使用Java代码操作Redis的时候set的值是不用返回的

用java代码操作Redis的String增、删、改、查

首先加入JUnit依赖,方便我们用注解测试增、删、改、查的功能
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
        </dependency>
package com.liangzai;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.args.BitOP;

public class RedisString {
    Jedis jedis;

    @Before
    //会在执行@Test修饰的方法之前执行
    //建立连接
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    //增加一个String类型的value
    public void set() {
        jedis.set("j1", "v1");
        jedis.set("j2", "v2");
        jedis.set("j3", "v3");
    }

    @Test
    //删除一个k-v
    public void DEL() {
        jedis.del("j1");
    }

    @Test
    //根据k获取v
    public void GET() {
        System.out.println(jedis.get("j1"));
        System.out.println(jedis.get("j2"));
        System.out.println(jedis.get("j3"));
    }

    @Test
    //创建一个位图
    public void SETBIT() {
        jedis.setbit("b1", 1, true);
        jedis.setbit("b1", 3, true);
    }

    @Test
    //获取位图
    public void GETBIT() {
        System.out.println("b1");
    }

    @Test
    //位图的操作
    public void BITOPT() {
        jedis.bitop(BitOP.AND, "b3", "b1", "b2");
        jedis.bitop(BitOP.OR, "b4", "b1", "b2");
        jedis.bitop(BitOP.NOT, "b5", "b1");
        jedis.bitop(BitOP.XOR, "b6", "b1", "b2");
        System.out.println(jedis.get("b3"));
        System.out.println(jedis.get("b4"));
        System.out.println(jedis.get("b5"));
        System.out.println(jedis.get("b6"));
    }

    @After
    //表示@Test方法执行完成之后执行
    public void closed() {
        jedis.close();
    }
}

每个方法上都有一个绿色的三角,点击即可测试当前方法

用java代码操作Redis的List增、删、改、查

package com.liangzai;


import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.List;

public class RedisList {
    Jedis jedis;

    @Before
    //会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个List
    public void PUSH() {
        jedis.lpush("list1", "1");
        jedis.lpush("list1", "2");
        jedis.rpush("list1", "3");
        jedis.rpush("list1", "4");
        jedis.rpush("list1", "5");
    }

    @Test
    // 修改List中的元素
    public void LSET() {
        jedis.lset("list1", 4, "5.5");
    }

    @Test
    // 获取List中的所有元素
    public void LRANGE() {
        List<String> l = jedis.lrange("list1", 0, -1);
        for (String s : l) {
            System.out.println(s);
        }
    }
}

用java代码操作Redis的Hash

package com.liangzai;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;


public class RedisHash {
    Jedis jedis;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个Hash散列
    public void HSET() {
        jedis.hset("hash1", "id", "1");
        jedis.hset("hash1", "name", "张三");
        jedis.hset("hash1", "age", "18");
        jedis.hset("hash1", "gender", "男");
        jedis.hset("hash1", "clazz", "文科四班");
    }

    @Test
    // 获取Hash所有的key
    public void HKEYS() {
        Set<String> s = jedis.hkeys("hash1");
        for (String s1 : s) {
            System.out.println(s1);
        }
    }

    @Test
    // 获取Hash所有的Value
    public void HVALS() {
        List<String> l = jedis.hvals("hash1");
        for (String s : l) {
            System.out.println(s);
        }
    }

    @Test
    // 获取Hash所有的K-V
    public void HGETALL() {
        Map<String, String> m = jedis.hgetAll("hash1");
        for (Map.Entry<String, String> kv : m.entrySet()) {
            System.out.println(kv.getKey());
            System.out.println(kv.getValue());
        }
    }

    @Test
    // 指定Field获取Value
    public void HGET() {
        System.out.println(jedis.hget("hash1", "name"));
    }

    @Test
    // 根据Field删除Value
    public void HDEL() {
        jedis.hdel("hash1", "gender");
    }

    @Test
    // 删除整个Hash散列
    public void DEL() {
        jedis.del("hash1");
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        jedis.close();
    }
}

用java代码操作Redis的Set

package com.liangzai;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Set;

public class RedisSet {
    Jedis jedis;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建Set
    public void SADD() {
        jedis.sadd("s1", "1", "2", "2", "2", "3", "4", "5", "6");
        jedis.sadd("s2", "5", "6", "7", "8", "9");
    }

    @Test
    // 移除元素
    public void SREM() {
        jedis.srem("s1", "1");
        jedis.srem("s1", "4");
    }

    @Test
    // 弹出一个元素,位置不确定
    public void SPOP() {
        String s1 = jedis.spop("s1");
        System.out.println(s1);
    }

    @Test
    // 获取所有的元素
    public void SMEMBERS() {
        Set<String> s1 = jedis.smembers("s1");
        for (String s : s1) {
            System.out.println(s);
        }
    }

    @Test
    // 集合常见的操作
    public void SETOP() {
        // 交集
        System.out.println(jedis.sinter("s1", "s2"));
        // 并集
        System.out.println(jedis.sunion("s1", "s2"));
        // 差集
        System.out.println(jedis.sdiff("s1", "s2"));

    }


    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        jedis.close();
    }

}

用java代码操作Redis的有序集合SortedSet

package com.liangzai;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.ZParams;
import redis.clients.jedis.resps.Tuple;

import java.util.Set;

public class RedisSortedSet {
    Jedis jedis;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个有序集合
    public void ZADD() {
        // zs1 表示水果一月份的销量
        jedis.zadd("zs1", 10, "西瓜");
        jedis.zadd("zs1", 10, "西瓜");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 5, "芒果");
        jedis.zadd("zs1", 5, "芒果");
        jedis.zadd("zs1", 8, "草莓");

        // zs2 表示水果二月份的销量
        jedis.zadd("zs2", 9, "哈密瓜");
        jedis.zadd("zs2", 6, "西瓜");
        jedis.zadd("zs2", 8, "香蕉");
        jedis.zadd("zs2", 3, "香蕉");
        jedis.zadd("zs2", 5, "香蕉");
        jedis.zadd("zs2", 6, "甘蔗");
        jedis.zadd("zs2", 7, "芒果");
        jedis.zadd("zs2", 8, "草莓");
    }

    @Test
    // 查看水果的累计销量
    public void TwoMonthSUM() {
        Set<Tuple> s = jedis.zunionWithScores(new ZParams().aggregate(ZParams.Aggregate.SUM), "zs1", "zs2");
        System.out.println(s);
    }


    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        jedis.close();
    }
}

用java代码操作Redis的去重HyperLogLog

package com.liangzai;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

public class RedisHyperLogLog {
    Jedis jedis;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    public void PFADD() {
        jedis.pfadd("hll1", "1", "1", "2", "3", "4", "4", "5");
        jedis.pfadd("hll2", "1", "3", "4", "7", "4", "8", "5");
    }

    @Test
    // 求一组数据(可能重复)的基数
    public void PFCOUNT() {
        System.out.println(jedis.pfcount("hll1"));
        System.out.println(jedis.pfcount("hll2"));
    }

    @Test
    // 合并两个HyperLogLog
    public void PFMERGE() {
        jedis.pfmerge("hll3", "hll1", "hll2");
        System.out.println(jedis.pfcount("hll3"));
    }


    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        jedis.close();
    }
}

用java代码操作Redis的连接池ConnectionPool

package com.liangzai;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisConnectionPool {
    // Redis连接池
    public static void main(String[] args) {
        // 使用默认的配置创建Redis连接池
        JedisPool jedisPool = new JedisPool("master", 6379);

        // 从连接池中取出一个连接
        Jedis jedis = jedisPool.getResource();

        // 使用连接进行操作
        System.out.println(jedis.lrange("list1", 0, -1));

        // 关闭连接
        jedis.close();

        // 关闭连接池
        jedisPool.close();


    }
}

用java代码操作Redis的集群

用java代码操作Redis的集群ClusterConn

package com.liangzai;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.Map;

public class RedisClusterConn {
    public static void main(String[] args) {
        // 使用JedisCluster与集群进行通信建立连接
        JedisCluster cluster = new JedisCluster(new HostAndPort("master", 6381));

        cluster.set("cs1", "vv1");

        System.out.println(cluster.get("cs1"));

        cluster.hset("chs1", "f1", "v1");
        cluster.hset("chs1", "f2", "v1");
        cluster.hset("chs1", "f3", "v1");

        Map<String, String> map = cluster.hgetAll("chs1");
        for (Map.Entry<String, String> kv : map.entrySet()) {
            System.out.println(kv.getKey());
            System.out.println(kv.getValue());
        }

        cluster.close();

    }
}

到底啦!靓仔的文章对你有帮助的话给波关注吧!╰(°▽°)╯

;