1、缓存的介绍
平时用的Redis缓存是一款高性能的内存型键值对(key-value)数据库,是高并发场景常用一款存储中间件,其主要用于:缓存热点数据,减少DB的请求IO;
其场景使用主要有:分布式锁,全局ID,计数器,限流,消息队列,购物车等
2、缓存的使用
PS: 部分场景可能存在查询缓存时,如缓存无数据,可能会直接返回空数据给客户端,不再去查询DB;
3、缓存的设计
4、缓存的测试
PS: 缓存的测试可从四个唯度进行测试:
使用场景评审
1 缓存使用场景的评审:
评估业务场景是否真的需要缓存;
2 评估缓存 与 DB 短期的数据短期暂不致对业务带来的影响;
3 键值规范设计是否合理:
请考 缓存设计 KEY-VALU的规范
4 业务场景中缓存模式的选择:
参考 缓存模式的选择
5 缓存的更新策略:
是否存在并发场景,是否在并发场景下出现脏数据的读
参考缓存的更新策略,一般推荐先更新DB,再淘汰缓存
6 业务使用的空间大小是否在最近的增长时有内存不够风险:
7 评估缓存时间设置的合理性;
缓存的功能测试
缓存的特殊场景
1 缓存超时:
验证缓存查询达到超时后,未返回指定的数据,对系统的影响;强弱依赖
2 缓存穿透
不断查询一个DB和缓存中一定不存在的数据,验证返回数据为空;
3 缓存雪崩:
验证缓存 是否采用了相同的过期时间,如果缓存 大量在同一时间失效,验证系统功能是否正常,DB的IO读取是否正常,其系统中DB性能指标是否正常;
4 缓存击穿:
缓存中的数据没有查询过,第一次高并发访问
缓存中的一条数据刚好失效,进行高并发访问 ,校验功能是否正常,DB指标是否正常,其对应的性能指标是否正常;
5 缓存预热:
大批量缓存在同一时间点过期,验证缓存预热耗时及预期时机
在缓存预期期间请求 更新接口和查询接口,验证返回数据的正确性
6 缓存内存上限:
验证缓存淘汰参数配置与预期是否一致:增加缓存到达最大内存限制时(通过修改redis.conf配置文件中配置最大可用内存值maxmemory),再次请求查询 ,数据返回是否正确,且缓存淘汰是否正确
7 缓存服务异常
验证关闭缓存服务,系统功能和性能的表现
重启缓存,请求查询数据是否正确,DB数据与Redis数据是否一致;
6 读写并发测试:
并发请求缓存中的有的数据,验证返回数据是否正确,性能指标是否正常
并发请求缓存中没有但DB有的数据,验证返回数据是否正确,性能指标是否正常
并发请求缓存中和DB中也没有的数据,验证返回数据是否为空,性能指标是否正常;
7 性能测试(redis-benchmark):
单机和集群Reids的吞吐量
对比不同存储类型的性
开启和关闭持久化的吞吐量
对比调优前后的吞吐量
对比不同版本的Redis的吞吐量
缓存 的监控
缓存的命中率,评估缓存设计 是否达到预期
监控CPU,内存使用率,及 CPU,内存使用异常
监控Key值过大的阀值
监控KEY是否存在频繁更新场景
监控Value读取时间