准备redis三种键分别为:
product_comment_likes:{%d}【评论赞成数量维护】(hash结构,%d=productId,key=评论id,value=评论赞成数量)
user_comment_likes:{%d}:%d 【用户侧评论赞成数量维护】(set结构,{%d}=userId,%d=productId,value=commentId)
comment_like_logs【评论赞成数量日志】(list结构,value结构=productId:commentId|memoryAgreeCount(评论赞成数量))
说明:该接口全部采用基于redis缓存操作,使用lua脚本保证原子性。{}保证rediskey在分布式下数据保证在同一redis的哈希槽中。最后由定时任务去同步到mysql
接口说明:用户请求一次点赞,再请求一次取消点赞
service:
用户点赞的 lua脚本:
同步数据的lua脚本:
定时器(这部分我并没有去加分布式锁,可以考虑使用xxl-job,分布式下请不要使用springboot定时器,单机就随便啦):