我们有一个用于Redis的集群配置用作缓存。
现在由于写入master和从slave(与其他数据库)读取的正常模式,我们正在尝试使用Redis集群执行相同的操作。
经过一番调查后,我们发现redis,jedis和Spring Data Redis都没有支持Redis客户端(在java中)。
我们似乎找到了一些解决方法,但它看起来很难看,现在我在想它是否值得呢?
这是我的用例
考虑到这一点,我有以下问题:
非常感谢任何帮助(博客,案例研究,建议)。
答案 0 :(得分:6)
您对奴隶读物的期望是什么?
可以从奴隶那里读取usual pattern,但它带有一组效果。
引自http://redis.io/topics/cluster-spec#scaling-reads-using-slave-nodes:
通常,从节点会将客户端重定向到权威主节点 但是,对于给定命令中涉及的散列槽,客户端可以使用 奴隶以便使用
READONLY
命令扩展读取。
READONLY
告诉Redis群集从属节点客户端没问题 读取可能过时的数据并且对运行写入不感兴趣 查询。
Jedis没有内置支持从主节点以外的其他节点读取。 Redisson和lettuce为Master和Slave读取提供内置支持。 Redisson在内部使用平衡器(随机,循环,加权)来分配操作,生菜提供偏好驱动(仅限主,主要首选,从属,最近)方法。
Spring Data Redis建立在Jedis和生菜之上,但不提供从奴隶那里读取的通用功能。
一个好的经验法则是使用奴隶来获取可用性,而不是性能。
答案 1 :(得分:3)
redis客户端(在java中)没有像redisson支持这个
Redisson提供可用于群集模式配置的readMode
设置。可用值为:
SLAVE
- 从从属节点读取,
MASTER
- 从主节点读取,
MASTER_SLAVE
- 从主节点和从节点读取
您需要使用SLAVE
值。
配置示例:
Config config = new Config();
config.useClusterServers()
.setReadMode(ReadMode.SLAVE)
.addNodeAddress(...);
Redisson redisson = Redisson.create(config);