redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

合集下载

spring+redis实现数据的缓存

spring+redis实现数据的缓存

314<property name="locations">5<list>67<value>classpath*:/META-INF/config/redis.properties</value>8</list>9</property>10</bean>1112<import resource="spring-redis.xml"/>4)、web.xml设置spring的总配置⽂件在项⽬启动时加载1<context-param>2<param-name>contextConfigLocation</param-name>3<param-value>classpath*:/META-INF/applicationContext.xml</param-value><!----> 4</context-param>5)、redis缓存⼯具类ValueOperations ——基本数据类型和实体类的缓存ListOperations ——list的缓存SetOperations ——set的缓存HashOperations Map的缓存1import java.io.Serializable;2import java.util.ArrayList;3import java.util.HashMap;4import java.util.HashSet;5import java.util.Iterator;6import java.util.List;7import java.util.Map;8import java.util.Set;910import org.springframework.beans.factory.annotation.Autowired;11import org.springframework.beans.factory.annotation.Qualifier;12import org.springframework.context.support.ClassPathXmlApplicationContext;13import org.springframework.data.redis.core.BoundSetOperations;14import org.springframework.data.redis.core.HashOperations;15import org.springframework.data.redis.core.ListOperations;16import org.springframework.data.redis.core.RedisTemplate;17import org.springframework.data.redis.core.SetOperations;18import org.springframework.data.redis.core.ValueOperations;19import org.springframework.stereotype.Service;2021@Service22public class RedisCacheUtil<T>23{2425 @Autowired @Qualifier("jedisTemplate")26public RedisTemplate redisTemplate;2728/**29 * 缓存基本的对象,Integer、String、实体类等30 * @param key 缓存的键值31 * @param value 缓存的值32 * @return缓存的对象33*/34public <T> ValueOperations<String,T> setCacheObject(String key,T value)35 {3637 ValueOperations<String,T> operation = redisTemplate.opsForValue();38 operation.set(key,value);39return operation;40 }4142/**43 * 获得缓存的基本对象。

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结1. 概述本文介绍spring boot 如何使用Redis做缓存,如何对redis 缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。

使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。

2. spring boot集成redis2.1. application.properties配置application.properties,包含如下信息:指定缓存的类型配置redis的服务器信息请不要配置spring.cache.cache-names值,原因后面再说## 缓存# spring.cache.cache-names=book1,book2spring.cache.type=REDIS# REDIS (RedisProperties)spring.redis.database=0spring.redis.host=192.168.188.7spring.redis.password=spring.redis.port=6379spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.pool.max-active=100spring.redis.pool.max-wait=-1123456789101112131234567891 01112132.2. 配置启动类@EnableCaching: 启动缓存重新配置RedisCacheManager,使用新的配置的值@SpringBootApplication@EnableCaching // 启动缓存public class CacheApplication {private static final Logger log =LoggerFactory.getLogger(CacheApplication.class);public static void main(String[] args) {("Start CacheApplication.. ");SpringApplication.run(CacheApplication.class, args);}/*** 重新配置RedisCacheManager* @param rd*/@Autowiredpublic void configRedisCacheManger(RedisCacheManager rd){rd.setDefaultExpiration(100L);}}123456789101112131415161718192012345678910111213141 51617181920经过以上配置后,redis缓存管理对象已经生成。

程序员看了不后悔一步一步轻松实现SpringBoot整合Redis缓存

程序员看了不后悔一步一步轻松实现SpringBoot整合Redis缓存

程序员看了不后悔一步一步轻松实现SpringBoot整合Redis缓存前言随着技术的发展,程序框架也越来越多,非常考验程序的学习能力,但是框架的产生在程序员开发过程中也提供很多便利,框架可以为程序员减少许多工作量,比如spring boot 、mybatis等都可以提高开发人员的工作效率,今天就来聊聊spring boot与redis 的整合。

