缓存框架调研

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的设计是为了方便做内存计算,单纯的存储(尤其是持久化)会显得不太方便。比较亮眼的功能有对等类加载。