Spring Cache For Redis.
2018-02-04 21:28
375 查看
一、概述
缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的。常用的缓存数据库:
Redis 使用内存存储(in-memory)的非关系数据库,字符串、列表、集合、散列表、有序集合,每种数据类型都有自己的专属命令。另外还有批量操作(bulk operation)和不完全(partial)的事务支持 、发布与订阅、主从复制(master/slave replication)、持久化、脚本(存储过程,stored procedure)。 效率比ehcache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。
memcached 使用内存存储的键值缓存,键值之间的映射、创建命令、读取命令、更新命令、删除命令以及其他几个命令。为提升性能而设的多线程服务器。memcache在客户端中实现分布式缓存,通过分布式算法指定目标数据的节点。
ehcache 纯java实现,缓存在内存中,可持久化到硬盘,效率高于memcache;但是缓存共享麻烦,集群分布式应用不方便。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。
二、Spring Cache
Spring 缓存的实现是通过创建一个切面(aspect)并触发Spring缓存注解的切点(pointcut)。根据所使用的注解以及缓存的状态,这个切面会从缓存中获取数据,将数据添加到缓存之中或者从缓存中移除某个值。Spring 能都与多个流行的缓存实现进行集成,实现步骤如下:1、启用对缓存的支持
Java 配置 注解驱动缓存----@EnableCaching
XML 声明的缓存
----<cache:annotation-driven>
2、缓存管理器
缓存管理器是Spring缓存抽象的核心,它能够与多个流行的缓存实现进行集成。Spring3.1配置了五个缓存管理器实现:SimpleCacheManager
NoOpCacheManager
ConcurrentMapCacheManager(它的缓存存储是基于内存的,所以它的生命周期是与应用关联的,对于生产级别的大型企业级应用程序,这可能并不是理想的选择)
CompositeCacheManager(系统同时使用多个缓存管理器集成)
EhCacheCacheManager
除了核心的Spring框架,Spring Data又提供了两个缓存管理器:
RedisCacheManager
GemfireCacheManager
3、为方法添加注解以支持缓存
Spring 提供的四个注解来声明缓存规则:<!--连接工厂--> <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.hostName}"/> <property name="port" value="${redis.port}"/> <property name="password" value="${redis.password}"/> </bean> <!--redisTemplate--> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="redisConnectionFactory"/> </bean> <!--cacheManager--> <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg ref="redisTemplate"/> </bean>
基于applicationContext.xml
5、key 和 value 的序列化器
当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。Spring Data Redis提供了多个这样的序列化器,包括:GenericToStringSerializer:使用Spring转换服务进行序列化;
JacksonJsonRedisSerializer:使用Jackson 1,将对象序列化为JSON;
Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;
JdkSerializationRedisSerializer:使用Java序列化;
OxmSerializer:使用Spring O/X映射的编排器和解排器(marshaler和unmarshaler)实现序列化用于XML序列化;
StringRedisSerializer:序列化String类型的key和value。
RedisTemplate会使用JdkSerializationRedisSerializer,这意味着key和value都会通过Java进行序列化。StringRedisTemplate默认会使用StringRedisSerializer。
RedisTemplate 的 key 和 value 经过序列化存储可能会让你觉得奇怪,类似如下:
这是正常的,因为使用的是 java 的序列化,如果想要看起来比较舒服的,可以用 StringRedisSerializer 序列成字符串的样子。
6、API
Spring Data Redis 提供了一套API 友好的操作Redis,如下:
对 Redis 的操作就不就不细讲了,具体的可以看我学习这方面内容时做的相关的练习,也包括前面内容的一些补充。写的还算详细吧!https://github.com/JMCuixy/SpringRedisData
四、结语
冬天好冷啊!还没有暖气 ~~相关文章推荐
- JAVA 框架 Spring Cache For Redis.
- 【redis】5.spring boot项目中,直接在spring data jpa的Repository层使用redis +redis注解@Cacheable直接在Repository层使用,报错问题处理Null key returned for cache operation
- spring boot 整合 redis,使用@Cacheable,@CacheEvict,@CachePut,jedisPool操作redis数据库
- spring+redis(redis当cache使用)
- spring cache+redis技术调研报告
- spring Cache /Redis 缓存 + Spring 的集成示例
- JBoss Cache for Spring(Declarative Caching Services)
- 数据缓存---Spring Redis Cache 缓存
- Spring cache+ redis与redis 的比较
- Springboot中Spring-cache与redis整合
- Spring Redis Cache @Cacheable 大并发下返回null
- springboot cache redis 缓存
- spring boot redis cache 缓存学习
- SpringBoot -- 集成Redis/CacheManager
- 在 spring boot 中使用spring cache + redis
- spring4集成redis 并使用@cacheable注解
- spring redis mysql 修改 redis cachekey,增加cachekey的复杂度 。
- Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置
- Redis缓存实践:自定义注解、缓存工具类、基于Spring注解@cacheable
- Spring Cache+Redis实现自定义注解缓存