丢key (缓存污染
- 现象:现场老是出现redis-key丢失的情况,昨天的key今天就没了
- 排查角度:
- 1、key是否设置过期时间
- 2、检查key的删除逻辑
- 3、查看redis中已使用的内存是否接近maxmemory,导致触发了内存淘汰策略
- 如果是第三种情况,则根据业务场景需要设置一下config
- 修改redis-config
- 修改maxmemory
- 修改maxmemory-policy 由 allkeys-lru改为 volatile-lru
- 查看哪些key占用了比较多的内存(bigkeys排查),并查看是否有设置超时时间
- 修改redis-config
bigkeys
bigkeys:hash/set/zset中元素数量很多,string存储的数据很大
- 危害:
- 1、阻塞、redis是单线程的,对bigkeys的操作会导致阻塞其他命令,导致大批量redis操作超时报错等一系列问题
- 2、过期/删除时会阻塞,如果是redis4.0以后的版本,可以用异步删除解决(lazy-free/unlink)
- 3、内存分布不均匀,比如在redis-cluster中会造成节点内存的使用不均匀,增大某单个实例的处理压力
- 排查bigkeys的方法 :
- 1、redis-cli --bigkeys
- 2、使用开源工具,redis-rdb-tools来分析redis的key分布情况 https://github.com/sripathikrishnan/redis-rdb-tools
rdb --command json dump.rdb
- 解决方法:
- 优化存储方案
- bigkey拆分,分片存储
- 存到数据库
- 设置过期时间等
- 优化存储方案