爱陪小樱桃

导航

 

Redis经常因为各种大key/hot key的问题未及时处理导致服务器的性能下降:

什么是大key

大key的具体表现是:redis的key对应的value很大,占用Redis的空间比较大,本质上是大Value的问题。

1.对于String,value超过10M,(数据值太大)
2.set、list类型value,含有的成员10000(成员数量多)

redis是单线程执行指令的,当前面的任务完成不了,后边的命令就会阻塞,从而导致如下的结果:
1、请求响应时间上升,超时阻塞。

2.同步中断,或者主从切换
内不足,对大key,进行驱逐操作,或者rename一个大key,容易长时间阻塞主库,进而引发同步中断或者主从切换。

3.网络拥堵,一个大key占用的空间是1M,每秒访问1000次,占用1000M的流量,可能造成实际或者局域网的带宽被占满,自身服务变慢,同时影响其他的服务。

4.内存使用不均匀:在Redis集群中,某个数据分片的内存使用率远超其他数据分片,内存资源无法达到均衡,另外,Redis内存可能达到MAXmemory,甚至内存溢出。

对于Java应用来讲,高并发场景大key,问题容易导致应用服务器CPU load /内存占用飙高。

大key如何产生的:

1.错误技术选型:
比如使用String类型key,存放大体积二进制文件数据,从而造成key的value值特别大。
2、List,Set 未清理:
比如:生产者发送消息快,消费者慢,导致数据堆积占用大量内存空间。

3、数据没有合并做分片:
业务上线前:对业务分析不准确,没有对key中的成员进行合理的分析,造成个别key的成员数量过多。

如何找到大key

1、bigkeys-命令
这个指令执行后:会输出每种数据类型中的大的bigkey的信息。
2、通过监控平台:

如何解决大key

1.针对list,set这种在使用的过程中,list和set中对应的不断增加,需要定时对list和生set进行清理
2.压缩大key的value值:
3.拆分大key

posted on 2025-08-20 20:45  cherry小樱桃  阅读(44)  评论(0)    收藏  举报