使用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() {@Overridepublic 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实现点赞取消点赞的详细代码】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 userIdpublic static String getUserLikeKey(long userId) {return PREFIX_USER_LIKE + SPLIT + userId; * 汇总某个帖子的评论数量public static String getUserCommentsKey(int articleId) {return PREFIX_USER_COMMENTS + SPLIT + articleId;
到此这篇关于Redis实现点赞取消点赞的文章就介绍到这了,更多相关Redis实现点赞取消点赞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python|Python高效实现滑块验证码自动操纵
- python基础知识(Pandas|python基础知识:Pandas DataFrame中的tuple元素遍历的实现)
- python中numpy库中的函数_python中numpy库的使用
- 程序员基本技能|算法工程师的加分技能,使用GTest维护自己的代码
- 傅里叶变换及其在opencv中图像去噪的实现
- 数据科学从0到1|python使用numpy生成指定步长的浮点数序列
- #|两只小企鹅(Python实现)
- epoll|linux下多路复用实现之Epoll
- 链表|实现链表创建、插入、查询、反转、销毁功能
- 使用FFMPEG类库分离出多媒体文件中的H.264码流