您好,欢迎访问一九零五行业门户网

如何使用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实现点赞取消点赞的详细内容。
其它类似信息

推荐信息