系统性能提升利刃 缓存技术使用的实践与思考
定期删除
A. 方案一:全量数据扫描,依次遍历判断过期时间
B. 方案二:存储绝对过期时间+BTree 索引
d)单层定时轮算法
这样一种算法结构,将时间和空间巧妙地结合在了一起。新增元素的时间复杂度为 O(1),直接插入待批量过期的 slot 的上一个位置即可;获取待删除元素列表时间复杂度也是O(1),就是待批量过期的 slot 位置。流行框架 Netty、Kafka 都有定时轮的影子。
当然,单层定时轮只适用于固定时间过期的场景,如果需要管理不同过期时间的元素,那么可以参考"多层定时轮算法",其实就是模拟现实世界的时针、分针、秒针的概念,建立多个单层定时轮,采用进位和退位的思想来管理元素的过期时间。
7.保证业务数据一致性的策略
7.2.2 先操作(delete/update)缓存,再操作 DB
结论:先 delete 缓存,再操作 DB,能尽可能达到两步处理的原子性效果,即使流程中断对业务影响也是最小的。
对于本地缓存,如果缓存的数量是可估计的,且不会变化的,那么可使用 JDK 自带的HashMap 或 ConcurrentHashMap 来存储。
对于有按时间过期、自动刷新需求的本地缓存可以使用 Caffeine。
对于分布式缓存且要求有丰富数据结构的,推荐使用 Redis。
高德全链路压测平台 TestPG 的架构与实践
如何保障系统稳定性是几乎所有互联网企业都需要面对的问题。通常来讲,有五种手段来从理论上保障系统的稳定性,分别是:
容量规划