Redis的各种key问题
1.大Key问题
大key其实指的是大value 即value很大
一般来说 一个Stirng超过5M hash超过100m等都可以称之为大key
大key的危害:
1.占据大量内存,可能造成内存紧张
2.Redis单线程,操作大Key会造成阻塞 影响其他命令
3.对网络资源的占用大、网络延迟高
解决:
1.业务层面:压根不应该把这么大的数据存在redis 要优化业务层
2.对数据进行压缩
3.选用合适的数据结构 hash 等
4.把大对象拆分成不同的小对象 减少单个key的大小
5.redis集群 把大key拆分 散落到不同节点 在服务端再做拼接
若何查询大key?
用redis-cli --bigkeys命令
2.热点key问题
热key即qps过高的key
危害:
1.占用大量cpu性能甚至造成redis崩溃
2.集群访问倾斜:其他节点空闲
3.redis崩溃导致大量请求直达数据库层 引发击穿
解决:
1.热key备份:加上随机后缀放到不同的节点 分散读写压力 但是可能要额外的同步机制
2.多级缓存:再加上一层本地缓存,单少redis的访问次数 需要额外的同步机制
3.热key拆分:每个节点存一部分
4.核心业务隔离:把热点key 和非核心业务隔离 保证及时redis宕机也不会影响其他业务
如何检测:
1.根据业务经验判断
2.redis集群监控
3.hotkey指令
4.monitor
5.客户端收集