【Redis】Redis set类型实现点赞功能

news2024/9/21 22:37:19

文章目录

    • set 数据类型介绍
    • 不排序实现
    • 排序实现


set 数据类型介绍

Redis中的set类型是一组无序的字符串值。

在这里插入图片描述

set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令:

  • SADD key member1 [member2]:向指定键名的集合中添加一个或多个成员,并返回成功添加的成员数量。

  • SREM key member1 [member2]:从指定键名的集合中移除一个或多个成员,并返回成功移除的成员数量。

  • SMEMBERS key:返回指定键名集合中所有的成员。

  • SISMEMBER key member:检查指定成员是否在集合中,存在返回1,不存在则返回0。

  • SRANDMEMBER key [count]:随机获取指定键名集合中的一个或多个成员。如果指定count参数,则表示获取不重复的count个随机成员。

  • SCARD key:获取指定键名集合中的成员数。

  • SPOP key [count]:随机弹出指定键名集合中的一个或多个成员。如果指定count参数,则表示弹出不重复的count个随机成员。

  • SDIFF key1 [key2]:对两个或多个集合执行差集操作,返回结果集中保存的成员。

  • SUNION key1 [key2]:对两个或多个集合执行并集操作,返回结果集中保存的成员。

  • SINTER key1 [key2]:对两个或多个集合执行交集操作,返回结果集中保存的成员。

  • SDIFFSTORE destination_key key1 [key2]:对两个或多个集合执行差集操作,并将结果保存到指定键名的集合中。

  • SUNIONSTORE destination_key key1 [key2]:对两个或多个集合执行并集操作,并将结果保存到指定键名的集合中。

  • SINTERSTORE destination_key key1 [key2]:对两个或多个集合执行交集操作,并将结果保存到指定键名的集合中。

set类型提供了非常丰富的命令来管理集合中的元素,使其在实际应用场景中有很大的灵活性和适用性


不排序实现

场景:一件商品 同一个用户只能点赞一次

使用 Redis 的 set(唯一 & 不排序) 数据结构

// 	判断当前登录用户是否已经点赞
String key = BLOG_LIKED_KEY + id;
Boolean isMember = stringRedisTemplate.opsForSet().isMember(key, userId.toString());
//	保存用户到Redis的set集合
stringRedisTemplate.opsForSet().add(key, userId.toString());
//  把用户从Redis的set集合移除
stringRedisTemplate.opsForSet().remove(key, userId.toString());

排序实现

场景:一件商品 同一个用户只能点赞一次 且 按照点赞时间排序

使用 Redis 的 sortedSet(唯一 & 排序) 数据结构

// 保存用户到Redis的sortedSet集合  zadd key value score
stringRedisTemplate.opsForZSet().add(key, userId.toString(), System.currentTimeMillis());

// 获取当前登录用户是否已经点赞(null 未点赞)
String key = BLOG_LIKED_KEY + id;
Double score = stringRedisTemplate.opsForZSet().score(key, userId.toString());

// 把用户从Redis的set集合移除 key value 
stringRedisTemplate.opsForZSet().remove(key, userId.toString());

// 查询top5的点赞用户 zrange key 0 4 (范围查询)
Set<String> top5 = stringRedisTemplate.opsForZSet().range(key, 0, 4);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产 API 工具天花板,用来搞项目真的不错

一、API爆炸的时代 随着最近行业的移动化、物联网化、数字化转型、微服务等多种概念的提出&#xff0c;对应的 API 数量已经呈现出爆炸式增长&#xff0c;由此带来的问题就是前后端的接口对接问题越来越来突出&#xff0c;我们能很难找到一个合适的技术工具提高我们的效率。由此…

irq_domain msi_domain 的 使用和关系

文章目录 如何创建一个 irq_domain如何创建一个 msi_domainirq domain 和 msi domain 的关系MSI对IRQdomain打的补丁变量结构体API初始化时的API申请IRQ时的API 实例 GICV3-ITS & GICV3-ITS-PCI 相关结构体变量所在文件 如何创建一个 irq_domain 内核文档说,我们可以调用如…

基于 FPGA 的彩色图像灰度化的设计实现

文章目录 前言一、系统整体设计二、各模块的功能三、彩色图像灰度化处理模块的设计1.基本原理2.彩色图像灰度化处理方法介绍方法 1&#xff1a;分量法方法 2&#xff1a;最大值法方法 3&#xff1a;平均值法平均值法的实现方法 4 加权平均法加权平均法的实现rgb2gray 模块rgb2g…

LeetCode965. 单值二叉树,100. 相同的树

965. 单值二叉树&#xff0c;100. 相同的树 965描述示例解题思路以及代码 100描述示例解题思路以及代码 965 描述 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 fals…

获得GitHub Copilot并结合VS Code使用

一、什么是GitHub Copilot GitHub Copilot是一种基于AI的代码生成工具。它使用OpenAI的GPT&#xff08;生成式预训练Transformer&#xff09;技术来提供建议。它可以根据您正在编写的代码上下文建议代码片段甚至整个函数。 要使用GitHub Copilot&#xff0c;您需要在编辑器中…

(四)Photon Voice2 的使用

