缓存框架调研
Redis
简介:结构化数据存储服务。由客户端提供一系列api(command)来访问数据。支持分布式存储。
开源:C语言
jsr107:不支持
ssl加密:支持
sql查询:rediSQL – 500+ stars
事务:MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。
数据分区:固定为16384个slot
java原生数据类型:redis只支持自己提供的数据类型,String,Hash,Set,List,Zset
二级缓存支持:不支持
事件通知:publish、subscribe命令
持久化:rdb、aof
客户端api:jedis、redisson
Ehcache
简介:进程内缓存框架,基于java开发,支持分布式存储,支持进程外存储。
开源:Java
jsr107:支持 相关资料
ssl加密:不支持
sql查询:不支持
事务:JTA事务支持
数据分区:只存储local cache,分布式调用各自server上面的缓存数据
java原生数据类型:与java原生数据类型兼容,本质上存储的都是Object
二级缓存支持:无相关概念
事件通知:CacheManagerEventListener和CacheEventListener接口
持久化:磁盘
客户端api:ehcache
Hazelcast
简介:集群化分布式内存存储平台。
开源:Java
jsr107:支持
ssl加密:商用版支持
sql查询:仅提供有限的支持(只有几个关键字)
事务:不支持
数据分区:271个partition
java原生数据类型:提供了set、map、list等数据类型
二级缓存支持:无相关概念
事件通知:CacheManagerEventListener和CacheEventListener接口
持久化:商用版支持
客户端api:hazelcast-client
Ignite
简介:基于内存的分布式数据库,缓存,计算平台。
开源:Java
jsr107:支持
ssl加密:支持
sql查询:支持
事务:支持
数据分区:一致性hash
java原生数据类型:支持
二级缓存支持:客户端缓存
事件通知:IgniteEvents
持久化:可集成外部数据源(db、nosql等)
客户端api:ignite
总结
Redis使用最广泛,但是源码是C语言写的,修改原生功能相对困难。
Ehcache的免费版仍然着眼于单机的缓存模式,集群化的实现相对困难,而收费版在集群化,堆外存储,持久化上面已经和市面上的大多数缓存框架功能一致了,远程调用和集群分片的模式较为成熟。
Hazelcast和ehcache的收费版较为相像,但是更为灵活,数据同步的方式(同步/异步复制),副本集的数量,分片的存储方式都是可配置的。集群高可用的算法利用的是集群最老的节点保存的分区表。
Ignite提供的功能更为强大,但是使用的公司相对较少。Ignite的设计是为了方便做内存计算,单纯的存储(尤其是持久化)会显得不太方便。比较亮眼的功能有对等类加载。