在项目发展的初期,本地缓存 比如 ehcache ,可以提供快速的数据访问能力,很大程度上减轻了数据库的压力,提升系统 的吞吐量,但是它的局限性也很明显。
ehcache 的本质还是一个进程内的缓存技术,所以,它肯定会占用JVM虚拟机的内存,这也给我们本来就很紧张的内存 雪上加霜,如果缓存占内存的比例较大,很有可能就会引发程序的内存溢出, 更会使程序出现多个GC 和 暂停时间延长,影响系统的吞吐量。
所以随着项目及业务的发展,本地缓存技术逐渐被分布式缓存技术所代替,当然这并不是否认 本地缓存技术 就没有用武之地,一些场景下 分布式缓存 也会出现它的瓶颈,所以本地缓存和分布式缓存的集合将是一个不错的方案。
画外音
Ehcache 开发团队也意识到这个问题,所以在ehcache3.x 的版本后,提供了off-heap(堆外内存)特性,该特性 可以使 ehcache 避免占用 heap的空间,降低GC 及 暂停次数,来提高吞吐量。
1 | off-heap 技术与 JVM 底层机制紧密相关,对于JAVA 开发人员来说,大家都知道,Java程序始终是运行在JVM虚拟机中的,它与宿主环境是隔离的,因为一般给新对象分配 内存都在 heap 中进行, |
off-heap 带来的好处
- 减少了GC 和暂停次数
- 拥有更大的内存空间
- 减去了物理内存 与 heap 之间的数据复制
步入主体,我们的分布式缓存技术 Redis,它是一个 C 语言编写的开源分布式Key-Value 储存系统,支持多种数据结构(如String,List,Set,zset,Hash)等等。
使用Jedis 操作客户端
1 | 引入依赖 |
Redis整体性能非常高效,可以使用redis自带的工具 benchmark 来测试