一、基本概况为什么使用缓存缓存是在内存中存储的数据备份,当数据没有发生本质变化时就可以直接从内存中查询数据,而不用去数据库查询(在磁盘中)CPU读取内存的速度要比读取磁盘快,可以提高效率Redis缓存Remote Dictionnary Server(远程数据服务),是一款内存高速缓存数据库。

五种常用数据类型: String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)可持久化:一边运行,一边向硬盘备份一份,防止断电等偶然情况,导致内存中数据丢失二、搭建Redis环境1.下载Redis平台限制不能贴链接,自行去官网下载哈!2.设置Redis开机自启在解压好的文件夹下输入cmd命令window下安装Redis服务redis-server --service-install redis.windows.conf检查安装是否成功搜索服务点击设置为开机自启三、新建SpringBoot项目新建好项目的童鞋可以自动跳过添加web依赖选择数据库依赖选择项目位置,点击finish四、使用StringRedisTemplate操作Redis1.pom.xml文件引入坐标<!--redis依赖包--> <dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2.在appliaction.properties配置redis数据库连接信息#redis配置#Redis服务器地址spring.redis.host=127.0.0.1#Redis服务器连接端口spring.redis.port=6379#Redis数据库索引(默认为0)spring.redis.database=03.在SpringbootdemoApplicationTests中测试操作Redis@SpringBootTestclass SpringbootdemoApplicationTests {@Autowired StringRedisTemplate stringRedisTemplate; //操作key-value都是字符串,最常用@Test public void test01(){ //字符串操作stringRedisTemplate.opsForValue().append("msg","coder"); //列表操作stringRedisTemplate.opsForList().leftPush("mylist","1"); stringRedisTemplate.opsForList().leftPush("mylist","2"); }}对于Redis的五大常用数据类型都提供了方法String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)stringRedisTemplate.opsForValue();[String(字符串)]stringRedisTemplate.opsForList();[List(列表)]stringRedisTemplate.opsForSet();[Set(集合)]stringRedisTemplate.opsForHash();[Hash(散列)]stringRedisTemplate.opsForZSet();[ZSet(有序集合)]使用RedisDesktopManager可视化工具查看结果StringTemplate类中方法存取的key-value值是String类型,RedisTemplate中key-value值是Object类型,RedisTemplate是StringTemplate父类下面就用RedisTemplate实现从MySQL数据库取出数据放到Redis缓存五、使用RedisTemplate操作Redis1.项目目录结构2.建立与数据库相关的类建表的sql脚本application.properties配置文件MySQL及Redis连接的相关配置User类采用ORM思想,属性和数据库字段对应package com.thinkcoder.bean;import java.io.Serializable;importjava.util.Date;/*** @ClassName User * @Author Think-Coder * @Data 2020/5/27 10:35* @Version 1.0 */public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex;private String address; //getter和setter方法 public Integer getId() {returnid;} public void setId(Integer id) {this.id = id;} public StringgetUsername() {return username;} public void setUsername(String username){ername = username;} public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;} publicString getSex() {return sex;} public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;} public void setAddress(Stringaddress) {this.address = address;} //重写toString方法 @Override publicString toString() { return "User{" + "id=" + id +", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; }}UserMapper类使用注解方法操作数据库@Mapperpublic interface UserMapper {@Select("SELECT * FROM user WHERE id =#{id}") User findById(int id);}3.MyRedisConfig自定义序列化类,将存储在Redis的对象序列化为json格式,不会产生乱码@Configuration@EnableAutoConfigurationpublic class MyRedisConfig {@Beanpublic RedisTemplate<Object, User> redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate<Object, User> template = newRedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializer<User> ser = newJackson2JsonRedisSerializer<>(User.class);template.setDefaultSerializer(ser); return template; }}4.工具类RedisUtil类//工具类中使用Autowired注解需要加上Compoent@Componentpublic class RedisUtil{@Autowired RedisTemplate redisTemplate; //key-value是对象的 //判断是否存在key public boolean hasKey(String key){ returnredisTemplate.hasKey(key); } //从redis中获取值 public Object get(String key){ return redisTemplate.opsForValue().get(key); } //向redis插入值 public boolean set(final String key,Object value){ boolean result = false; try{ redisTemplate.opsForValue().set(key,value); result = true; }catch (Exceptione){ e.printStackTrace(); } return result; }}5.sevice包代码IUserService@Servicepublic interface IUserService {//根据id查用户信息 UserfindById(int id);}UserService实现类@Servicepublic class UserServiceImpl implements IUserService {User user;@Autowired UserMapper userMapper; @Autowired private RedisUtil redisUtil; @Override public User findById(int id) { String key = "user"+id;if(redisUtil.hasKey(key)) { user = (User)redisUtil.get(key); System.out.println("查询的是缓存"); }else{ user =userMapper.findById(id); System.out.println("查询的是数据库"); System.out.println(redisUtil.set(key,user) ? "插入成功" : "插入失败"); } return user; }}erController类@RestControllerpublic class UserController {@Autowired IUserService userService; @GetMapping("/user/{id}") public UserfindById(@PathVariable("id") Integer id){ User user =userService.findById(id); return user; }}7.测试打开浏览器输入下方url查看控制台输出Redis Desktop Manager显示结果六、总结整体来说,操作Redis是两个类,RedisTemplate类和StringTemplate类,为父子关系,提供的方法正好对应操作Redis数据类型的指令,所以要把数据类型及常用的指令练熟。

