SpringBoot 整合 Redis
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis依赖 commons-pool 这个依赖一定要添加 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2、配置文件yml
spring:
redis:
host: localhost
password:
database: 0
port: 6379
timeout: 10000
lettuce:
pool:
max-active: 8
max-idle: 8
max-wait: 1000
min-idle: 0
3、配置类
配置一个 RedisTemplate<String, Object>
,并指定 key
和 value
的序列化器。
/**
* redis 配置类,主要配置序列化
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 连接工厂必须指定
redisTemplate.setConnectionFactory(factory);
// 字符串序列化器
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// json 序列化器,使用 jackson
// 还有一种是 Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// key 和 hashkey 设置字符串序列化
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
// 值设置 json 序列化
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
// 测试
@Test
public void test2() {
redisTemplate.opsForValue().set("goods:2", "3c数码产品。。。");
}
如果不配置序列化器,直接使用默认的,key 和 value 在客户端上显示会是乱码,客户端命令行也会操作错误
如下:
/**
* redis配置类,主要配置序列化
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}
// 测试
@Test
public void test() {
redisTemplate.opsForValue().set("user:1", "你好dfsdfsdf");
}
连接工具查看乱码
命令行读取失败
只能从代码里读取
当然这也并不算什么问题,因为操作数据都是使用 Java API 操作的