SpringBoot集成Redis
概述
Reids面向Java推出了Jedis,提供了与Redis命令对应封装的API,可以在Reids官网下载。
spring-data-redis
提供了在spring中通过简单的配置去访问Redis服务。
对Redis底层开发包进行了高度封装,其中的RedisTemplate
提供了Redis的各种操作。
spring-data-redis
针对Jedis提供了这些功能:
- 连接池自动管理,提供了高度封装了
RedisTemplate
类 - 将同一数据类型的操作封装为
operation
接口
operation接口:- ValueOperations:简单的K-V操作
- HashOperations:map类型操作
- ListOperations:list类型操作
- SetOperations:set类型操作
- ZSetOperations:zset 类型操作
- 针对数据的序列化,反序列化,提供了多种可选择的策略(RedisSerializer)
-
JdkSerializationRedisSerializer
POJO对象(实体类)存储取出使用JDK本身的序列化机制
-
StringRedisSerializer
K 或 V 为string的场景,根据指定的编码格式charset将字节序列转为字符串
是new String(bytes, charset)
和string.getBytes(charset)
的封装
是最轻量级和高效的策略 -
JacksonJsonRedisSerializer
jackson-json
可以将实体类与JSON格式互相转换,存储在Redis中
-
搭建
1. 添加Reids依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置Redis信息
spring:
redis: # redis配置
host: 122.112.196.221 # 服务器地址
port: 6379 # Redi端口6379
password: 123 # 在redis.conf里设置密码
database: 0 # 选择一个数据库:0~15,默认使用0
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
timeout: 10000ms # 连接超时时间(毫秒),取值范围为0~100000。默认值为0,表示无限制。
3. 注入RedisTemplate
@Autowired
RedisTemplate redisTemplate;
4. 测试
新增,查询,删除
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
//System.out.println(user);
ValueOperations operations = redisTemplate.opsForValue();
operations.set("name", "jim");//序列化为json格式 list对象
Admin admin = new Admin();
admin.setId(1);
admin.setAccount("admin");
admin.setPassword("123");
operations.set("admin"+admin.getId(),admin,100, TimeUnit.MICROSECONDS);
System.out.println("has: "+redisTemplate.hasKey("admin1"));
System.out.println("admin1: "+operations.get("admin1"));
System.out.println("name: "+operations.get("name"));
System.out.println(redisTemplate.delete("admin1"));
System.out.println(redisTemplate.delete("name"));
}
序列化
序列化配置类
@Configuration
public class RedisConfig {//不让redis进行转码(会乱码)
/**
* 序列化 键:值
* @param connectionFactory 是LettuceConnectionFactory的实例
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
//实体对象与json格式相互转换的序列化器
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
//key-value为string的序列化器
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}