整合前提:安装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@
*/
@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的启动测试类来亲手尝试一下:

springboot 整合redis_后台开发工具

  写好后,点击图片上的绿三角,就能快速启动测试类啦。执行结果如下:

springboot 整合redis_spring_02

  注意:点击contextLoads()才能看到测试类执行结果。

  可以来查看一下,redis数据库:

springboot 整合redis_redis_03

  需要打开redis-cli.exe。

7.关于redis的数据存储类型问题

  在实际开发过程中,我们之所以使用redis缓存库,就是为了减少数据库访问次数,减轻数据库压力,为此,通常我们会选择把需要频繁查询的数据存入缓存当中。

  那么,我们现在来测试一下实体类能不能放到缓存当中:

springboot 整合redis_redis_04

  执行结果如下:

springboot 整合redis_后台开发工具_05

  无法将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@
*/
@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);
}
}

  

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!! 

 

作者:​​Marydon​​