Java高并发-缓存

缓存

命中率: 命中数/(命中数+ 没有命中数)

最大元素(空间):缓存控件


清空策略:
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、缓存的雪崩现象
    原文作者:MarlonSH
    原文地址: https://www.jianshu.com/p/8aba119a3033
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