一、入门 1.Voice简介 Photon Voice 2 是一个 SDK&#xff0c;可以轻松地向 Unity 应用程序添加高质量的低延迟语音聊天。它建立在 Photon Realtime 之上&#xff0c;并继承了它的所有功能&#xff0c;包括配对和兴趣小组。客户端加入房间并创建传出流&#xff08;本地语音&a…

双目、结构光、tof,三种深度相机的原理区别看这一篇就够了!

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

win10屏幕录像哪个好用?这2款录屏软件值得推荐!

案例&#xff1a;win10电脑如何录屏&#xff1f; 【我使用的电脑是win10系统&#xff0c;我想对它进行屏幕录制。有没有小伙伴知道win10电脑如何录屏&#xff1f;win10录屏软件哪款比较好用&#xff1f;】 在如今互联网时代&#xff0c;屏幕录像是一项非常实用的功能&#xf…

【大数据之Hadoop】三十二、MapReduce生产经验

1 MapReduce跑的慢的原因 MapReduce程序效率的瓶颈在于两点&#xff1a; 1&#xff09;计算机性能&#xff1a;CPU、内存、磁盘、网络 2&#xff09;I/O操作优化 &#xff08;1&#xff09;数据倾斜 &#xff08;2&#xff09;Map运行时间太长&#xff0c;导致Reduce等待过久 …

高斯-约旦消元法

1&#xff0c;思想 该算法基于高斯消元&#xff0c;但是思想是把矩阵化为对角阵&#xff0c;从而避免回代的操作思路是一列一列处理&#xff0c;每次选为处理过的行中主元最大&#xff08;极大避免精度损失)的行处理。把这一列除了主元这一行的元素&#xff0c;其余该列的其他…

c#笔记-委托

委托 委托是方法的类型。 有了类型就可以声明方法的变量&#xff0c;参数&#xff0c;字段。然后再调用他。 很多新人很困惑&#xff0c;为什么要把方法做成变量&#xff0c;不直接去调用它呢&#xff1f; 这是因为在目前你的认知里&#xff0c;代码都是你一个人写出来的。 如…

计算机图形学-GAMES101-5

一、观测变换 通过Viewing(观测)transformation&#xff0c;最终我们将世界坐标系中的物体投影到了一个xyz都处于【-1,1】的立方体中。那么接下来&#xff0c;我们该做什么&#xff1f; 二、光栅化(Rasterization) &#xff08;1&#xff09;透视投影的定义 定义透视投影的视…

〖大学生·技术人必学的职业规划白宝书 - 职业规划篇①〗- 大学生选择职业前的自我认知与剖析

历时18个月&#xff0c;采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴&#xff0c;该专栏有你想要的职业规划、简历、面试的答案。说明&#xff1a;该文属于 大学生技术人职业规划白宝书 专栏&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

linux之线程同步

1. 互斥锁 定义锁&#xff1a; pthread_mutex_t 初始化锁函数&#xff1a; int pthread_mutex_init(pthread_mutex_t* mutex,pthread_mutexattr_t* attr); 第一个参数是定义的互斥锁的地址&#xff0c;第二个参数是锁的属性&#xff0c;一般传NULL 互斥锁的属性在创建…

(C语言版)力扣(LeetCode)+牛客网(nowcoder)二叉树基础oj练习

二叉树基础oj练习 965. 单值二叉树题目解法 100. 相同的树题目解法 101. 对称二叉树题目解法 144. 二叉树的前序遍历题目解法 94. 二叉树的中序遍历题目解法 145. 二叉树的后序遍历题目解法 572. 另一棵树的子树题目解法 KY11 二叉树遍历题目解法 结语 965. 单值二叉树 题目 …

Linux安装MongoDB数据库并内网穿透在外远程访问

文章目录 前言1.配置Mongodb源2.安装MongoDB数据库3.局域网连接测试4.安装cpolar内网穿透5.配置公网访问地址6.公网远程连接7.固定连接公网地址8.使用固定公网地址连接 转发自CSDN cpolarlisa的文章&#xff1a;Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透…

LeetCode572. 另一棵树的子树LeetCode

572. 另一棵树的子树 描述示例解题思路以及代码 描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节…

数据库|SQL调优案例之TiFlash帮倒忙该怎么办?

一、背景 早上收到某系统的告警tidb节点挂掉无法访问&#xff0c;情况十万火急。登录中控机查了一下display信息&#xff0c;4个TiDB、Prometheus、Grafana全挂了&#xff0c;某台机器hang死无法连接&#xff0c;经过快速重启后集群恢复&#xff0c;经排查后是昨天上线的某个S…

Flink消费pubsub问题

我看网上flink消费pubsub的资料并不多&#xff0c;最近跑通了&#xff0c;大家有问题的可以给我留言。 一、基本资料 1.flink官网接入方式 Google Cloud PubSub | Apache Flink StreamExecutionEnvironment streamExecEnv StreamExecutionEnvironment.getExecutionEnviron…

Android平台如何实现外部编码后(H.264/H.265)数据实时预览播放

技术背景 我们在对接开发者的时候&#xff0c;遇到这样的诉求&#xff1a;除了正常的RTMP、RTSP直播播放外&#xff0c;有些硬件设备输出编码后&#xff08;H.264/H.265&#xff09;的数据&#xff0c;比如无人机或类似硬件产品&#xff0c;回调出来的H.264/H.265数据&#xf…