一般情况下,使用主从模式加Sentinal监控就可以满足基本需求了,但是当数据量过大一个主机放不下的时候,就需要对数据进行分区,将key按照一定的规则进行计算,并将key对应的value分配到指定的Redis实例上,这样的模式简称Redis集群。
Redis分区也称作Redis分片,或者Redis集群,这都是一个意思。
一、Redis集群
1.1 Redis集群的搭建
集群方面的教程也是有很多的,找了几个觉得还不错的,有需要的可以去看看:
- 有个入门教程挺不错的,可以看一看:http://doc.redisfans.com/topic/cluster-tutorial.html。
- 还有个文章不错,建议看一遍:http://blog.csdn.net/dc_726/article/details/48552531。
- 还有个文章:https://my.oschina.net/guol/blog/506193。
1.2 Redis集群的不足
这个还是应该清楚的,看是否满足你现在的需求。
- 一般涉及多个key的操作会不支持,取两个set的并集,且两个set在不同的Redis实例上面(当然也是能实现的,只是Redis不会直接支持这么做)。
- 涉及多个key的事务将不能使用
- 使用分区时,数据处理更加复杂,例如你必须处理多个RDB / AOF文件,你需要备份你的数据并聚合多个实例和主机的持久性文件。
二、Redis集群的Java客户端访问
Redis分区后,Java客户端的访问也响应的复杂起来,如果使用Jedis的话,那就是先构造一个JedisCluster,然后通过它进行集群操作:
//使用需要的构造方法构造JedisCluster JedisCluster jedisCluster = new JedisCluster(); //JedisCluster 的使用,JedisCluster 具备Redis大多数方法 jedisCluster.set("key", "value"); //使用完后关闭 jedisCluster.close();
Jedis的JedisCluster目前还在开发中,还不成熟,遇到问题了多去Git上反馈,如果能解决,就去Git上贡献代码。