【Java】Springboot整合redis
Jedis、Lettuce和Redis Template是java中三种常用的redis客户端工具。
Jedis是同步阻塞的Redis Java客户端,简单直接但线程不安全,需要连接池管理;Lettuce是基于 Netty 的异步非阻塞客户端,支持响应式编程且线程安全,性能更高;Redis Template是Spring提供的抽象层,默认基于Lettuce实现,提供了面向对象的 API 和自动序列化支持,与Spring 生态集成最佳。
redis配置文件
首先看一下redis配置文件,允许了远程访问,设置了密码为123456
daemonize yes
protected-mode no
#bind 127.0.0.1 -::1
requirepass 123456
添加redis依赖
在pom.xml
文件中添加Redis相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置连接信息
在application.properties
或application.yml
配置文件中添加 Redis 连接信息
spring.data.redis.host=192.168.25.131
spring.data.redis.port=6379
spring.data.redis.password=123456
根据自己Redis服务器配置,修改主机和端口信息
在配置类中创建RedisTemplate Bean
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
// 设置key字符串序列化方式string
template.setKeySerializer(new StringRedisSerializer());
// 设置value的序列化方式为json
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
使用配置类可以自定义序列化方式,如果不想使用配置类,也可以用内置的StringRedisTemplate
。
注意:如果正确配置了序列化方式,就不会出现中文乱码。此时如果从服务器的redis-cli获取key可能还会看见乱码,需要加上--raw
参数重新启动redis客户端:redis-cli -a 123456 --raw
注入RedisTemplate
@Resource
private RedisTemplate<String, Object> template;
如果选择内置的StringRedisTemplate
,就可以省略上一步,在这里直接注入StringRedisTemplate
即可
@Resource
private StringRedisTemplate template;
执行redis操作
template.opsForValue().set("k1", "v1");
String k1 = (String) template.opsForValue().get("k1");
RedisTemplate
是Spring Data Redis 提供的核心操作类,它封装了Redis的各种数据结构和操作命令,提供了类型安全的API。
字符串(String)操作:opsForValue()
set(key, value)
:设置键值对get(key)
:获取值increment(key, delta)
:数值递增setIfAbsent(key, value)
:不存在时才设置(原子操作)
哈希(Hash)操作:opsForHash()
put(key, hashKey, value)
:设置哈希字段get(key, hashKey)
:获取哈希字段值entries(key)
:获取整个哈希表
列表(List)操作:opsForList()
leftPush(key, value)
:左侧插入rightPop(key)
:右侧弹出range(key, start, end)
:获取范围元素
集合(Set)操作:opsForSet()
add(key, values)
:添加元素members(key)
:获取所有成员isMember(key, value)
:判断是否成员
有序集合(ZSet)操作:opsForZSet()
add(key, value, score)
:添加带分数的元素range(key, start, end)
:按分数范围获取rank(key, value)
:获取元素排名
通用操作:
// 键操作
delete(key) // 删除键
hasKey(key) // 判断键是否存在
expire(key, timeout, timeUnit) // 设置过期时间
// 事务操作
multi() // 开始事务
exec() // 执行事务
discard() // 取消事务
// 发布/订阅
convertAndSend(channel, message) // 发布消息