具备根据entry节点上次被访问或者写入时间计算它的过期机制;

缓存的key被封装在WeakReference引用内;

缓存的Value被封装在WeakReference或SoftReference引用内;

统计缓存使用过程中命中率、异常率、未命中率等统计数据。

6.3 Memcache

memcache本身不支持分布式,是通过客户端的路由处理来达到分布式解决方案的目的。特点如下:

memcache使用预分配内存池的方式管理内存;

所有数据存储在物理内存里;

非阻塞IO复用模型,纯KV存取操作;

多线程,效率高,会遇到锁等上下文切换问题;

只支持简单KV数据类型;

数据不支持持久化。

6.4 Redis

Redis是当前主流的高性能内存数据库,多用于存储缓存数据,并能实现轻量级的MQ功能。特点如下:

临时申请空间,可能导致碎片;

有VM机制,能存储更多数据,超过内存空间后会导致swap,降低效率;

非阻塞IO复用模型,支持额外CPU计算:排序、聚合,会影响IO性能;

单线程,无锁,无上下文切换,单实例无法利用多核性能;

支持多种数据类型:string / hash / list / set / sorted set;

数据支持持久化:AOF(语句增量)/RDB(fork全量);

天然支持高可用分布式方案sentinel +;

cluster(故障自动转移+集群)。

6.5 推荐

通常情况下,单机我们会用Ehcache,甚至java自己的concurrenthashmap来实现缓存。分布式一般使用redis。

关于存储技术就介绍完了,您有什么想法可以联系小编。