2016-05-28 66 views
4

我们有一个Redis集群配置用作缓存。 现在由于正常模式的写入主机和从从机(使用其他数据库)读取,我们正在尝试使用Redis群集执行同样的操作。
经过一番调查后,我们发现没有Redis客户端(在Java中)像redisson,jedis和Spring Data Redis支持这一点。 我们似乎已经找到了一些解决方法,但它看起来很丑,现在我在想它是否值得呢?我应该从Redis群集中读取数据吗?

这里是我的使用情况

  • 约最高QPS:1000
  • 有效载荷大小:巨大的1 MB最大(压缩后)
  • 簇的大小3个硕士点每2个奴隶(相当高规格的机器)
  • 畏缩部分:实际网络带宽给该群集是最大1GB(1 GB分别用于群集内谈话)

考虑到这一点,我有以下问题:

  • 它(从奴隶阅读)以任何方式帮助我吗?
  • 我应该避免任何坑洞(任何特殊的服务器端配置)吗?
  • 狭窄的道路会成为一个问题吗?
  • 是否有这样做的正确

任何帮助的标准方式(库/客户端)(博客,案例研究,建议)是极大的赞赏。

回答

5

您对奴隶阅读的期望是什么?

这是可能的和usual pattern从奴隶读取,但它带有一组效果。

  1. 从读取引入陈旧数据读取
  2. 从多于一个源读取允许控制读出源。这在处理可用性问题时很有用(例如主服务器已关闭,以便您可以从服务器读取数据以保持您的可用性)或延迟问题(例如,使用读取时间最短的节点)
  3. 您可以使用从属读取来分发服务器负载。虽然这是可能的,Redis的需要过大的负荷看到一些效果

http://redis.io/topics/cluster-spec#scaling-reads-using-slave-nodes引用:

通常从节点将客户端重定向到权威主 为参与给定的命令的散列时隙但是,客户端可以使用 从站,以便使用READONLY命令来扩展读取。

READONLY告诉Redis集群从属节点客户端正常 读取可能过时的数据并且对运行写入 查询不感兴趣。

Jedis没有内置支持从主节点读取其他节点。 Redissonlettuce为主和从读取提供内置支持。 Redisson在内部使用平衡器(随机,循环,加权)来分配操作,生菜提供偏好驱动(仅主人,主人首选,奴隶,最近)方法。

Spring Data Redis构建在Jedis和生菜的顶部,但不提供通用功能从奴隶读取。

一个很好的经验法则是使用奴隶来获得可用性,而不是性能。

2

无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); 
相关问题