温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Redis实现点赞取消点赞

发布时间:2022-03-21 09:13:42 来源:亿速云 阅读:240 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关如何使用Redis实现点赞取消点赞,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

代码实现:

/**      *      * @param userId 点赞的人      * @param type 点赞与取消点赞的表示      * @param textId   文章ID      * @param entityUserId -- 被点赞的人,文章作者      */     private void like(long userId,int type,int textId,long entityUserId){         redisTemplate.execute(new SessionCallback() {             @Override             public Object execute(RedisOperations operations) throws DataAccessException {                 String entityLikeKey = RedisKeyUtil.getEntityLikeKey(type, textId);                 String userLikeKey = RedisKeyUtil.getUserLikeKey(entityUserId);                 boolean isMember = redisTemplate.opsForSet().isMember(entityLikeKey, userId);                 //多个更新操作,需要事务                 operations.multi();                 if (isMember) {                     //取消赞                     redisTemplate.opsForSet().remove(entityLikeKey, userId);                     redisTemplate.opsForValue().decrement(userLikeKey);                 } else {                     //点赞                     redisTemplate.opsForSet().add(entityLikeKey, userId);                     redisTemplate.opsForValue().increment(userLikeKey);                 }                 return operations.exec();             }         });     }     /**      *查询某实体(帖子,评论等)点赞数量      * @param type 1点赞,2评论。0表示取消点赞      * @param textId      * @return      */     private long findEntityLikeCount(int type, int textId){         String entityLikeKey = RedisKeyUtil.getEntityLikeKey(type, textId);         return redisTemplate.opsForSet().size(entityLikeKey);     }     /**      * 查询某人对某文章的点赞状态      * @param textId 帖子ID      * @param userId      * @return      */     private int findEntityLikeStatus(int textId,long userId){         String entityLikeKey = RedisKeyUtil.getEntityLikeKey(1, textId);         //此处返回int,是为了进行扩展。比如扩展踩,为止2.等等情况         return redisTemplate.opsForSet().isMember(entityLikeKey,userId)?1:0;     }     /**      * 查询某个用户获得赞,用于在个人主页查看收获了多少赞      * @param userId      * @return      */     private int findUserLikeCount(long userId){         String userLikeKey = RedisKeyUtil.getUserLikeKey(userId);         Integer count = (Integer) redisTemplate.opsForValue().get(userLikeKey);         // count.intValue()数据的整数形式;         return count==null?0:count.intValue();     }

Redis–key设置

public class RedisKeyUtil {     private static final String SPLIT = ":";     private static final String PREFIX_ENTITY_LIKE = "like:entity";     private static final String PREFIX_USER_LIKE = "like:user";     private static final String PREFIX_USER_COMMENTS="comments:user";     /**      *某个实体收到的赞,如帖子,      * like:entity:entityType:entityId -> set(userId) 对应set,存入userId      * @param entityType      * @param entityId      * @return      */     public static String getEntityLikeKey(int entityType, int entityId) {         return PREFIX_ENTITY_LIKE + entityType + SPLIT + entityId;     }      *某个用户收到的总赞数      * like:user:userId ->long      * @param userId     public static String getUserLikeKey(long userId) {         return PREFIX_USER_LIKE + SPLIT + userId;      * 汇总某个帖子的评论数量     public static String getUserCommentsKey(int articleId) {         return PREFIX_USER_COMMENTS + SPLIT + articleId;

关于“如何使用Redis实现点赞取消点赞”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI