美文网首页java基础Java
Java高并发-缓存

Java高并发-缓存

作者: Marlon666 | 来源:发表于2018-06-18 11:41 被阅读0次

    缓存

    命中率: 命中数/(命中数+ 没有命中数)
    
    最大元素(空间):缓存控件
    
    
    清空策略:
    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、缓存的雪崩现象
    

    相关文章

      网友评论

        本文标题:Java高并发-缓存

        本文链接:https://www.haomeiwen.com/subject/uucneftx.html