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

《RedisTemplate 核心操作全解析》

RedisTemplate 是 Spring Data Redis 提供的核心类,用于操作 Redis 数据库。它封装了各种数据类型的操作,支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(ZSet)等结构。


RedisTemplate 常用接口分类

1. 通用操作(Key 相关)

方法说明
Boolean hasKey(K key)检查 key 是否存在
Boolean delete(K key)删除 key
Boolean expire(K key, long timeout, TimeUnit unit)设置 key 过期时间
Long getExpire(K key)获取 key 剩余过期时间(秒)
Set<K> keys(K pattern)按模式匹配 keys(如 user:*
void rename(K oldKey, K newKey)重命名 key

示例:

java

redisTemplate.hasKey("user:1"); // 检查 key 是否存在
redisTemplate.expire("user:1", 10, TimeUnit.MINUTES); // 设置 10 分钟过期
redisTemplate.delete("user:1"); // 删除 key

2. 字符串(String)操作

方法说明
ValueOperations<K, V> opsForValue()获取字符串操作对象
void set(K key, V value)存储字符串
V get(K key)获取字符串
Long increment(K key, long delta)自增(适用于数值)
Boolean setIfAbsent(K key, V value)仅当 key 不存在时设置(类似 SETNX
void multiSet(Map<? extends K, ? extends V> map)批量存储

示例:

java

ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set("name", "Alice"); // 存储
String name = ops.get("name"); // 获取
ops.increment("counter", 1); // 自增

3. 哈希(Hash)操作

方法说明
HashOperations<K, HK, HV> opsForHash()获取哈希操作对象
void put(K key, HK hashKey, HV value)存储哈希字段
HV get(K key, HK hashKey)获取哈希字段
Map<HK, HV> entries(K key)获取整个哈希表
Long delete(K key, Object... hashKeys)删除哈希字段
Boolean hasKey(K key, Object hashKey)检查哈希字段是否存在

示例:

java

HashOperations<String, String, String> ops = redisTemplate.opsForHash();
ops.put("user:1", "name", "Bob"); // 存储
String name = ops.get("user:1", "name"); // 获取
Map<String, String> user = ops.entries("user:1"); // 获取整个哈希

4. 列表(List)操作

方法说明
ListOperations<K, V> opsForList()获取列表操作对象
Long leftPush(K key, V value)左插入(LPUSH)
Long rightPush(K key, V value)右插入(RPUSH)
V leftPop(K key)左弹出(LPOP)
V rightPop(K key)右弹出(RPOP)
List<V> range(K key, long start, long end)获取列表范围(LRANGE)

示例:

java

ListOperations<String, String> ops = redisTemplate.opsForList();
ops.leftPush("tasks", "task1"); // 左插入
String task = ops.leftPop("tasks"); // 左弹出
List<String> tasks = ops.range("tasks", 0, -1); // 获取全部

5. 集合(Set)操作

方法说明
SetOperations<K, V> opsForSet()获取集合操作对象
Long add(K key, V... values)添加元素(SADD)
Set<V> members(K key)获取所有元素(SMEMBERS)
Boolean isMember(K key, Object value)判断元素是否存在(SISMEMBER)
Long remove(K key, Object... values)删除元素(SREM)

示例:

java

SetOperations<String, String> ops = redisTemplate.opsForSet();
ops.add("tags", "java", "redis"); // 添加元素
Set<String> tags = ops.members("tags"); // 获取所有元素
boolean exists = ops.isMember("tags", "java"); // 判断是否存在

6. 有序集合(ZSet)操作

方法说明
ZSetOperations<K, V> opsForZSet()获取有序集合操作对象
Boolean add(K key, V value, double score)添加元素(ZADD)
Set<V> range(K key, long start, long end)按索引范围获取(ZRANGE)
Set<V> rangeByScore(K key, double min, double max)按分数范围获取
Long rank(K key, Object value)获取元素排名(升序)
Long reverseRank(K key, Object value)获取元素排名(降序)

示例:

java

ZSetOperations<String, String> ops = redisTemplate.opsForZSet();
ops.add("leaderboard", "user1", 100); // 添加元素
Set<String> top3 = ops.range("leaderboard", 0, 2); // 获取前 3 名
Long rank = ops.rank("leaderboard", "user1"); // 获取排名

 进阶用法

1. 事务支持

java

redisTemplate.execute(new SessionCallback<>() {@Overridepublic Object execute(RedisOperations operations) {operations.multi(); // 开启事务operations.opsForValue().set("a", "1");operations.opsForValue().set("b", "2");return operations.exec(); // 提交事务}
});

2. 发布/订阅(Pub/Sub)

java

redisTemplate.convertAndSend("channel", "Hello Redis!"); // 发布消息

3. Lua 脚本执行

java

DefaultRedisScript<Long> script = new DefaultRedisScript<>("return redis.call('get', KEYS[1])", Long.class);
Long result = redisTemplate.execute(script, Collections.singletonList("key"));

 总结

数据类型操作接口示例
KeyredisTemplate.hasKey()检查 key 是否存在
StringopsForValue()set()get()
HashopsForHash()put()get()entries()
ListopsForList()leftPush()range()
SetopsForSet()add()members()
ZSetopsForZSet()add()range()

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

相关文章:

  • 家庭宽带中的服务器如何被外网访问?
  • 无法解析 CentOS 官方镜像源的域名
  • 977.有序数组的平方
  • 什么是回调地址
  • 8、项目管理
  • PI 思维升级 解密电容器的选择与布局策略,带您追求极致平坦的电源阻抗
  • 个人自然人可不可以申请注册商标!
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树
  • Python Day24 多线程编程:核心机制、同步方法与实践案例
  • Lesson 33 Out of the darkness
  • 开疆智能ModbusTCP转Profinet网关连接EPSON机器人配置案例
  • c# winform 调用 海康威视工业相机(又全又细又简洁)
  • 字典树trie
  • 技术博客:从HTML提取到PDF生成的完整解决方案
  • 奔图P2500NW打印机手机无线连接方法
  • 强化应急通信生命线:遨游三防平板、卫星电话破局极端灾害救援
  • 2.6 sync
  • 2024年测绘程序设计比赛--空间探索性分析(数据为2025年第三次模拟数据)
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 【数据结构与算法】刷题篇——环形链表的约瑟夫问题
  • tmux.conf配置-简易版
  • Java技术栈/面试题合集(15)-RabbitMQ篇
  • 202506 电子学会青少年等级考试机器人四级实际操作真题
  • vue3 vite 使用vitest 单元测试 组件测试
  • Python数据可视化:从基础到高级实战指南
  • 【代码随想录day 12】 力扣 144.145.94.前序遍历中序遍历后序遍历
  • 【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏
  • 架构层防护在高并发场景下的实践
  • Linux系统之Docker命令与镜像、容器管理
  • Spring Cloud系列—Eureka服务注册/发现