我有一台服务器全天运行,使用redis作为数据存储。每天特定时间(凌晨3点)有一个巨大的数据更新(近1000万行)和大量实时,但很少有数据(近100行)在其他时间更新。
我选择redis质量插入模式来加速数据插入,这需要30秒。但那时,redis查询性能非常糟糕。有什么想法可以避免这个问题吗?
如果我使用redis主从模式来分离读写,主机写入和从机读取。但是当批量插入发生在主服务器上时,还有很多数据需要同步到从服务器,我怀疑它仍然是从服务器redis上查询的热点。
关于这种senario的任何建议?
谢谢。
答案 0 :(得分:2)
首先,我要调查瓶颈在哪里。是网络I / O吗?您可能希望设置具有(虚拟)网络的专用路由,甚至是专用的互联网连接来解决这个问题。是CPU吗?您可能希望分散大量插入。
如果您使用简单的非事务性流水线操作,它应该给redis时间呼吸,因此客户不会注意到大量插入。
另一种方法是使用客户端连接。让客户端连接到另一个从属服务器,您可以暂时将其提升为主服务器。大量插入完成后,您可以让客户端连接到真实的'奴隶了。你可能可以使用redis sentinel,但是使用redis pub / sub你可以完成相同的结果,但需要更多控制。使用单独的小型redis实例,其中redis连接主机/端口存储在HSET
。
希望这有帮助,TW