Part 1 造成redis block的常见因素
- 存在大对象且对大对象执行复杂度较高的命令,或者执行某些耗时的命令,或者执行本身会造成阻塞的命令
(1)对一个有千万个元素的hash执行hgetall操作, 或del操作.类似的这种操作都会造成Redis阻塞
(2)对于这种大对象可以采用redis-cli -h {host} -p {port} bigkeys 来查看。但是该命令只能查询某类型中的其中最大的一个key。如果你想查询多个。可以采用修改redis-cli源代码的方式(Redis的源代码是C)。如果不想修改源代码的话也可以使用scan来完成。对于Scan命令需要注意。该命令只能扫描单台Redis上的数据。如果你是一个集群,需要每台机器执行一遍。但是如果你使用开源的客户端的话(比如:Java的Lettuce客户端)就已经帮你把scan命令实现为可以扫描整个集群了。
(3)然后对大对象进行拆分。具体拆分要视业务而定
- Redis的CPU使用率高或者出现CPU竞争
Redis是一个CPU密集型的应用,不适合和其他CPU密集的服务部署在一起。
- 内存交换
Redis是一个内存型数据库,所有数据全部放在内存中。所以强烈建议不开启内存交换
- 网络问题
主从同步网络延迟较大的话,导致从机经常断线重连。如果断线时间久了,导致从机再次连接上主机时会全量同步,这时主机,从机都会受到影响。
Part2 造成connection reset by peer的常见原因
Connection reset by peer 含义
定义1:当前服务器接