1. 常见问题
1.1. 代码耦合
假如业务代码中交织大量缓存相关的代码, 会增加维护工作量
可以使用 aop 的方式, 将缓存代码剥离出来, 集中在一起, 提高代码的可重用性和可维护性.
可以参考
以及 qiujiayu/AutoLoadCache
1.2. 缓存冲突
在多模块开发中, 可能有多个模块使用同一个 key 的问题
解决办法:
- 在每个 key 之前加上一个 namespace, 用来标识区分不同模块的缓存
- 在 redis 中, 也可以让不同的模块使用不同的 database 的方式
1.3. 缓存穿透
@TO-BE-CONTINUE 2020-04-27
1.4. 缓存雪崩
突然在某一时刻, 有大量的缓存失效, 导致大量查询请求涌向数据库. 如果数据库顶不住压力, 就会连锁导致服务报错与超时, 然后请求等待时间过长后, 服务不可用
解决办法:
- 在使用缓存时, 如果发现缓存即将失效, 则通过异步队列刷新缓存
- 使用查询锁的方式, 同一个缓存的查询, 保证只有一个线程处理, 防止大量重复查询