- 互联网应用常规流程、
缓存可使用在1~4的各个环节中,每个环节的缓存方案与使用各有特点。
1 缓存特征
数据分类
按使用频率和方式:
- 静态数据
一般不变,类似于字典表
- 准静态数据
变化频率很低,部门结构设置,全国行政区划数据等
- 中间状态数据
一些计算的可复用中间数据,变量副本,配置中心的本地副本
- 热数据
使用频率高
- 读写比较大
读的频率 >> 写的频率
这些数据适合于使用缓存的方式访问
- 广义,为了加速数据处理,让业务更快访问的临时存放的冗余数据
- 狭义,在分布式系统里把缓存到内存的数据,也就是 Redis
缓存是一个数据模型对象,有它的一些特征
1.1 命中率
命中率=返回正确结果数/请求缓存次数
命中率问题是缓存中的一个非常重要的问题,它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高。
1.2 最大元素(或最大空间)
缓存中可以存放的最大元素的数量,一旦缓存中元素数量超过这个值(或者缓存数据所占空间超过其最大支持空间)
那么将会触发缓存启动清空策略
,根据不同的场景合理的设置最大元素值往往可以一定程度上提高缓存的命中率,从而更有效的使用缓存
1.3 清除策略
缓存的存储空间有限制,当缓存空间被用满时,如何保证在稳定服务的同时有效提升命中率?
这就由缓存清空策略来处理
常见的一般策略有:
- FIFO(first in first out)
最先进入缓存的数据在缓存空间不够的情况下(超出最大元素限制)会被优先被清除掉,以腾出新的空间接受新的数据
策略算法主要比较缓存元素的创建时间。在数据实效性要求场景下可选择该类策略,优先保障最新数据可用
- LFU(less frequently used)
无论是否过期,根据元素的被使用次数判断,清除使用次数较少的元素释放空间
策略算法主要比较元素的hitCount(命中次数)。在保证高频数据有效性场景下,可选择这类策略
- LRU(least recently used)
无论是否过期,根据元素最后一次被使用的时间戳,清除最远使用时间戳的元素释放空间
策略算法主要比较元素最近一次被get使用时间。在热点数据场景下较适用,优先保证热点数据的有效性
除此之外,还有一些简单策略比如:
- 根据过期时间判断,清理过期时间最长的元素
- 根据过期时间判断,清理最近要过期的元素
- 随机清理
- 根据关键字(或元素内容)长短清理等
缓存使用不当导致的问题
- 系统预热导致启动慢
一个系统启动需要预热半个小时。 导致系统不能做到快速应对故障宕机等问题。 - 系统内存资源耗尽
只加入数据,不能清理旧数据。 旧数据处理不及时,或者不能有效识别无用数据。