阅读背景:

Redis 缓存的使用与优化

来源:互联网 
缓存的使用与设计 缓存的收益与成本 缓存更新策略 缓存粒度控制 缓存穿透优化 缓存无底洞问题 缓存雪崩优化 热点key重建优化 缓存降级 缓存的收益与成本 收益 加速读写 降低后端负载,例如使用 redis 降低 mysql 负载等。 成本 数据不一致:缓存层和数据层有时间窗口不一致的情况,和更新策略有关。 代码维护成本:多了一层缓存逻辑。 运维成本:例如 Redis Cluster 使用场景 降低后端负载,对高消耗的SQL比如JOIN结果集、分组统计结果缓存。 加速请求响应,利用Redis/Memcache优化IO响应时间。 大量写合并为批量写,如计数器现在Redis累加再批量写DB。 缓存更新策略 三种策略 LRU/LFU/FIFO算法剔除 超时剔除,例如expire。 主动更新,代码层面控制生命周期 对比 策略 一致性 维护成本 LRU/LFU/FIFO剔除算法 最差 低 超时剔除 较差 低 主动更新 强 高 两条建议 对于一致性要求低的缓存:最大内存和淘汰策略,即直接往内存里扔,达到最大内存时直接淘汰 对于一致性要求高的缓存:超时剔除和主动更新结合,最大内存和淘汰策略兜底。 缓存粒度控制 粒度问题 比如要缓存一个mysql中的用户信息:select * from user where id = {id}。 设置用户缓存:set user:{id} '(上面sql语句的结果)' 缓存粒度-全部属性:即缓存 select *的结果 缓存粒度-部分重要属性:比如缓存 select user_name, phone部分字段结果 三个角度 通用性:比如加了个新的字段,全量属性最好。 占用空间:部分属性更好。 代码维护:表面上全量属性会更好。 缓存穿透问题 大量请求不命中 即查询结果一直返回 null ,对于不存在的值,缓存层也没有进行缓存 缓存的使用与设计 缓存的收益与成本 缓存更新策略 缓存粒度控制 缓存穿透优化 缓存无底洞问题 缓存



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: