Redis 在 Java 中的使用
文章目录
- 一、为什么要使用 Redis?
- 二、项目中引入 Redis 依赖
- 三、配置 application.yml
- 四、使用 StringRedisTemplate 操作 Redis
- 五、RedisTemplate 的序列化问题
一、为什么要使用 Redis?
Redis 是一个高性能的 Key-Value 内存数据库,常用于: 数据缓存、分布式锁和排行榜等。
它速度快(内存存储)、支持多种数据结构(String、Hash、List、Set、ZSet),适合高并发场景,是微服务架构下常用的缓存中间件。
二、项目中引入 Redis 依赖
在 pom.xml 中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Boot 默认使用的 Redis 客户端是 Lettuce,性能好、支持异步和响应式编程。
三、配置 application.yml
spring:
redis:
host: localhost
port: 6379
password: 123456 # Redis中设置的密码,没有就省略
database: 0 # 默认使用0号数据库
四、使用 StringRedisTemplate 操作 Redis
Spring 提供了两种模板:
-
RedisTemplate<K, V>:支持各种类型的对象,需要配置序列化器。
-
StringRedisTemplate:专门用于操作字符串,由默认的序列化器。
实例代码如下:
@Service
public class RedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
// 设置字符串键值
public void setValue(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
// 获取字符串键值
public String getValue(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
// 设置过期时间
public void setValueWithExpire(String key, String value, long seconds) {
stringRedisTemplate.opsForValue().set(key, value, Duration.ofSeconds(seconds));
}
// 删除 key
public void delete(String key) {
stringRedisTemplate.delete(key);
}
}
五、RedisTemplate 的序列化问题
默认的 RedisTemplate 会使用 JDK 序列化,存入的数据是二进制格式,不直观并且内存占用大,可使用 JSON 序列化:
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// JSON 序列化
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
template.setDefaultSerializer(serializer);
// 设置键的序列化器
template.setKeySerializer(new StringRedisSerializer());
// 设置值的序列化器
template.setValueSerializer(serializer);
return template;
}