Redis使用
1.严禁直接对redis使用keys * 命令。
原因:redis是单线程操作,keys *会阻塞线程,拖慢执行速度。
替代:scan命令 scan命令是非阻塞的,
注意:返回的结果可能会有重复,需要客户端去重,这点非常重要。
2.严禁使用大key。大key规则如下:
-
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。
-
Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。
-
Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有2,000个但这些成员的Value(值)总大小为100 MB。
3.redis热点key使用规则: 热点key的过期时间要错开,避免同一时刻内大量的key过期。
附:
大key容易造成的问题:
-
客户端执行命令的时长变慢。
-
Redis内存达到maxmemory参数定义的上限引发操作阻塞或重要的Key被逐出,甚至引发内存溢出(Out Of Memory)。
-
集群架构下,某个数据分片的内存使用率远超其他数据分片,无法使数据分片的内存资源达到均衡。
-
对大Key执行读请求,会使Redis实例的带宽使用率被占满,导致自身服务变慢,同时易波及相关的服务。
-
对大Key执行删除操作,易造成主库较长时间的阻塞,进而可能引发同步中断或主从切换。
热点key容易造成的问题:
-
占用大量的CPU资源,影响其他请求并导致整体性能降低。
-
集群架构下,产生访问倾斜,即某个数据分片被大量访问,而其他数据分片处于空闲状态,可能引起该数据分片的连接数被耗尽,新的连接建立请求被拒绝等问题。
-
在抢购或秒杀场景下,可能因商品对应库存Key的请求量过大,超出Redis处理能力造成超卖。
-
热Key的请求压力数量超出Redis的承受能力易造成缓存击穿,即大量请求将被直接指向后端的存储层,导致存储访问量激增甚至宕机,从而影响其他业务。

被折叠的 条评论
为什么被折叠?