SpringBoot(三):SpringBoot中Redis的使用

SpringBoot(三):SpringBoot中Redis的使用
}; } } 注意我们使用了注解:@EnableCaching来开启缓存。
@Bean public KeyGenerator keyGenerator() {
return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); }
1、引入依赖包 <dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>mons</groupId> <artifactId>commons-pool2</artifactId> </dependency> Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis,spring-boot-starter-data-redis依赖于spring-data-redis 和 lettuce 。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,几乎感受不大差 异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。 Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 netty NIO 框架来高效地管理多 个连接。

SpringBoot整合使用Redis缓存详解、注解@Cacheable、@CacheEv。。。

SpringBoot整合使用Redis缓存详解、注解@Cacheable、@CacheEv。。。

SpringBoot整合使⽤Redis缓存详解、注解@Cacheable、@CacheEv。

Redis简介: REmote DIctionary Server(Redis) 是⼀个由Salvatore Sanfilippo写的key-value存储系统。

Redis是⼀个开源的使⽤ANSI C语⾔编写、遵守BSD协议、⽀持⽹络、可基于内存亦可持久化的⽇志型、Key-Value数据库,并提供多种语⾔的API。

它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型。

Reids的优点: 异常快:Redis⾮常快,每秒可执⾏⼤约110000次的设置(SET)操作,每秒⼤约可执⾏81000次的读取/获取(GET)操作。

⽀持丰富的数据类型:Redis⽀持开发⼈员常⽤的⼤多数数据类型,例如列表,集合,排序集和散列等等。

这使得Redis很容易被⽤来解决各种问题,因为我们知道哪些问题可以更好使⽤地哪些数据类型来处理解决。

操作具有原⼦性:所有Redis操作都是原⼦操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。

多实⽤⼯具:Redis是⼀个多实⽤⼯具,可⽤于多种⽤例,如:缓存,消息队列(Redis本地⽀持发布/订阅),应⽤程序中的任何短期数据,例如,web应⽤程序中的会话,⽹页命中计数等。

Redis 与其他 key - value 缓存产品有以下三个特点: Redis⽀持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进⾏使⽤。

Redis不仅仅⽀持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis⽀持数据的备份,即master-slave模式的数据备份。

