首页 > 其他分享 >SortedSet实现点赞功能附带排行榜

SortedSet实现点赞功能附带排行榜

时间:2023-08-25 13:22:10浏览次数:46  
标签:member 附带 SortedSet players key 点赞 集合 id

SortedSet的基本使用

Sorted set 也称Zset类型,是一种具有排序效果的set集合。它跟set集合一样也是 string 类型元素的集合,且不允许重复的成员。并且要求每个元素都会关联一个double 类型的分数。后续可以通过分数来为集合中的成员进行从小到大的排序。

Sorted set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

数据缓存结构:
image

命令格式 功能 案例
zadd key score member 往key集合中添加member元素,分数为score zadd players 100 a
zincrby key increment member 将key集合中的member元素 分数 + increment zadd players 100 a
zrange key start stop [withscores] 将key集合中的元素按分数升序排列 [显式分数] zrange players 0 -1 withscores
zrevrange key start stop [withscores] 将key集合中的元素按分数降序排列 [显式分数] zrevrange players 0 -1 withscores
zrank key member 返回member元素在key结合中的正序排名 zrank players a
zrevrank key member 返回member元素在key结合中的倒序排名 zrevrank players a
zcard key 返回key集合元素个数 zcard players
zscore key member 获取指定key和member中的分数,返回score zscore players a

点赞需求

需求:

  • 同一个用户只能点赞一次,再次点击则取消点赞
  • 如果当前用户已经点赞,则点赞按钮高亮显示(前端已实现,判断字段Blog类的isLike属性)

实现步骤:

  • 给Blog类中添加一个isLike字段,标示是否被当前用户点赞1
  • 修改点赞功能,利用Redis的sortedset集合判断是否点赞过,未点赞过则点赞数+1,已点赞过则点赞数-12修改根据id查询Blog的业务,判断当前登录用户是否点赞过,赋值给isLike字段3修改分页查询Blog业务,判断当前登录用户是否点赞过,赋值给isLike字段

核心代码

 public Result likeBlog(Long id) {
        //1. 获取登录用户
        Long userId = UserHolder.getUser().getId();
        // 2.判断当前用户是否已经点赞,从redis中判断,采用sortedset中的score,返回的是一个时间戳,如果集合中不存在对应的元素,返回的是null
        Double score = stringRedisTemplate.opsForZSet().score(RedisConstants.BLOG_LIKED_KEY + id, userId.toString());
        //3.如果未点赞,可以点赞
        if (score ==null){
            //3.1数据库点赞数+1
            boolean isSuccess = update().setSql("liked=liked+1").eq("id", id).update();
            if (isSuccess){
                //3.2保存用户到redis的 sortedset中,zadd key value source
                stringRedisTemplate.opsForZSet().add(RedisConstants.BLOG_LIKED_KEY+id,userId.toString(),System.currentTimeMillis());
            }
        }else {
            //4.如果已点赞,取消点赞
            // 4.1数据库点赞数-1
            boolean isSuccess = update().setSql("liked=liked-1").eq("id", id).update();
            if (isSuccess){
                // 4.2 把用户从redis的set集合中移除
                stringRedisTemplate.opsForZSet().remove(RedisConstants.BLOG_LIKED_KEY+id,userId.toString());
            }
        }
        return Result.ok();
    }

标签:member,附带,SortedSet,players,key,点赞,集合,id
From: https://www.cnblogs.com/zgf123/p/17656682.html

相关文章

  • 开源日志组件Sejil--附带日志管理界面
    1.开源日志组件源码: https://github.com/alaatm/Sejil2.下载下来发现里面对于不同的.netcore版本的配置提供了对应的示例 .NetCore3.1Program.cs文件中publicclassProgram{publicstaticvoidMain(string[]args)=>CreateHostBuilder(args).B......
  • 微信开发之朋友圈自动点赞的技术实现
    简要描述:朋友圈点赞请求URL:http://域名地址/snsPraise请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String登录实例标识id是String朋友圈Id请求参数示例{"wId":"00......
  • 深入理解线程与进程:概念、特点与区别,附带代码演示
    当今计算机系统中,线程(Thread)和进程(Process)是并发编程中的关键概念。它们对于提高程序的效率和性能至关重要。本篇博客将详细介绍线程和进程的概念、特点以及它们之间的区别,同时通过代码演示来加深理解。1.线程1.1概念线程是操作系统能够进行运算调度的最小单位。一个进程可以包含......
  • 采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)
    实现该项目的流程如下"""项目:用户对物品类别的喜好细分(菜篮子分析)主算法:PCA降维算法KMeans算法总思路1、导包2、获取数据3、数据处理5、特征工程(使用PCA降维)6、使用KMeans算法进行模型训练7、模型评估""" Firstofall!!导包......
  • 简约好看的帮助中心创建案例,赶紧点赞收藏!
    在线帮助中心创建案例是提供用户支持和解决问题的有效方式之一。一个简约好看的帮助中心案例能够帮助用户快速找到需要的信息并解决问题,同时也能提升用户体验,增加点赞和收藏的可能性。帮助中心创建案例分享:酷学院:酷渲(北京)科技有限公司是一家致力于用科技推动组织能力提升的互联网企......
  • Visual Studio常用快捷键(附带免费PDF)
    前言对于开发者而言,熟悉快捷键的使用,能够起到事半功倍的作用,提高工作效率。以下是我整理的一份VisualStudio常用快捷键清单,希望能够帮助到你。常用快捷方式快捷键功能Ctrl+K+C注释选定内容Ctrl+K+U取消注释选定内容Ctrl+K+D代码格式整个文档内容......
  • 爬虫 | 蓝桥社区热搜点赞器
    本实验首先为大家介绍了爬虫必备的知识cookie,掌握cookie的使用场景之后,再结合爬虫思想实现了两款实用工具,自动点赞器与自动签到器,为大家扩展了爬虫编写工具的新思路。本节实验的最后会向大家简单介绍爬虫未来的学习方向。知识点cookie与爬虫实验楼社区点赞器实验楼签到器......
  • zTree树的创建、多选、多选框信息回显附带zTree树官网地址
    zTree树官网:https://www.treejs.cn/v3/main.php#_zTreeInfo 首先来到首页点击右上角下载 可以选择使用Git拉取也可以下载ZIP压缩包,两者选其一即可下载打开文件夹以后是下面这些文件然后将这些文件放你所使用的入项目当中,如下图 将文件放入......
  • 简约好看的帮助中创建案例,感觉点赞收藏!
    在线帮助中心创建案例是提供用户支持和解决问题的有效方式之一。一个简约好看的帮助中心案例能够帮助用户快速找到需要的信息并解决问题,同时也能提升用户体验,增加点赞和收藏的可能性。以下是一些建议来创建简约好看的帮助中心案例:简明扼要的标题:案例标题应该简明扼要,能够准确描述用......
  • Linux下编译安装python3.7 附带python-dev
    1、安装开发工具包sudoyum-ygroupinstall"Developmenttools" 2、安装依赖包sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel ......