网站关键词搜不到,科协网站建设的建议,怎样申请小程序,你好多莉 wordpress在 Spring Boot 3 中#xff0c;操作 Redis 通常使用 Spring Data Redis 提供的工具类#xff0c;如 RedisTemplate 和 StringRedisTemplate。以下是一个详细的 Redis 操作工具类的实现#xff0c;涵盖了常用功能。
完整的 Redis 工具类
以下工具类可以实现基本的 Redis 操…在 Spring Boot 3 中操作 Redis 通常使用 Spring Data Redis 提供的工具类如 RedisTemplate 和 StringRedisTemplate。以下是一个详细的 Redis 操作工具类的实现涵盖了常用功能。
完整的 Redis 工具类
以下工具类可以实现基本的 Redis 操作例如字符串、哈希、列表、集合和有序集合等。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;import java.util.*;
import java.util.concurrent.TimeUnit;Component
public class RedisUtils {Autowiredprivate RedisTemplateString, Object redisTemplate;/*** 设置值*/public void set(String key, Object value, long timeout, TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 获取值*/public Object get(String key) {return redisTemplate.opsForValue().get(key);}/*** 删除键*/public void delete(String key) {redisTemplate.delete(key);}/*** 批量删除*/public void deleteKeys(String pattern) {SetString keys redisTemplate.keys(pattern);if (keys ! null !keys.isEmpty()) {redisTemplate.delete(keys);}}/*** 设置键的过期时间*/public boolean expire(String key, long timeout, TimeUnit unit) {return Boolean.TRUE.equals(redisTemplate.expire(key, timeout, unit));}/*** 获取剩余过期时间*/public long getExpire(String key) {return Optional.ofNullable(redisTemplate.getExpire(key)).orElse(0L);}/*** 检查键是否存在*/public boolean hasKey(String key) {return Boolean.TRUE.equals(redisTemplate.hasKey(key));}/*** 增加值*/public long increment(String key, long delta) {return Optional.ofNullable(redisTemplate.opsForValue().increment(key, delta)).orElse(0L);}/*** 哈希操作设置值*/public void hSet(String key, String hashKey, Object value) {redisTemplate.opsForHash().put(key, hashKey, value);}/*** 哈希操作获取值*/public Object hGet(String key, String hashKey) {return redisTemplate.opsForHash().get(key, hashKey);}/*** 列表操作左推入*/public void lPush(String key, Object value) {redisTemplate.opsForList().leftPush(key, value);}/*** 列表操作右弹出*/public Object rPop(String key) {return redisTemplate.opsForList().rightPop(key);}/*** 集合操作添加元素*/public void sAdd(String key, Object... values) {redisTemplate.opsForSet().add(key, values);}/*** 集合操作获取所有元素*/public SetObject sMembers(String key) {return redisTemplate.opsForSet().members(key);}/*** 有序集合操作添加元素*/public void zAdd(String key, Object value, double score) {redisTemplate.opsForZSet().add(key, value, score);}/*** 有序集合操作获取范围内的元素*/public SetObject zRange(String key, long start, long end) {return redisTemplate.opsForZSet().range(key, start, end);}
}工具类的使用
设置和获取值
Autowired
private RedisUtils redisUtils;public void testSetValue() {redisUtils.set(key, value, 10, TimeUnit.MINUTES);Object value redisUtils.get(key);System.out.println(Value: value);
}删除键
redisUtils.delete(key);哈希操作
redisUtils.hSet(hashKey, field, value);
Object value redisUtils.hGet(hashKey, field);
System.out.println(Hash Value: value);列表操作
redisUtils.lPush(listKey, value1);
Object value redisUtils.rPop(listKey);
System.out.println(List Value: value);集合操作
redisUtils.sAdd(setKey, value1, value2);
SetObject members redisUtils.sMembers(setKey);
System.out.println(Set Members: members);有序集合操作
redisUtils.zAdd(zSetKey, value1, 1.0);
SetObject range redisUtils.zRange(zSetKey, 0, -1);
System.out.println(ZSet Range: range);注意事项
使用合适的序列化方式 默认情况下RedisTemplate 使用的是 JdkSerializationRedisSerializer这可能导致数据在 Redis 中以二进制形式存储。你可以配置自定义的序列化器例如 StringRedisSerializer 或 Jackson2JsonRedisSerializer。
示例配置
Configuration
public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplateString, Object template new RedisTemplate();template.setConnectionFactory(connectionFactory);// 设置 Key 和 Value 的序列化器template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));// 设置 Hash Key 和 Value 的序列化器template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class));template.afterPropertiesSet();return template;}
}连接池和性能优化
使用 Redis 连接池提高性能例如配置连接池大小和最大连接数。 避免频繁使用 keys 命令生产环境建议使用 SCAN。
过期策略
对临时数据设置合理的过期时间避免占用过多内存。
总结
工具类封装了 Redis 常见操作方便调用和管理。 根据需求选择适合的 Redis 数据结构String、Hash、List、Set、ZSet。
配置合适的序列化方式和连接池确保性能和数据易读性。