核心技术栈:Spring Data Redis(StringRedisTemplate 是Spring对redis的封装工具),专为字符串类型数据设计的Redis操作模板,默认String序列化,可读性高

核心方法:opsforvalue()

1. 核心:String 类型(项目中用得最多)

对应 Redis 的 SET/GET/DEL/EXPIRE 等命令,是验证码、Token、店铺缓存等场景的核心。
方法 作用 黑马点评实战示例
opsForValue().set(key, value) 存储字符串键值对(无过期时间) 临时存储用户登录态:opsForValue().set("login:token:1001", "xxx")
opsForValue().set(key, value, timeout, unit) 存储并设置过期时间 验证码存储:set("login:code:13800000000", "123456", 2, TimeUnit.MINUTES)
opsForValue().setIfAbsent(key, value, timeout, unit) 原子性设置(NX,键不存在才设置) 防重复发送验证码:避免同一手机号并发存多个验证码
opsForValue().get(key) 获取键对应的值 读取验证码:get("login:code:13800000000")
opsForValue().getAndSet(key, newValue) 获取旧值并设置新值 刷新 Token 有效期:获取旧 Token 同时设置新过期时间
delete(key) 删除指定键 用户登出:delete("login:token:1001")
expire(key, timeout, unit) 给已存在的键设置过期时间 延长 Token 有效期:expire("login:token:1001", 30, TimeUnit.MINUTES)
getExpire(key) 获取键的剩余过期时间(秒) 检查 Token 是否即将过期:getExpire("login:token:1001")
 

2. Hash 类型(适合存储对象属性)

 
对应 Redis 的 HSET/HGET/HDEL 等命令,黑马点评中用于存储「用户信息、店铺详情」等结构化数据。
方法 作用 黑马点评实战示例
opsForHash().put(key, hashKey, value) 给 Hash 键设置单个属性 存储用户信息:opsForHash().put("user:1001", "name", "张三")
opsForHash().putAll(key, map) 批量设置 Hash 属性 批量存储店铺信息:putAll("shop:10", Map.of("name", "奶茶店", "typeId", 1))
opsForHash().get(key, hashKey) 获取 Hash 中单个属性值 读取店铺名称:get("shop:10", "name")
opsForHash().entries(key) 获取 Hash 所有属性(返回 Map) 读取完整用户信息:entries("user:1001") → 转 User 对象
opsForHash().delete(key, hashKeys) 删除 Hash 中指定属性 删除用户无用属性:delete("user:1001", "age")
 

3. List 类型(有序列表,适合队列 / 栈)

 
对应 Redis 的 LPUSH/RPUSH/LPOP/RPOP 等命令,黑马点评中用于「消息队列(简易版)、用户浏览记录」。
方法 作用 黑马点评实战示例
opsForList().leftPush(key, value) 从列表左侧添加元素(栈顶) 存储用户浏览记录(最新的在最前):leftPush("history:1001", "shop:10")
opsForList().range(key, start, end) 获取列表指定范围元素 读取前 10 条浏览记录:range("history:1001", 0, 9)
opsForList().rightPop(key) 从列表右侧弹出元素(队列尾) 简易消息队列消费:rightPop("queue:order")
opsForList().trim(key, start, end) 裁剪列表(只保留指定范围) 限制浏览记录最多 10 条:trim("history:1001", 0, 9)
 

4. Set 类型(无序不重复集合)

 
对应 Redis 的 SADD/SMEMBERS/SISMEMBER 等命令,黑马点评中用于「用户点赞、店铺标签」。
方法 作用 黑马点评实战示例
opsForSet().add(key, values) 向集合添加元素 给店铺打标签:add("shop:tag:10", "奶茶", "网红", "平价")
opsForSet().isMember(key, value) 判断元素是否在集合中 检查用户是否点赞:isMember("like:shop:10", "user:1001")
opsForSet().members(key) 获取集合所有元素 读取店铺所有标签:members("shop:tag:10")
opsForSet().remove(key, values) 移除集合中指定元素 取消用户点赞:remove("like:shop:10", "user:1001")
 

5. ZSet 类型(有序不重复集合,核心是分值)

 
对应 Redis 的 ZADD/ZRANGE/ZSCORE 等命令,黑马点评中「GEO 地理查询(底层是 ZSet)、秒杀商品排序」都依赖它。
方法 作用 黑马点评实战示例
opsForZSet().add(key, value, score) 添加元素并指定分值(排序依据) GEO 底层:add("shop:geo:1", "shop:10", 120.149993)(经纬度转分值)
opsForZSet().rangeByScore(key, min, max) 按分值范围获取元素 按距离排序查店铺:rangeByScore("shop:geo:1", 0, 1000)
opsForZSet().score(key, value) 获取元素的分值 读取店铺的经纬度分值:score("shop:geo:1", "shop:10")
opsForZSet().incrementScore(key, value, delta) 增加元素分值 秒杀商品热度加分:incrementScore("seckill:hot", "goods:1", 1)
 

6. GEO 类型(地理空间,黑马点评核心)

虽无单独的 opsForGeo() 方法,但 StringRedisTemplate 可通过 opsForGeo() 操作 GEO(本质是 ZSet),对应你之前的「附近店铺查询」:
 
方法 作用 黑马点评实战示例
opsForGeo().add(key, point, member) 添加地理坐标 存储店铺经纬度:add("shop:geo:1", new Point(120.149993, 30.334229), "shop:10")
opsForGeo().radius(key, circle, args) 按半径查询附近元素 查附近店铺:radius("shop:geo:1", new Circle(new Point(x,y), 1000), args)

 

posted on 2026-03-08 15:38  fafrkvit  阅读(58)  评论(0)    收藏  举报