JedisCluster配置集群api测试

本文档详述了如何在项目中配置和使用JedisCluster与Redis集群,包括引入依赖、配置参数、初始化JedisCluster以及一系列API测试,如整数浮点数操作、字符串hash、有序集合、哈希表和排序操作等。
摘要由CSDN通过智能技术生成

项目中会常用到redis,但JedisCluster的使用api还是比较多,经常可能会记不太清楚,故这里将大部分JedisCluster的api贴出来,供大家参考。

一、redis在工作是一个常见的工具,这里对redis和springboot形成集群的使用。
(1)引入对应redis集群所需要maven文件

 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>

(2) 在配置文件配置 redis.properties 配置redis集群必要参数


#客户端超时时间单位是毫秒 默认是2000
redis.timeout=10000
#最大空闲数
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
#redis.maxActive=600
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=2000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000

redis.nodes=192.168.25.128:7000,192.168.25.128:7001,192.168.25.128:7002,192.168.25.128:7003,192.168.25.128:7004,192.168.25.128:7005,192.168.25.128:7006,192.168.25.128:7007

(3)初始化JedisCluster

@Configuration
@PropertySource("classpath:conf/redis.properties")
public class RedisConfig {

 
    @Value("${redis.maxIdle}")
    private Integer maxIdle;

    @Value("${redis.timeout}")
    private Integer timeout;
 
    @Value("${redis.maxTotal}")
    private Integer maxTotal;
 
    @Value("${redis.maxWaitMillis}")
    private Integer maxWaitMillis;


    @Value("${redis.nodes}")
    private String clusterNodes;


    @Bean
    public JedisCluster getJedisCluster(){
        String[] cNodes = clusterNodes.split(",");
        HashSet<HostAndPort> nodes = new HashSet<>();
        //分割集群节点
        for (String node : cNodes) {
            String[] hp = node.split(":");
            nodes.add(new HostAndPort(hp[0], Integer.parseInt(hp[1])));
        }
            JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
            jedisPoolConfig.setMaxIdle(maxIdle);
            jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
            jedisPoolConfig.setMaxTotal(maxTotal);

        //创建集群对象
        JedisCluster jedisCluster = new JedisCluster(nodes, timeout, jedisPoolConfig);
        return jedisCluster;
    }

}


(4)引入JedisCluster进行api测试

01、测试整数和浮点数

 @Autowired
    JedisCluster jedisCluster;


 /***
     * 整数和浮点数
     */
    @Test
    public void testNumber(){
        jedisCluster.set("numkey1", "1");
        jedisCluster.set("numkey2", "2");
        jedisCluster.set("numkey3", "0.56");

        System.out.println("获取numkey1的值:" + jedisCluster.get("numkey1"));
        System.out.println("让numkey1的值加1:" + jedisCluster.incr("numkey1"));
        System.out.println("获取numkey1的值:" + jedisCluster.get("numkey1"));
        System.out.println("让numkey1的值减1:" + jedisCluster.decr("numkey1"));
        System.out.println("让numkey1的值加5:" + jedisCluster.incrBy("numkey1", 5));
        System.out.println("获取numkey1的值:" + jedisCluster.get("numkey1"));
        System.out.println("获取numkey1的值减4:" + jedisCluster.decrBy("numkey1", 4));
        System.out.println("获取numkey1的值:" + jedisCluster.get("numkey1"));

        System.out.println("-------------------------------------");
        System.out.println("获取numkey3的值:" + jedisCluster.get("numkey3"));
        //小数无法进行加减法运算

    }

测试参数的值

获取numkey1的值:1
让numkey1的值加1:2
获取numkey1的值:2
让numkey1的值减1:1
让numkey1的值加5:6
获取numkey1的值:6
获取numkey1的值减4:2
获取numkey1的值:2
-------------------------------------
获取numkey3的值:0.56

02、测试对字符串进行hash操作
由于mset设置一批的值,由于jedis集群获取值通过key配置slot的地址,故这里将mset批量设置的key的前缀{aaa}

        public static int getSlot(String key) {
            int s = key.indexOf("{");
            if (s > -1) {
              int e = key.indexOf("}", s + 1);
              if (e > -1 && e != s + 1) {
                key = key.substring(s + 1, e);
              }
            }
            // optimization with modulo operator with power of 2
            // equivalent to getCRC16(key) % 16384
            return getCRC16(key) & (16384 - 1);
          }

集群对字符串的操作

 @Autowired
    JedisCluster jedisCluster;


@Test
    public void testString() throws InterruptedException {
        System.out.println("对keyString1设置字符串:"+jedisCluster.set("keyString1", "valueString1"));
        System.out.println("获取keyString1设置的值:"+jedisCluster.get("keyString1"));
        System.out.println("对keyString1的值增加值:"+jedisCluster.append("keyString1","appendValue"));
        System.out.println("获取keyString1设置的值:"+jedisCluster.get("keyString1"));
        System.out.println("删除keyString1实在的值:"+jedisCluster.del("keyString1"));
        System.out.println("获取keyString1设置的值:"+jedisCluster.get("keyString1"));

        System.out.println("----------------------------对多个键值对的操作----------------------");
        /**
         * 因此,暂且不能在RedisCluster模式下,通过增加中间层来对批量请求进行分组,并处理到对应的slot中,理想很好&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值