redis--015

业务需求

  1. 点赞 / 取消点赞互斥:同一个用户对同一篇博客只能点赞 1 次;再次点击就取消点赞。
  2. 前端高亮控制 :后端返回isLike字段,前端根据这个字段控制点赞按钮是否高亮。

⚠注意:isLike不存入数据库 ,只是返回给前端的临时标记,代表当前登录用户有没有给这篇博文点过赞,不同用户访问同一篇博客,这个值是不一样的。

Redis 选型:Set 集合

  • key 设计:blog:like:博文id
  • Set 里面存储点赞用户的 id
  • Set 天然去重:同一个用户 id 无法重复存入集合,刚好满足一人只能点一次赞。

完整实现步骤

  1. 实体类改造 在 Blog 实体增加临时字段isLike,仅用于向前端返回状态,不映射数据库表。
  2. 点赞接口业务逻辑
  • 获取当前登录用户 ID、被点赞博客 ID
  • Redis 中查询该博客对应的 Set 集合,判断用户 ID 是否存在
    • ✅不存在(未点赞):把用户 id 加入 Set 集合;数据库点赞数量 + 1
    • ✅已存在(已点赞):把用户 id 从 Set 移除;数据库点赞数量 - 1
  1. 根据 id 查询单篇博客 查询博客数据库记录之后,额外去 Redis 判断:当前登录用户 id 是否在该博文的点赞 Set 集合里
  • 如果存在 → isLike=true
  • 如果不存在 → isLike=false 把该字段填充到 Blog 对象返回前端。
  1. 分页查询博客列表 分页拿到一批 Blog 数据之后,遍历每一条博文 ,每条都去 Redis 判断当前用户是否点赞过,给每一条记录设置isLike,再返回前端。
相关推荐
用户52958931668502 小时前
三马代驾实战:抢单池的 Redis 锁 + RabbitMQ 异步消费怎么做
redis
代码丰3 小时前
跨系统传输大 JSON:直接压缩,还是把数据放进 Redis?
redis·后端·json
devilnumber6 小时前
Redis 数据类型 + 项目落地场景(面试版,全面、实用,后端常用)
数据库·redis·面试
靳某某。6 小时前
Ubuntu安装php8.4 及redis ngin
linux·redis·ubuntu
Zhang~Ling7 小时前
Redis 基础教程:从常用命令到实际业务场景
数据库·redis·缓存
用户094248568039 小时前
第8章:Redis Bitmap 与 BitField 实战:签到、活跃用户与状态压缩
redis·架构·源码
Flynt1 天前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
Song_RsHt1 天前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
GottdesKrieges1 天前
Redis哨兵模式新建用户和修改口令
数据库·redis
爱好曙光1 天前
Redis Cluster 槽迁移:MOVED 重定向与拓扑刷新实战
redis·cluster·性能调优·moved·槽迁移