1.Java开源缓存框架
(1)比较有名的本地缓存开源框架有:
<1>OSCache:缓存任何对象,可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存
<2>JCache:Java缓存新标准(javax.cache)
<3>cache4j:有简单API与实现快速的Java对象缓存,它的特性包括:
1.在内存中进行缓存,设计用于多线程环境,
2.两种实现:同步与阻塞
3.多种缓存清除策略:LFU, LRU, FIFO,可使用强引用
<4>ShiftOne:一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架
<5>Guava Cache:一个全内存的本地缓存实现,它提供了线程安全的实现机制
<6>WhirlyCache:一个快速的、可配置的、存在于内存中的对象的缓存
<7>EhCache:一个支持分布式的本地缓存框架(这是该缓存的最大优点)
1.官方网站:http://ehcache.org/
2.默认提供Hibernate的缓存实现
3.同类的Java缓存框架中,Ehcache配置相对简单,也比较容易上手,最大的优势是它支持分布式缓存
4.属于本地开源分布式缓存框架
实践中,常使用Guava Cache,以及与Spring结合良好的EhCache!
(2)比较有名的分布式缓存框架:
<1>Ehcache:一个Java实现的开源分布式缓存框架
1.EhCache 可以有效地减轻数据库的负载
2.可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取
3.EhCache 扩展非常简单,官方提供的Cache配置方式有好几种
<2>Cacheonix: 高性能Java分布式缓存系统
1.也是一个基于Java的分布式集群缓存系统,它同样可以帮助你实现分布式缓存的部署
<3>JBoss Cache:基于事物的Java缓存框架
1.一款基于Java的事务处理缓存系统
2.目标是构建一个以Java框架为基础的集群解决方案,可以是服务器应用,也可以是Java SE应用
<4>Voldemort: 基于键-值(key-value)的缓存框架
1.一款基于Java开发的分布式键-值缓存系统
2.支持多台服务器之间的缓存同步,以增强系统的可靠性和读取性能
<5>Redis:基于内存、可持久化的日志型、Key-Value数据库高性能存储系统,并提供多种语言的API
1.可用作数据库、缓存或消息代理
2.由于是从内存而非磁盘加载数据,Redis 比许多传统的数据库解决方案更快
3.支持集群、分布式、主从同步等配置
4.支持六种数据类型(string/hash/list/set/zset/hyperloglog)的操作
<6>memcached:本身不提供分布式的解决方案
1.主要在于客户端,通过客户端的路由处理来搭建memcached集群环境
2.服务端,memcached集群环境实际上就是一个个memcached服务器的堆积品,环境的搭建比较简单
实践中,常使用Redis作为分布式缓存框架!
2.扩展:
(1)Redis的三个分支框架:Jedis,Redisson,lettuce
<1>要在项目中使用Redis,需要引入对应的jar包支持
<2>Redis为开发者提供了三种框架的jar包
<3> Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis
<4>Redisson,lettuce基于Netty框架的事件驱动的通信层,其方法调用是异步的
<5>Redisson,lettuce的API是线程安全的,所以可以操作单个Redisson,lettuce连接来完成各种操作
<6>结论:建议使用:Jedis + Redisson
(2)Redis:Jedis,Redisson选型对比
<1>与第三方框架整合:Redisson优秀
<2>数据结构:Redisson优秀
1.在分布式开发中,Redisson可提供更便捷的方法
2.Jedis仅支持基本的数据类型如:String、Hash、List、Set、Sorted Set
<3>可伸缩性:Redisson优秀
<4>编程模型
1.Jedis中的方法调用是比较底层的暴露的Redis的API
2.Jedis中的Java方法基本和Redis的API保持着一致
3.Redisson中的方法则是进行比较高的抽象,每个方法调用可能进行了一个或多个Redis方法调用
(3)Redis与Memcached对比
<1>Memcached性能高效,使用方便,但功能相对单一,只支持字符串类型的数据
<2>Memcached需要结合序列化协议,只能用作缓存
<3>Redis是目前最流行的缓存服务器,具有高效的存取速度,高并发的吞吐量
<4>Redis有丰富的数据类型,支持持久化
<5>Redis兼具了缓存系统和数据库的一些特性
<6>Redis应用场景非常多,包括数据缓存、分布式队列、分布式锁、消息中间件等