redis作为缓存应用
1 将热点数据放到缓存中,防止大量连接穿透数据库
2 jedis3.0以上版本集群主要使用JedisCluter对象,采用crc16算法将slot平均分配到各个集群的各个服务器上,
高可用体现在当某一个节点挂掉之后,很快的会有另一台机器替代,保证数据不会丢失
高扩展是将新的机器很容易的加到集群中,容易扩展
redis3.0以上使用jedisCluster不像jedis客户端支持pipeline, pipeline优势是可以一次执行多次命令,减少频繁的连接消耗
在集群模式下怎样实现管道命令
1 通过key获取对应的slot,然后通过slot获取对应的redis服务端
Map<String, JedisPool> nodeMap =jedisCluster.getClusterNodes()
获取每台redis的槽号,并放在map中
Jedis jedis = new Jedis(anyHostAndPort.getHost(), anyHostAndPort.getPort()); List<Object> list = jedis.clusterSlots(); for (Object object : list) { List<Object> list1 = (List<Object>) object; List<Object> master = (List<Object>) list1.get(2); String hostAndPort = new String((byte[]) master.get(0)) + ":" + master.get(1); tree.put((Long) list1.get(0), hostAndPort); tree.put((Long) list1.get(1), hostAndPort); }
Jedis jedis = nodeMap.get(entry.getValue()).getResource();
然后使用pipeline