依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置
# 数据
spring:
# redis配置
redis:
# Redis数据库索引(默认为0)
database: 1
# Redis服务器地址
host: 120.48.50.81
# Redis服务器连接端口
port: 6378
# Redis服务器连接密码(默认为空)
password: xxx
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池最大连接数
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# 连接池中的最大空闲连接
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0
使用
@Resource
private RedisTemplate<String, String> redisTemplate;
// 获取
String redisData = redisTemplate.opsForValue().get(token);
// 放入
redisTemplate.opsForValue().set("system:adminUser:" + token, redisData);
redisTemplate.opsForValue().set(RedisKeyEnum.KEY_WEIXIN_ACCESS_TOKEN.value(), accessToken, 7000, TimeUnit.SECONDS);
命名
- 【推荐】Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名
- 【强制】以英文字母开头,命名中只能出现小写字母、数字、英文点号 (.) 和
:
- 【强制】不要包含特殊字符,如下划线、空格、换行、单双引号以及其他转义字符
- 【强制】使用
:
分割为文件夹存储
key管理
最好使用枚举对所有使用到的key进行统一个管理:
/**
* redis的key枚举
*/
public enum RedisKeyEnum {
/**
* 后台管理员登录后信息
*/
KEY_ADMIN_USER("system:admin:user:");
private final String value;
RedisKeyEnum(String value) {
this.value = value;
}
public String value() {
return value;
}
}
加过期时间
// 秒
redisTemplate.opsForValue().set("", "", 60, TimeUnit.SECONDS);
// 天
redisTemplate.opsForValue().set(RedisKeyEnum.KEY_ADMIN_USER.value() + token, json, 30, TimeUnit.DAYS);
存储乱码问题
增加配置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
@Configuration
public class RedisConfig {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Bean
public RedisTemplate<String, Object> redisTemplateInit() {
//设置序列化Key的实例化对象
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置序列化Value的实例化对象
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}