Redis在3.0版正式引入了集群这个特性,扩展变得很是简单。然而当你开心的升级到3.0后,却发现有些很好用的功能如今工做不了了, 好比咱们今天要聊的pipeline功能等批量操做。html
部署笔记:git
./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
解决尝试开始:github
使用spring-data-redis(推荐,简单) redis
//pop a specified number of items from a queue List<Object> results = stringRedisTemplate.executePipelined( new RedisCallback<Object>() { public Object doInRedis(RedisConnection connection) throws DataAccessException { StringRedisConnection stringRedisConn = (StringRedisConnection)connection; for(int i=0; i< batchSize; i++) { stringRedisConn.rPop("myqueue"); } return null; } });
可是这种仍是只支持单节点,那怎么办呢?spring
能够使用客户端分片集群,就天然没有上面的这个问题啦,另外也能够尝试使用阿里云redisruby
若是你必定要使用官方集群,又不用其余版本,那能够解决吗?答案是确定的。学习
方式一(本身扩展实现):优化
参考博文:http://www.cnblogs.com/drwong/p/4825752.html阿里云
方式二:(githup现成的)spa
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)模式支持