Guava Cache
Google Guava工具包是一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。Guava在每次访问缓存的时候判断cache数据是否过期,如果过期,这时才将其删除,并没有另起一个线程专门来删除过期数据。内部维护了2个队列accessQueue和writeQueue来记录缓存中数据访问和写入的顺序。访问缓存时,先用key计算出hash,从而找出所在的segment,然后再在segment中寻找具体数据,类似于使用ConcurrentHashMap数据结构来存放缓存数据。
EhCache
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
Caffeine
Caffeine是基于Java8,对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava,基于LRU算法实现,支持多种缓存过期策略。Caffeine使用Disruptor框架的RingBuffer数据结构记录,RingBuffer是一个环形队列,并且是无锁的,利用的是缓存行的特性。
比较:
- 在加过期时间的情况下三个缓存方案的性能均有所提升
- Guava不加过期时间的情况下高并发会OOM,Guava使用jdk的Queue记录缓存的写读情况,导致OOM
- EhCache在加过期时间的情况下比Guava的性能要好
- Caffeine读比写的性能比Guava和EhCache要高很多
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121014.html