redis应用
1.redis缓存预热
问题 当redis中大量吞吐时导致宕机
如何解决呢
前置工作
1 日常统计数据访问记录,翁吉访问频度比较高德热点数据,
2利用lru数据删除策略,构建数据留存对队列,
storm和kafka配合
准备工作
将统计结果中的数据分类,根据级别,redis优先加载级别高德热点数据.
利分布式多服务器进行数据读取,提高加载过程.
2.redis缓存雪崩
问题 短时间大量请求导致数据库崩溃 ->导致redis崩溃
排查问题所在
短时间内较多key失效,导致大量请求访问数据库,数据库无法处理,崩溃.redis一方面无缓存可用,无法处理请求,资源被占用.
另一方面请求会越来越多导致崩溃.
短时间范围内大量key失效,是原因.
如何解决?
1. 页面静态化处理,数据静态化.
2. 构建多级架构,nginx+redis+ehcache
3. 对mysql优化
4. 灾难预警
5. 限流,牺牲客户端体验,让客户端发送假请求,一段时间后再恢复.
1.lru和lfu切换,防止同时大量数据失效.
2.数据有效期策略调整
比如设置热点的数据,使用不同的有效期.
过期时间可以加个随机值,防止同一时间大量失效.
3.超热数据使用
4.人工定期维护
3.redis缓存击穿
问题 数据库崩溃 redis却没有崩溃
排查问题所在
单个key过期了,导致大量请求访问数据库,数据库崩溃.
如何解决?
1. 预先设定
2. 监控流量,设计长时间过期.
3. 定时刷新,启动定时任务高峰期来临前,刷新有效期,
4. 二级缓存
4.redis缓存穿透
问题 数据库崩溃 redis命中率变低
排查问题所在
redis中大面积未命中,出现不正常的url.
无效数据导致redis中没有,数据库中也没有.
这是外部不正常的现象,出现有人攻击服务器.
如何解决?
1. 缓存null
如果查询结果为null,进行缓存,同时设定很短的过期时间
2. 白名单策略 布隆过滤器
3. 实时监控
检测redis命中率与null的数据对比.
超过5倍以上纳入重点排查.
4. key加密
问题出现后,情动防灾业务.
5.redis性能检测
性能指标
响应时间
每秒请求数
缓存命中率
内存指标
已使用内存
内存碎片
由于内存限制被移除的key
被阻塞的客户端
基本活动指标
客户端连接数
slave数量
最近一次主从交互后的秒数
key总数
错误指标
客户端最大连接被拒绝的次数
key查找失败的次数
主从断开持续时间
性能监控工具类
性能监控指令
慢查询工具
slowlog
get:获取
len:长度
reset:重制
可在配置文件配置慢日志的记录条数和多慢才记录进来.
slowlog-log-slower-than 100 #慢查询下限
slowlog-max-len 100 # 设置命令对应的日子显示长度