performance - redis批量插入时读取redis

标签 performance redis insertion

我有一台全天候运行的服务器,使用 Redis 作为数据存储。每天在特定时间(凌晨3点)有一次巨大的数据更新(近1000万行),其他时间更新的数据很多(近100行)。

我选择redis mass insertion方式加速数据插入,耗时30秒。但是那个时候redis的查询性能真的很差。有什么办法可以避免这个问题吗?

如果我用redis主从模式,读写分离,主写,从读。但是当master批量插入时,也有大量数据需要同步到slave,怀疑还是slave redis查询的热点。

对这种senario有什么建议吗?

谢谢。

最佳答案

首先,我会调查瓶颈在哪里。是网络 I/O 吗?您可能想要设置一个带有(虚拟)网卡的专用路由,甚至是一个专用的互联网连接来解决这个问题。是中央处理器吗?您可能想要分散大量插入。

如果您使用简单的非事务性流水线,它应该给 redis 喘息的时间,这样客户就不会注意到大量插入。

另一种方法是使用客户端连接。让客户端连接到您临时提升为主控的另一个从站。批量插入完成后,让客户端再次连接到“真正的”奴隶。您可以为此使用 redis sentinel,但使用 redis pub/sub 可以实现相同的结果,但具有更多控制权。使用一个单独的小型 redis 实例,其中 redis 连接主机/端口存储在 HSET 中。

希望这有帮助,TW

关于performance - redis批量插入时读取redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419378/

相关文章:

MYSQL查询速度更快

redis - 通过Lua在Redis中设置多个key

redis - 使用 REDIS 排序集,某些特殊操作的时间复杂度是多少?

Java::LinkedList 的插入速度真的比 ArrayList 快吗?

c - 如何理解插入排序中改变键值?

Mysql InnoDB插入速度太慢?

javascript - Firefox 重绘非常慢(5 秒)

Python字符串搜索效率

MySQL 使用 WHERE 语句跨表选择 COUNT()?

php - 用户在 Laravel 中使用 Redis 加入广播 channel 后,在后端获取事件