当前位置: 首页 > news >正文

StringRedisTemplate的用法详解

StringRedisTemplate 继承自 RedisTemplate,默认使用 StringRedisSerializer 来序列化 key 和 value,适合处理字符串类型的数据。

使用该类需要在maven中添加

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置获redis配置信息

@Configuration
public class RedisConfig {@Beanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(factory);return template;}
}

获取对象

@Autowired
private StringRedisTemplate stringRedisTemplate;

基本使用技巧

// 设置值
stringRedisTemplate.opsForValue().set("key1", "value1");
stringRedisTemplate.opsForValue().set("key2", "value2", Duration.ofMinutes(10)); // 设置过期时间

// 获取值
String value1 = stringRedisTemplate.opsForValue().get("key1");

// 设置多个值
Map<String, String> map = new HashMap<>();
map.put("key3", "value3");
map.put("key4", "value4");
stringRedisTemplate.opsForValue().multiSet(map);

// 获取多个值
List<String> values = stringRedisTemplate.opsForValue().multiGet(Arrays.asList("key1", "key2"));

// 递增递减
Long result = stringRedisTemplate.opsForValue().increment("counter", 1); // +1
Long result2 = stringRedisTemplate.opsForValue().decrement("counter", 1); // -1

// 追加字符串
Integer newLength = stringRedisTemplate.opsForValue().append("key1", "_append");

// 设置值
stringRedisTemplate.opsForValue().set("key1", "value1");
stringRedisTemplate.opsForValue().set("key2", "value2", Duration.ofMinutes(10)); // 设置过期时间// 获取值
String value1 = stringRedisTemplate.opsForValue().get("key1");// 设置多个值
Map<String, String> map = new HashMap<>();
map.put("key3", "value3");
map.put("key4", "value4");
stringRedisTemplate.opsForValue().multiSet(map);// 获取多个值
List<String> values = stringRedisTemplate.opsForValue().multiGet(Arrays.asList("key1", "key2"));// 递增递减
Long result = stringRedisTemplate.opsForValue().increment("counter", 1); // +1
Long result2 = stringRedisTemplate.opsForValue().decrement("counter", 1); // -1// 追加字符串
Integer newLength = stringRedisTemplate.opsForValue().append("key1", "_append");

对键的操作

// 判断键是否存在
Boolean exists = stringRedisTemplate.hasKey("key1");// 删除键
Boolean deleted = stringRedisTemplate.delete("key1");
Long deletedCount = stringRedisTemplate.delete(Arrays.asList("key1", "key2"));// 设置过期时间
Boolean expired = stringRedisTemplate.expire("key2", Duration.ofMinutes(30));// 获取剩余生存时间
Long ttl = stringRedisTemplate.getExpire("key2");// 查找匹配的键
Set<String> keys = stringRedisTemplate.keys("user:*");// 随机获取一个键
String randomKey = stringRedisTemplate.randomKey();

实际运用完整示例

缓存使用

@Service
public class UserService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;private static final String USER_KEY_PREFIX = "user:";private static final Duration CACHE_TTL = Duration.ofHours(1);public void cacheUser(String userId, String userInfo) {String key = USER_KEY_PREFIX + userId;stringRedisTemplate.opsForValue().set(key, userInfo, CACHE_TTL);}public String getCachedUser(String userId) {String key = USER_KEY_PREFIX + userId;return stringRedisTemplate.opsForValue().get(key);}public void deleteCachedUser(String userId) {String key = USER_KEY_PREFIX + userId;stringRedisTemplate.delete(key);}
}

分布式锁示例

@Component
public class RedisDistributedLock {@Autowiredprivate StringRedisTemplate stringRedisTemplate;public boolean tryLock(String lockKey, String requestId, long expireTime) {return stringRedisTemplate.opsForValue().setIfAbsent(lockKey, requestId, Duration.ofSeconds(expireTime));}public boolean releaseLock(String lockKey, String requestId) {String currentValue = stringRedisTemplate.opsForValue().get(lockKey);if (requestId.equals(currentValue)) {stringRedisTemplate.delete(lockKey);return true;}return false;}
}

http://www.dtcms.com/a/610535.html

相关文章:

  • 第7天-摄像头体感游戏
  • wordpress液态页面wordpress国内优化 墙
  • AIC8800M40模组调试中遇到的问题
  • Linux设置目录用户权限
  • RVO2-CS:高效的多智能体避碰算法C#实现——原理、应用与实战指南
  • 哈希表实现unordered_map
  • 亚马逊欧洲FBM Ship+上线丨零成本升级配送,中国卖家入驻正当时
  • 做网站seo优化总结做网站年入多少
  • 主流 AI IDE 之一的 Meituan CatPaw IDE 介绍
  • 网站模板下载后怎么使用建设银行舟山分行网站
  • 解决访问 https 网站时,后端重定向或获取 URL 变成 http 的问题
  • 南京h5网站开发网上免费个人网站
  • 【☀Linux驱动开发笔记☀】新字符设备驱动开发_02
  • Java-173 Neo4j + Spring Boot 实战:从 Driver 到 Repository 的整合与踩坑
  • 阳光保险网站wordpress phpwind
  • Android内核进阶之获取DMA地址snd_pcm_sgbuf_get_addr:用法实例(九十一)
  • 隔离地过孔要放哪里,才能最有效减少高速信号过孔串扰?
  • 鸿蒙应用开发从入门到实战(五):ArkUI概述
  • 广东大唐建设网站网站开发名片怎么做
  • 图片展示类网站wordpress模板在线编辑
  • 大模型面试题:请讲一下生成式语言模型的工作机理
  • OpenWebui 富文本提示词 远程命令注入漏洞 | CVE-2025-64495 复现研究
  • 黑马Python+AI大模型开发课程笔记(个人记录、仅供参考)
  • 安全的响应式网站建设半月报网站建设商务代表工作总结
  • 现在1做啥网站流量大上海网站制作网站制作公司
  • 如何做彩票网站域名查询入口
  • 学习react第四天
  • 宜宾百度网站建设武锡网站建设生购房政策
  • 领域驱动设计(DDD)与微服务架构的集成
  • windows中程序端口被占用解决步骤