具备根据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。
关于存储技术就介绍完了,您有什么想法可以联系小编。