我有一个全天运行的服务器,使用redis作为数据存储。每天在特定的时间(凌晨3点)有一个巨大的数据更新(近1000万行),而在其他时间更新的数据很少(近100行),而且有很多实时更新。
我选择了redis批量插入模式来加速数据插入,耗时30秒。但是在那个时候,redis的查询性能真的很差。有什么办法可以避免这个问题吗?
如果我使用redis主从模式来分离读和写,并且主写和从读一样。但是当批量插入发生在主机上,也有大量数据需要同步到从机时,我怀疑它是否仍然是备机redis上查询的热点。
对这种方式有什么建议吗?
谢谢。
发布于 2014-03-17 01:15:28
首先,我会调查瓶颈在哪里。是网络I/O吗?你可能想用(虚拟)网卡建立一个专用的路由,甚至一个专用的互联网连接来解决这个问题。是CPU吗?您可能想要展开批量插入。
如果你使用简单的非事务性流水线,它应该给redis喘息的时间,这样客户端就不会注意到大量插入。
另一种选择是使用客户端连接。让客户端连接到不同的备机,您暂时将其提升为主机。在批量插入完成后,您可以让客户端再次连接到“真正的”从服务器。你也许可以使用redis sentinel来实现这一点,但是使用redis pub/sub你可以实现同样的结果,但需要更多的控制。对存储在HSET
中的redis连接主机/端口使用单独的小型redis实例。
希望这能帮上忙,TW
https://stackoverflow.com/questions/22419378
复制相似问题