文章目录
一、命中率介绍
- 命中率:可以从缓存获得需要的数据
- 未命中率:无法从缓存获取到想要的数据,而导致需要从数据库中或者其他操作获取到数据。
原因是缓存不存在或者缓存已过期
二、如何计算命中率
通过redis提供的info命令查看参数
命令:
127.0.0.1> info
输出:
expired_keys:2061008
evicted_keys:0
keyspace_hits:19528495
keyspace_misses:2915371
计算公式:命中率=击中数量/(keyspace_hits(击中数量)+keyspace_misses(未击中数量))
良好的系统可以保持命中率在95%以上
三、影响提高命中率的因素及方案
1. 业务场景和需求
缓存适合做“读多写少”的场景。反之,数据放进缓存就不合理了。业务场景和需求要求缓存的时效性,也会影响缓存的更新策略和更新时间,即时效性越低越适合做缓存,缓存时间越长,其命中率就越高
2. 缓存设计(粒度和策略)
粒度越小,命中率越高。粒子指的是存储对象的单位,如存储用户信息,存储单个对象和存储所有对象的集合相比,前者粒子较小。因为当一个用户对象发生变化时,都需要移除或更新缓存。此外,缓存的更新/过期策略也会影响命中率,当数据发生变化时,更新缓存会比移除缓存命中率更高。
3. 缓存容量和基础设施
如果缓存的容量有限,也容易导致缓存失败或者失效。而选择缓存的架构也是可以提高命中率,因为单继缓存毕竟没有集群分布式缓存容易扩展。其效率和稳定性也存在差异。
4. 其他因素
当缓存节点发生故障时,需要避免缓存失效并最大程度降低影响,这种情况就要用到redis的哨兵模式+redis的主从来解决了。