1. Redis安装、RedisDesktopManager的使⽤ Redis安装和RedisDesktopManager的使⽤在前⾯已经介绍过了:2. Spring Boot中整合使⽤Redis 2.1 添加Redis依赖包<!--集成Redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redis依赖commons-pool 这个依赖使⽤连接池是必须的 --><dependency><groupId>mons</groupId><artifactId>commons-pool2</artifactId></dependency> 2.2 Redis数据库连接信息配置spring:#Redis配置redis:host: 192.168.135.40#Redis服务器连接密码(默认为空)password:#Redis数据库索引(默认为0)database: 5port: 6379#连接超时时间(毫秒)timeout: 300#这⾥使⽤的是lettuce,如果使⽤Jedis,把下⾯的lettuce改成Jedis即可lettuce:pool:#连接池中的最⼤空闲连接max-idle: 8#连接池中的最⼩空闲连接min-idle: 0#连接池最⼤连接数(使⽤负值表⽰没有限制)max-active: 8#连接池最⼤阻塞等待时间(使⽤负值表⽰没有限制)max-wait: -1 2.3 新建RedisConfig类配置Redis @Configuration:⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个或多个被@Bean注解的⽅法,这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义,初始化Spring容器。

springboot使用shiro-整合redis作为缓存的操作

springboot使用shiro-整合redis作为缓存的操作

springboot使⽤shiro-整合redis作为缓存的操作说在前⾯本来的整合过程是顺着博客的顺序来的,越往下,集成的越多,由于之前是使⽤ehcache缓存,现在改为redis,限制登录⼈数以及限制登录次数等都需要改动,本篇为了简单,⽬前先将这两个功能下线,配置暂时是注销的,原类保存,在下篇博客中改。

还有之前是使⽤SessionListener监听session创建来统计在线⼈数,在本篇中也将改为统计redis中的key数⽬。

如果是单机,使⽤ehcache是最快的,项⽬⼀般都不是单节点,为了⽅便之后使⽤sso单点登录,以及多节点部署,所以使⽤shiro整合redis。

整合过程shiro⽤redis实现缓存需要重写cache、cacheManager、SessionDAO和初始化redis配置。

pom添加依赖<!-- 整合shiro框架 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency><!-- shiro-thymeleaf 2.0.0--><dependency><groupId>com.github.theborakompanioni</groupId><artifactId>thymeleaf-extras-shiro</artifactId><version>1.2.1</version></dependency><!-- shiro-redis --><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>3.1.0</version></dependency>ShiroConfig.javapackage com.springboot.test.shiro.config;import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;import com.springboot.test.shiro.config.shiro.*;import org.apache.shiro.codec.Base64;import org.apache.shiro.session.SessionListener;import org.apache.shiro.session.mgt.SessionManager;import org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator;import org.apache.shiro.session.mgt.eis.SessionDAO;import org.apache.shiro.session.mgt.eis.SessionIdGenerator;import org.apache.shiro.spring.LifecycleBeanPostProcessor;import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;import org.apache.shiro.web.mgt.CookieRememberMeManager;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.apache.shiro.web.servlet.SimpleCookie;import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;import org.crazycake.shiro.RedisCacheManager;import org.crazycake.shiro.RedisManager;import org.crazycake.shiro.RedisSessionDAO;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.config.MethodInvokingFactoryBean;import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;import org.springframework.boot.web.servlet.ErrorPage;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.HttpStatus;import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;import javax.servlet.Filter;import java.util.ArrayList;import java.util.Collection;import java.util.LinkedHashMap;import java.util.Properties;/*** @author: wangsaichao* @date: 2018/5/10* @description: Shiro配置*/@Configurationpublic class ShiroConfig {/*** ShiroFilterFactoryBean 处理拦截资源⽂件问题。

springboot用redis缓存整合springcache注解,使用Json序列化和反序列化。

springboot用redis缓存整合springcache注解,使用Json序列化和反序列化。

springboot⽤redis缓存整合springcache注解,使⽤Json序列化和反序列化。

springboot下⽤cache注解整合redis并使⽤json序列化反序列化。

cache注解整合redis最近发现spring的注解⽤起来真的是很⽅便。

随即产⽣了能不能吧spring注解使⽤redis实现的⽅式。

只需要在配置⽂件中(application.propertoes)添加如下⼀个配置spring.cache.type=redis并配置好redis的相关信息spring.redis.database=0spring.redis.host=spring.redis.port=spring.redis.password=spring.redis.timeout=5000msspring.redis.lettuce.pool.max-active=8spring.redis.lettuce.pool.max-wait=-1msspring.redis.lettuce.pool.max-idle=8spring.redis.lettuce.pool.min-idle=0springcache注解整合redis⾮常容易就整合完成了。

redis缓存序列化与反序列化由于缓存数据使⽤的是jdk⾃带的序列化需要序列化的实体类继承Serializable接⼝。

⽽且序列化后的内容在redis中看起来也不是很⽅便。

于是萌⽣了需要将数据序列化成json的想法。

经过⼀番研究后决定写⼀个redis 配置⽂件。

RedisConfig具体内容如下@Configurationpublic class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisCacheConfiguration redisCacheConfiguration(){Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofDays(30));return configuration;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory connectionFactory) {//初始化⼀个RedisCacheWriterRedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);//设置CacheManager的值序列化⽅式为 fastJsonRedisSerializer,但其实RedisCacheConfiguration默认使⽤StringRedisSerializer序列化key,Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);}}配置完成后,数据访问序列化都⾮常正常,redis中也可以看到有序的json数据。

spring配置redis注解缓存

spring配置redis注解缓存

spring配置redis注解缓存 前⼏天在spring整合Redis的时候使⽤了⼿动的⽅式,也就是可以⼿动的向redis添加缓存与清除缓存,参考: 今天想的将spring注解整合Redis缓存弄明⽩,于是通过查阅资料,先做记录如下:⼤致步骤如下: 0.spring的主配置中声明注解缓存:<cache:annotation-driven cache-manager="redisCacheManager"/> 1.maven的pom.xml⽂件导⼊架包 2.配置⽂件添加配置 3.spring管理bean的⽣成,xml⽂件配置 4. RedisCacheConfig redis⾃定义的⼯具类,⾃定义redis的key⽣成规则 5.在你想要做缓存的地⽅,使⽤注解进⾏缓存0.spring的主配置中声明注解缓存:<cache:annotation-driven cache-manager="redisCacheManager"/> 注意:此步骤必须做,必须声明采⽤的缓存管理器是⾃⼰配置的redisCacheManager,否则会报错。

<cache:annotation-driven cache-manager="redisCacheManager"/>1.maven的pom.xml⽂件导⼊架包注意: 引⼊jackson是为了⼿动添加缓存<!-- jedis依赖 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.4.RELEASE</version></dependency><!-- jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.1.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.1.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.1.0</version></dependency>2.配置⽂件添加配置redis.properties#访问地址redis.host=127.0.0.1#访问端⼝redis.port=6379#注意,如果没有password,此处不设置值,但这⼀项要保留redis.password=#最⼤空闲数,数据库连接的最⼤空闲时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结1. 概述本文介绍spring boot 如何使用Redis做缓存,如何对redis 缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。

使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。

2. spring boot集成redis2.1. application.properties配置application.properties,包含如下信息:指定缓存的类型配置redis的服务器信息请不要配置spring.cache.cache-names值,原因后面再说## 缓存# spring.cache.cache-names=book1,book2spring.cache.type=REDIS# REDIS (RedisProperties)spring.redis.database=0spring.redis.host=192.168.188.7spring.redis.password=spring.redis.port=6379spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.pool.max-active=100spring.redis.pool.max-wait=-1123456789101112131234567891 01112132.2. 配置启动类@EnableCaching: 启动缓存重新配置RedisCacheManager,使用新的配置的值@SpringBootApplication@EnableCaching // 启动缓存public class CacheApplication {private static final Logger log =LoggerFactory.getLogger(CacheApplication.class);public static void main(String[] args) {("Start CacheApplication.. ");SpringApplication.run(CacheApplication.class, args);}/*** 重新配置RedisCacheManager* @param rd*/@Autowiredpublic void configRedisCacheManger(RedisCacheManager rd){rd.setDefaultExpiration(100L);}}123456789101112131415161718192012345678910111213141 51617181920经过以上配置后,redis缓存管理对象已经生成。

