解决热点数据集中失效问题
在设置缓存的时候,一般会给缓存设置一个失效时间,过了这个时间,缓存就失效了;
对于一些热点的数据来说,当缓存失效以后会存在大量的请求过来,然后打到数据库去,从而可能导致数据库崩溃的情况;
解决办法
- 设置不同的失效时间;
- 采用缓存击穿的解决办法,加锁;
- 永不失效,就是采用定时任务对快要失效的缓存进行更新缓存和失效时间;
缓存的测试点
功能:
- 缓存是否可以正确被创建,包括位置、名字和内容;
- 缓存是否被清除,包括主动清楚以及被第三方发起的清除,清除后是否正常工作及清除失效的情况;
- 系统运行过程中,redis缓存数据生效、缓存的数据读取正确、数据写入落地正确,数据有效期设置合理;
- 缓存与数据库的数据一致性检测;
- DB事务性导致回滚,缓存是否回滚,有没有产生脏数据;
- 缓存是否有大小限制,达到大小临界值如何处理;
- 缓存时突然被中断,如何处理;
- 缓存失效后,是否能正常表现;
自动化:
- 自动化用例中断言部分设计缓存层断言并且自动化框架本身对于断层层次可配置;
性能及稳定性:
- 关注业务本身应用场景及缓存结构,是否使用缓存;
- 预防缓存穿透、缓存雪崩、缓存击穿引发的系统风险;
扩容:
- 关注扩容方案设计、老数据备份策略、回滚方案;
- 关注扩容后分片策略的变化;
- 扩容后热点数据失效率或命中率以及对后端DB带来的压力;
环境:
无网络&有数据:
- 缓存大小未超过,缓存时间有效期内,显示缓存数据加载;
- 缓存大小超过,本地缓存数据删除,显示无网提示,无数据加载;
- 缓存时间过期,本地缓存数据删除,显示无网提示,无数据加载;
无网络&无数据:
- 显示无数据加载;
有网络&有数据:
- 缓存大小未超过,缓存时间有校内,显示缓存数据加载;
- 缓存大小超过了,本地缓存数据删除,直接从线上拉取数据;
- 缓存时间过期,本地缓存数据删除,直接从线上拉取数据;
有网络&无数据:
- 直接从线上拉取数据存到本地;
缓存存储:
- 客户端安装后,有网络,开始存储数据到本地;
- 覆盖安装,缓存数据依然存储在本地;
- 清除数据、卸载、重装,内存和本地缓存数据清零;
异常情况:
- 由于网络原因缓存失败,则无法读取缓存数据;
- 由于服务器原因导致缓存失败,则无法取缓存数据;
- 终端本地的数据接近满值,内存被占用,无法读取缓存数据;
- 设置的缓存文件夹和数据文件不可读写;
- 缓存的刷新机制是否手动操作;
小结
之前没深入了解过缓存,真的没有覆盖那么多场景,基本都需要了解技术细节,才能设计出这样的测试场景,偏后台内部逻辑的测试;