整合前提:安装redis(教程见文末推荐)
1.jar包引入
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency>
2.连接池配置
spring: ###redis配置 redis: # Redis数据库索引(默认为0) database: 0 # Redis服务器地址 host: localhost # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) password: jedis: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 10 # 连接池最大阻塞等待时间(单位毫秒,使用负值表示没有限制) max-wait: -1ms # 连接池中的最大空闲连接 max-idle: 10 # 连接池中的最小空闲连接 min-idle: 0 # 连接超时时间(毫秒) timeout: 2000ms
3.注解配置Java类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * redis的通用化配置 * @description: * @author: Marydon * @date: 2020-12-10 10:26 * @version: 1.0 * @email: marydon20170307@163.com */ @Configuration public class RedisConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate<String,Object> redisTemplate(){ RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 指定Key、Value的序列化策略 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); return redisTemplate; } @Bean public StringRedisTemplate stringRedisTemplate(){ StringRedisTemplate stringRedisTemplate=new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); return stringRedisTemplate; } }
4.如何使用?
在需要使用redis缓存的java类,注入对象:
@Autowired private StringRedisTemplate stringRedisTemplate;
或者用注解:@Resource
往缓存存数据:
ValueOperations valueOperations = stringRedisTemplate.opsForValue(); valueOperations.setIfAbsent(key, value);
从缓存取数据:
ValueOperations valueOperations = stringRedisTemplate.opsForValue(); valueOperations.get(key);
从缓存中删除数据:
方式一:正规删除
stringRedisTemplate.delete(key);
方式二:立即过期
stringRedisTemplate.expire(key, Duration.ZERO);
虽然过期了,但是并不会立刻被删除,Redis对于过期键有三种清除策略,安装教程里我有介绍。
5.启动redis服务
双击运行:redis.bat文件,即可。
说明:
你肯定是没有这个文件的,想看实现方法的见文末推荐:redis安装教程;
不想看的,按照自己之前的方式启动redis就行。
6.测试
我们按照上面的方法,在springboot的启动测试类来亲手尝试一下:
写好后,点击图片上的绿三角,就能快速启动测试类啦。执行结果如下:
注意:点击contextLoads()才能看到测试类执行结果。
可以来查看一下,redis数据库:
需要打开redis-cli.exe。
7.关于redis的数据存储类型问题
在实际开发过程中,我们之所以使用redis缓存库,就是为了减少数据库访问次数,减轻数据库压力,为此,通常我们会选择把需要频繁查询的数据存入缓存当中。
那么,我们现在来测试一下实体类能不能放到缓存当中:
执行结果如下:
无法将java对象存入redis当中。
随后,百度结果如下:
Redis 只能支持六种数据类型(string/hash/list/set/zset/hyperloglog)的操作,但在 Java 中我们却通常以类对象为主,怎么办?
见文末推荐
8.springboot启动项目清空redis缓存
我们知道:使用spring内部集成的缓存,在项目停止运行后,缓存也会随之消失;
但是,redis不会,除非你设置了有效期或者调用删除方法,不然,即使你重启项目或者重启redis,缓存仍在;
这种方式好也不好,就看具体使用场景啦,下面看一下具体实现办法:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.util.Set; /** * springboot启动后自动执行方法 * @description: * @author: Marydon * @date: 2020-12-10 11:19 * @version: 1.0 * @email: marydon20170307@163.com */ @Component // 当有多个类实现ApplicationRunner接口时,可以指定其执行顺序,值越小优先级越高 @Order(value = 1) public class AliApplicationRunner implements ApplicationRunner {// 或者实现CommandLineRunner接口 @Autowired private StringRedisTemplate stringRedisTemplate; /* * 启动结束后会立即执行的方法 * @attention: * @date: 2020年12月10日 0010 11:21 * @param: args * @return: void */ @Override public void run(ApplicationArguments args) { // 获取缓存中所有的key Set<String> keys = stringRedisTemplate.keys("*"); // 清空redis缓存数据库 stringRedisTemplate.delete(keys); } }