千家信息网

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

发表于:2024-10-05 作者:千家信息网编辑
千家信息网最后更新 2024年10月05日,这篇文章将为大家详细讲解有关如何使用Redis实现点赞取消点赞,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码实现:/** * * @param
千家信息网最后更新 2024年10月05日如何使用Redis实现点赞取消点赞

这篇文章将为大家详细讲解有关如何使用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实现点赞取消点赞"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0