常用应用缓存技术性能对比
指标 | ConcurrentHashMap | Ehcache | Guava Cache | Caffeine |
---|---|---|---|---|
读写 | 很好,分段锁方式 | 好 | 好,需要做淘汰处理 | 很好 |
淘汰算法 | 没有 | 支持多种:LRU、LFU、FIFO | 一般,LRU | 很好,W-TinyLFU |
功能 | 简单 | 很丰富 | 很丰富,支持刷新和虚引用 | 和Guava Cache类似 |
持久化 | 不支持 | 支持 | 不支持 | 不支持 |
集群 | 不支持 | 支持 | 不支持 | 不支持 |
常用分布式缓存性能对比
指标 | Memcached | Redis | Tair |
---|---|---|---|
数据结构 | 仅支持简单key-value | String、Hash、List、Set、Sorted Set | String、HashMap、List、Set |
持久化 | 不支持 | 支持 | 支持 |
容量 | 纯内存不适合过多数据 | 全内存,需要考虑资源成本 | 可以配置全内存、内存+磁盘 |
读写 | 很高 | 很高(≈RT0.5ms) | String类型比较高(≈RT1ms),复杂类型比较慢(≈RT5ms) |
策略 | 过期后不删除缓存 | 6种策略处理过期数据 | 支持 |
Redis 6种处理过期数据的策略
- 惰性删除:当客户端请求某个key时,Redis会检查key是否过期,如果过期则删除。
- 定时删除:Redis每隔一段时间对数据库进行扫描,删除过期的key。
- 惰性+定时删除:结合前两种方式。
- 内存淘汰:当内存不足以容纳新的数据时,Redis会根据一定的淘汰策略来删除一些key。
- 立即删除:在设置key的过期时间时直接删除。
- 事件触发:当发生过期事件时,删除对应的key。
Tair处理过期数据的策略
- 定时淘汰(Timed Eviction):Tair可以根据设定的时间参数,在指定的时间点对缓存中的数据进行淘汰。这种策略适用于需要按照时间计划清除过期的数据的场景。
- 容量淘汰(Capacity Eviction):当缓存达到设定的容量上限时,Tair可以根据配置的淘汰规则(如最近最少使用(LRU)、最近最不经常使用(LFU)等)来淘汰数据。这种策略有助于控制缓存的大小,避免内存资源的浪费。
- 数据过期(Data Expiration):Tair可以为存储在缓存中的每个数据设置一个过期时间(TTL)。当数据过期时,Tair会自动将其从缓存中删除。这种策略适用于需要保证数据新鲜度的场景。
- 手动删除(Manual Eviction):管理员可以手动删除缓存中的特定数据。这种策略提供了最大的灵活性,但需要管理员干预。
- 后台清洗(Background Cleanup):Tair可以在后台定期执行数据清洗任务,清理过期或无效的数据。这种策略可以在不影响缓存性能的情况下,保持缓存的数据质量。
- 读写策略(Read/Write Strategy):Tair可以根据数据的读写频率和命中率来调整淘汰策略,优先淘汰访问频率低的数据,以提高缓存的命中率。
- 实时更新(Real-time Update):Tair支持实时更新缓存数据,当数据在源系统中更新时,缓存中的数据可以立即刷新,以确保缓存数据的准确性。