Redis入门到通关之Set实现点赞功能

文章目录

    • 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.mzph.cn/news/818144.shtml

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

相关文章

树莓集团参加中国国际消费品博览会,聚焦数字文创产业发展与未来!

2024年4月13日上午&#xff0c;第四届中国国际消费品博览会&#xff08;以下简称“消博会”&#xff09;在海南海口隆重开幕。树莓科技&#xff08;成都&#xff09;集团有限公司董事长王凯、副总裁吴晓平受邀出席本次盛会。 消博会是亚太地区规模最大的消费精品展&#xff0c;…

每日汇评:中东局势升级,黄金重拾 2350 美元,还有可能上涨吗?

周六晚伊朗袭击以色列后&#xff0c;金价因避险而上涨&#xff1b; 美元未能从地缘政治动荡和美国国债收益率上升中受益&#xff1b; 在美国零售销售数据公布之前&#xff0c;金价与 4 小时 RSI指标一起上行&#xff1b; 周一早些时候&#xff0c;金价正在巩固其反弹至 2350 美…

缓存雪崩、缓存击穿、缓存穿透

缓存雪崩、缓存击穿、缓存穿透 文章目录 缓存雪崩、缓存击穿、缓存穿透缓存雪崩缓存击穿缓存穿透 缓存雪崩 当大量缓存数据在同一时间过期&#xff08;失效&#xff09;或者Redis宕机&#xff0c;如果此时有大量的用户请求&#xff0c;都无法在 Redis 中处理&#xff0c;于是全…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…

transformer架构详细详解

一、transformer的贡献 transformer架构的贡献&#xff1a;该架构只使用自注意力机制&#xff0c;没有使用RNN或卷积网络。且可以实现并行计算&#xff0c;加快模型训练速度。 &#xff08;将所有的循环层全部换成&#xff1a;multi-headed self-attention&#xff09; 二、t…

【c语言】声明变量和初始化变量的区别

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

CRMEB 开源/标准版商城系统客服配置教程

管理后台/设置/系统设置/商城配置/客服端配置 有系统客服/拨打电话/跳转链接可选&#xff0c;系统客服为系统自带的客服系统&#xff0c;拨打电话为用户点击联系客服为拨打客服电话的方式&#xff0c;跳转链接为可以跳转自己开发的客服系统或者第三方的客服系统或者企业微信的…

Python学习笔记16 - 函数

函数的创建和调用 函数调用的参数传递 函数的返回值 函数的参数定义 变量的作用域 递归函数 斐波那契数列 总结

腾讯EdgeOne产品测评体验—更快更强更安全,安全我选EdgeOne

腾讯EdgeOne产品测评体验—更快更强更安全&#xff0c;安全我选EdgeOne 王婆的瓜可甜&#xff1f; 自 23 年 8 月份 EdgeOne 开放订阅套餐后&#xff0c;腾讯云用户使用 EdgeOne 来为自己网站进行加速和防护的站点数量&#xff0c;呈现爆发式增长趋势。 金融服务业受到的 Web…

基于51单片机的自行车测速里程码表设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机的自行车测速里程码表设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单资料下载链接&#xff1a; 基于51单片机的自行车测速里程码表设计( proteus仿真程序设计报告原理图讲解视频&#xff09;…

传销?链动2+1模式 合法合规的商业模式!

大家好&#xff0c;我是吴军&#xff0c;来自一家深耕于软件开发领域的公司&#xff0c;担任产品经理的职务。 今天&#xff0c;我希望与大家共同探讨一个具有深刻意义的话题——链动21模式&#xff0c;并探究其如何有效应对用户留存与复购的挑战。 或许有人会说&#xff0c;链…

leetcode代码记录(回文数

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#x…

HTML5 新增语义标签及属性

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍HTML5 新增语义标签及属性&#x1f48e;1 HTML5 新增的块级语义化标签&…

【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左,文本水平的效果

往期回顾 【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-CSDN博客 【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置-CSDN博客【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框-CSDN博客 【QT入门】Qt自定义控件与样式…

hadoop最新详细版安装教程 2024 最新版

文章目录 hadoop安装教程 2024最新版提前准备工作用户配置安装 SSH Server免密登录设置编辑 SSH server 配置文件配置Java环境查看java 版本验证 环境变量设置安装Hadoop下载hadoop解压hadoop查看hadoop 版本hadoop 配置编辑编辑配置文件core-site.xml编辑配置文件hdfs-site.xm…

数字时代的引领者:揭示Facebook的社交创新

随着信息技术的飞速发展&#xff0c;人们的社交方式也发生了巨大的变化。从最初的互联网聊天室到如今的社交网络平台&#xff0c;我们已经见证了数字社交的不断演变和发展。而随着区块链技术的兴起&#xff0c;Web3时代的到来将为数字社交带来全新的可能性和挑战。本文将探讨社…

Vscode搭建STM32 Keil工程:揭秘高效开发的秘密武器,轻松打造专业级嵌入式项目!

Vscode搭建STM32 Keil工程&#xff1a;揭秘高效开发的秘密武器&#xff0c;轻松打造专业级嵌入式项目&#xff01; 前言&#xff1a;Visual Studio Code 是一个支持多种语言的源代码编辑器&#xff0c;具备语法高亮、代码补全、重构等功能&#xff0c;并集成了命令行和Git。适…

16.读取指定路径下的txt文档然后合并内容为一个txt文档。

1.题目要求 分别读取路径为 ./middle/phone/base/1_student_0.txt, ./middle/vr/base/1_teacher.txt, ./nearby/phone/base/1_student_0.txt, ./nearby/vr/base/1_teacher.txt, ./outside/phone/base/1_student_0.txt, ./outside/vr/base/1_teacher.txt 里面的文件&#xff…

一维非线性扩展卡尔曼滤波|matlab的EKF程序|一维例程源代码

为了满足不同条件下的用途,编了一个简单的一维状态量下的EKF,后面准备出UKF和CKF的版本。 使用的系统是非线性的,以体现算法对于非线性系统的性能。(状态方程和观测方程均设计成非线性的) 程序运行截图 程序都在一个m文件里面,粘贴到matlab的编辑器就能运行,如果中文注…

项目——boost搜索引擎

今天我们来写一个boost搜索引擎&#xff01; &#xff08;后续如果有更新&#xff0c;这个博客也会更新&#xff09; gitee连接:boost搜索引擎: boost搜索引擎 首先我们要介绍一下我们这个项目&#xff0c;我们项目的目的是通过我们的搜索引擎能够通过关键字查找到对应的网页…