基于Redis ZSet结构实现朋友圈点赞功能
生活随笔
收集整理的這篇文章主要介紹了
基于Redis ZSet结构实现朋友圈点赞功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們需要分析下朋友圈點贊需要有哪些功能:
那么基于以上需求,大致的結構如下:
在數據結構上,key就是這個具體的朋友圈ID,ZSet的Value表示點贊用戶的ID,score表示點贊時間的時間戳,這樣可以方便地按時間順序查詢點贊信息,并支持對點贊進行去重,話不多說,接下來就是實戰。
?以下是代碼實現:
import redis.clients.jedis.Jedis; import redis.clients.jedis.ZParams;import java.util.List; import java.util.stream.Collectors;public class LikeDemo {public static final String LIKE_PREFIX = "like:";public static final String USER_PREFIX = "user:";/*** 點贊** @param postId 文章id* @param userId 用戶id* @param jedis*/public static void likePost(String postId, String userId, Jedis jedis) {String key = LIKE_PREFIX + postId;long now = System.currentTimeMillis();//將用戶id及當前時間戳放入有序集合jedis.zadd(key, now, userId);}/*** 取消點贊** @param postId 文章id* @param userId 用戶id* @param jedis*/public static void unLikePost(String postId, String userId, Jedis jedis) {String key = LIKE_PREFIX + postId;//將用戶id從有序集合中移除jedis.zrem(key, userId);}/*** 查看點贊列表** @param postId 文章id* @param jedis* @return*/public List<String> getLikes(String postId, Jedis jedis) {String key = LIKE_PREFIX + postId;ZParams zParams = new ZParams().asc();return jedis.zrangeByScoreWithScores(key, "+inf", "-inf", 0, -1, zParams).stream().map(t -> {String userId = t.getElement();return userId;}).collect(Collectors.toList());} }其中,likePost方法使用了Redis事物機制,確保添加點贊信息和設置過期時間是原子操作。getLikes方法使用了有序集合的zrangeByScoreWithScores命令,按照分支返回有序集合的成員。
總結
以上是生活随笔為你收集整理的基于Redis ZSet结构实现朋友圈点赞功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs——vscode新建js项目
- 下一篇: linux cmake编译源码,linu