spring cache +redis与直接用redis有什么不同么?
spring cache 不也是缓存么,为什么不直接用redis呢,spring cache redis集成这样子有什么好处呢?
集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境
redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况
spring cache是很早就有的东西,现在+redis是为了顺应时代,更好的兼容集群环境,加强保留spring cache功能,不如直接使用redis
Spring cache是代码级的缓存,他一般是使用一个ConcurrentMap。也就是说实际上还是是使用JVM的内存来缓存对象的,
那么肯定会造成大量的内存消耗。但是使用方便。
Redis 作为一个缓存服务器,是内存级的缓存。它是使用单纯的内存来进行缓存。
那么Spring cache +redis的好处显而易见了。既可以很方便的缓存对象,同时用来缓存的内存的是使用redis的内存,
不会消耗JVM的内存,提升了性能。
当然这里Redis不是必须的,换成其他的缓存服务器一样可以,只要实现Spring的Cache类,并配置到XML里面就行了。
redis的集群比较好,缓存为键值对的形式,并且redis是内存型数据库,所以redis的效率在一定程度上是比cache高的,(小白见解)
redis主要是实现分布式缓存
spring cache 不是
spring cache 是spring实现的java代码级的缓存,类似于ehcache。
但是spring cache 没有对集群进行支持,ehcache支持集群。
spring cache在单机上性能表现好一些;之所以使用spring cache 结合redis使用 一般是为了提高性能,优化实现流程。把一些系统配置级的东西用spring cache实现比较好一些。
毕竟redis 从2.8后才对集群支持好一点。
当然,我还是比较推荐现在的redis。具体项目具体分析实现。
spring cache 是基于注解的,对代码侵入比较小,但是支持的api太少了,不能满足大部分业务需求。
redis基于api,优点是api类型多,缺点是业务代码入侵
还有就是楼上说的spring cache是单机,不适合分布式