2019独角兽企业重金招聘Python工程师标准>>>
前言:
Redis在3.0版正式引入了集群这个特性,扩展变得非常简单。然而当你开心的升级到3.0后,却发现有些很好用的功能现在工作不了了, 比如我们今天要聊的pipeline功能等批量操作。
解决方式:
部署笔记:
./redis-server ../cluster/7111/redis-7111.conf
./redis-server ../cluster/7112/redis-7112.conf
./redis-server ../cluster/7113/redis-7113.conf
./redis-server ../cluster/7114/redis-7114.conf
./redis-server ../cluster/7115/redis-7115.conf
./redis-server ../cluster/7116/redis-7116.conf
使用redis-trib.rb来初始化集群,形如:
ruby redis-trib.rb create --replicas 1 127.0.0.1:7111
127.0.0.1:7112 127.0.0.1:7113 127.0.0.1:7114 127.0.0.1:7115
127.0.0.1:7116
解决尝试开始:
使用spring-data-redis(推荐,简单)
//pop a specified number of items from a queue
List
但是这种还是只支持单节点,那怎么办呢?
可以使用客户端分片集群,就自然没有上面的这个问题啦,另外也可以尝试使用阿里云redis
如果你一定要使用官方集群,又不用其他版本,那可以解决吗?答案是肯定的。
方式一(自己扩展实现):
参考博文:http://www.cnblogs.com/drwong/p/4825752.html
方式二:(githup现成的)
https://github.com/youaremoon/jedis-ext
关于mget,mset等操作(redis3.2.5高版本支持)
Long msetnx = jedisCluster.msetnx(
"{" + prefix + KEY_SPLIT + "}" + "name", "张三",
"{" + prefix + KEY_SPLIT + "}" + "age", "23",
"{" + prefix + KEY_SPLIT + "}" + "address", "adfsa",
"{" + prefix + KEY_SPLIT + "}" + "score", "100");
System.out.println(msetnx);
System.out.println(jedisCluster.mget(
"{" + prefix + KEY_SPLIT + "}" + "name",
"{" + prefix + KEY_SPLIT + "}" + "age",
"{" + prefix + KEY_SPLIT + "}" + "address",
"{" + prefix + KEY_SPLIT + "}" + "score"));//[张三, 23, adfsa, 100]
//name这个key已经存在,由于mset是原子的,该条指令将全部失败
msetnx = jedisCluster.msetnx(
"{" + prefix + KEY_SPLIT + "}" + "phone", "110",
"{" + prefix + KEY_SPLIT + "}" + "name", "张三",
"{" + prefix + KEY_SPLIT + "}" + "abc", "asdfasfdsa");
System.out.println(msetnx);
System.out.println(jedisCluster.mget(
"{" + prefix + KEY_SPLIT + "}" + "name",
"{" + prefix + KEY_SPLIT + "}" + "age",
"{" + prefix + KEY_SPLIT + "}" + "address",
"{" + prefix + KEY_SPLIT + "}" + "score",
"{" + prefix + KEY_SPLIT + "}" + "phone",
"{" + prefix + KEY_SPLIT + "}" + "abc"));//[张三, 23, adfsa, 100, null, null]
}
参考博文:
redis集群客户端JedisCluster优化 - 管道(pipeline)模式支持
redis-cluster官方集群模式下使用pipeline批量操作
Redis学习笔记(五)jedis(JedisCluster)操作Redis集群 redis-cluster