缓存
命中率: 命中数/(命中数+ 没有命中数)
最大元素(空间):缓存控件
清空策略:
FIFO(先进先出) 最近进入缓存队列的数据,在内存不够、超出最大元素限制的时候优先被清除缓存,以腾出空间缓存缓存新的数据。
LFU(最少使用策略) 清除使用次数比较少的数据。
LRU(最近最小使用策略) 无轮是否过期,根据数据最后一次使用的时间戳。有小保证热点数据。
过期时间 :过期最长时间的缓存和过期时间最短时间的缓存。
随机
场景和业务需求:读多写少的场景,实时性越低就越容易缓存,缓存时间长就越容易命中
缓存的设计(粒度和策略) :
缓存的容量和基础设施 :
缓存节点失效发生故障(等):
(熔点冗余)
提高数据命中率
缓存分类和应用场景
本地缓存:编程实现(成员变量、局部变量、静态变量)
Guava Cache
分布式缓存: Memcache 、 Redis
Guava Cache
设计灵感来源于:ConcurrentHashMap
类似于Map,是一个存储键值对的集合,另加了缓存过期和动态加载等算法的逻辑;按照根据面向对象的
思想做方法和对象的关联性封装。
实现的功能:将节点加载进缓存结构中,当缓存的数据超过设置的最大值时,使用LRU算法来移除数据,
他可以根据节点上次被访问或者写入时间来计算他的过期机制。
key 放在XXX中,value 放在XX中;可以统计缓存的命中率,异常率,未命中率等统计数据。
通过segment来实现细粒度锁,
Memcache(原理懵逼)
开源分布式缓存产品
单个ITEM 2G ,KEY 250个字节
Redis
远程内存数据库,非关系型数据库。
特点:
1)支持数据持久化,可以把内存的数据保存到磁盘上,可以再次加载使用。
2)不仅支持简单的key value数据还支持特殊的类型: list 、set 、hash、sorted set 丰富的数据类型。
3)支持数据备份
4)性能极高,读写强劲
5) 所有操作都是 原子性,同时支持多个操作合并后的原子性执行
6) key 过期、pubish、通知、subscribe 等功能
使用场景:
1、去最新数据的操作
2、排行榜类似的应用
3、需要精准设计过期时间的应用
4、用于计数器的应用
5、可以应用于做唯一性检查的应用
6、获取某一个时间段内所有数据的排序值
7、实时系统和来垃圾系统、实时的消息和队列系统,以及最基础的缓存功能
高并发场景下缓存的常见问题
1、缓存一致性问题
2、缓存并发问题
3、缓存穿透问题
1) 缓存空对象
2) 单独过滤处理
4、缓存的雪崩现象