下面简单介绍spring boot如何初始化redis缓存。

2.3. spring boot 如何初始化redis做缓存缓存管理接口org.springframework.cache.CacheManager,spring boot就是通过此类实现缓存的管理。

redis对应此接口的实现类是org.springframework.data.redis.cache.RedisCacheManager。

下面介绍此类如何生成。

首先我们配置application.properties的spring.redis.* 属性后@EnableCaching后,spring会执行RedisAutoConfiguration,初始化RedisTemplate和StringRedisTemplate@Configuration@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class })@EnableConfigurationProperties(RedisProperties.class)public class RedisAutoConfiguration {/*** Standard Redis configuration.*/@Configurationprotected static class RedisConfiguration {….@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate template = new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBean(StringRedisTemplate.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}}} 1234567891011121314151617181920212223242526272829303 1323334123456789101112131415161718192021222324252627 28293031323334然后RedisCacheConfiguration会将RedisAutoConfiguration生成的RedisTemplate注入方法生成RedisCacheManager 后。

@Configuration@AutoConfigureAfter(RedisAutoConfiguration.class)@ConditionalOnBean(RedisTemplate.class)@ConditionalOnMissingBean(CacheManager.class)@Conditional(CacheCondition.class)class RedisCacheConfiguration {private final CacheProperties cacheProperties;private final CacheManagerCustomizers customizerInvoker;RedisCacheConfiguration(CacheProperties cacheProperties,CacheManagerCustomizers customizerInvoker) {this.cacheProperties = cacheProperties;this.customizerInvoker = customizerInvoker;}@Beanpublic RedisCacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);cacheManager.setUsePrefix(true);List cacheNames =this.cacheProperties.getCacheNames();if (!cacheNames.isEmpty()) {cacheManager.setCacheNames(cacheNames);}returnthis.customizerInvoker.customize(cacheManager);}} 1234567891011121314151617181920212223242526272829301 23456789101112131415161718192021222324252627282930 根据以上的分析,我们知道在spring已经帮我们生成一个RedisCacheManager并进行了配置。

最后我们再可以对这个RedisCacheManager进行二次配置,这里只列出配置key的有效期/*** 重新配置RedisCacheManager* @param rd*/@Autowiredpublic void configRedisCacheManger(RedisCacheManager rd){rd.setDefaultExpiration(100L);}123456789123456789注意:请不要在applicaion.properties中配置:spring.cache.cache-names=book1,book2,否则会导致我们新的配置无法作用到这些配置的cache上。

这是因为RedisCacheConfiguration 初始化RedisCacheManager后,会立即调用RedisCacheConfiguration 的初始化cache,而此时configRedisCacheManger还没有执行此方法,使得我们的配置无法启作用。

反之,如果不配置,则后创建cache,会使用我们的配置。

3. spring缓存注解的用法上节已经介绍如何配置缓存,这节介绍如何使用缓存。

3.1 辅助类下方会使用到的辅助类Book:public class Book implements Serializable {private static final long serialVersionUID = 2629983876059197650L;private String id;private String name; // 书名private Integer price; // 价格private Date update; //public Book(String id, String name, Integer price, Date update) {super();this.id = id; = name;this.price = price;this.update = update;}// set/get略}1234567891011121314151617181234567891011121314151617 18BookQry : 封装请求类public class BookQry {private String id;private String name; // 书名// set/get略}12345671234567AbstractService抽象类:初始化repositoryBook 值,模拟数据库数据。

相关文档
最新文档