Redis常用命令合集【二】

在合集【一】中已经介绍了redis中String类型和Hash类型,接下来就继续介绍剩下的List、Set、SortedSet类型。

1.List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序

  • 元素可以重复

  • 插入和删除快

  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element ... :向列表左侧插入一个或多个元素

  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

  • RPUSH key element ... :向列表右侧插入一个或多个元素

  • RPOP key:移除并返回列表右侧的第一个元素

  • LRANGE key star end:返回一段角标范围内的所有元素

  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

示例:

# 1. LPUSH(左侧插入元素)
LPUSH comments:post123 "Good post!" "Nice!"     # 从左侧插入两个元素,列表顺序变为 ["Nice!", "Good post!"]
LPUSH comments:post123 "First comment"          # 继续左侧插入,变为 ["First comment", "Nice!", "Good post!"]
​
# 2. LPOP(左侧移除元素)
LPOP comments:post123                           # 返回 "First comment",列表剩余 ["Nice!", "Good post!"]
LPOP empty_list                                 # 返回 (nil)(空列表无元素可移除)
​
# 3. RPUSH(右侧插入元素)
RPUSH comments:post123 "Thanks!"                # 从右侧插入,列表变为 ["Nice!", "Good post!", "Thanks!"]
RPUSH comments:post123 "Last one" "Final"       # 右侧批量插入两个元素,变为 ["Nice!", "Good post!", "Thanks!", "Last one", "Final"]
​
# 4. RPOP(右侧移除元素)
RPOP comments:post123                           # 返回 "Final",列表剩余 ["Nice!", "Good post!", "Thanks!", "Last one"]
RPOP comments:post123                           # 返回 "Last one",列表剩余 ["Nice!", "Good post!", "Thanks!"]
​
# 5. LRANGE(范围查询)
LRANGE comments:post123 0 -1                    # 返回列表所有元素:1) "Nice!" 2) "Good post!" 3) "Thanks!"
LRANGE comments:post123 1 2                     # 返回索引1到2的元素:1) "Good post!" 2) "Thanks!"
LRANGE comments:post123 5 10                    # 返回空列表(超出范围)
​
# 6. BLPOP/BRPOP(阻塞式弹出)
# 窗口1执行(阻塞等待):
BLPOP new_tasks 30                              # 等待30秒,若new_tasks列表无元素,则超时返回nil
# 窗口2插入元素后(立即返回):
LPUSH new_tasks "task1"                         # 窗口1立即返回:1) "new_tasks" 2) "task1"

2.Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

Set的常见命令有:

  • SADD key member ... :向set中添加一个或多个元素

  • SREM key member ... : 移除set中的指定元素

  • SCARD key: 返回set中元素的个数

  • SISMEMBER key member:判断一个元素是否存在于set中

  • SMEMBERS:获取set中的所有元素

  • SINTER key1 key2 ... :求key1与key2的交集

示例:

# 1. SADD(添加元素到集合)
SADD user:A:followings "user:B" "user:C" "user:D"  # 添加3个关注用户(返回 3)
SADD user:A:followings "user:B"                   # 重复元素不添加(返回 0)
SADD user:B:followers "user:A" "user:C" "user:E"  # 设置用户B的粉丝集合
​
# 2. SREM(移除集合元素)
SREM user:A:followings "user:D"                   # 移除一个元素(返回 1)
SREM user:A:followings "user:X"                   # 移除不存在的元素(返回 0)
​
# 3. SCARD(获取元素数量)
SCARD user:A:followings                           # 返回 2(当前元素:"user:B", "user:C")
SCARD non_existing_set                            # 返回 0
​
# 4. SISMEMBER(判断元素是否存在)
SISMEMBER user:A:followings "user:B"              # 返回 1(存在)
SISMEMBER user:A:followings "user:E"              # 返回 0(不存在)
​
# 5. SMEMBERS(获取所有元素)
SMEMBERS user:A:followings                        # 返回 1) "user:B" 2) "user:C"(无序)
SMEMBERS user:B:followers                         # 返回 1) "user:A" 2) "user:C" 3) "user:E"
​
# 6. SINTER(求交集)
SINTER user:A:followings user:B:followers         # 返回共同元素:1) "user:B"被移除后,交集为 "user:C"

例如两个集合:s1和s2:

求交集:SINTER s1 s2

求s1与s2的不同:SDIFF s1 s2

练习:

  1. 将下列数据用Redis的Set集合来存储:

  • 张三的好友有:李四、王五、赵六

  • 李四的好友有:王五、麻子、二狗

  1. 利用Set的命令实现下列功能:

  • 计算张三的好友有几人

  • 计算张三和李四有哪些共同好友

  • 查询哪些人是张三的好友却不是李四的好友

  • 查询张三和李四的好友总共有哪些人

  • 判断李四是否是张三的好友

  • 判断张三是否是李四的好友

  • 将李四从张三的好友列表中移除

# ===== 1. 数据存储 =====
# 存储张三的好友列表
SADD zhangsan:friends "李四" "王五" "赵六"
# 存储李四的好友列表
SADD lisi:friends "王五" "麻子" "二狗"
​
# ===== 2. 功能实现与验证 =====
# 2.1 计算张三的好友数量
SCARD zhangsan:friends          # 预期返回 3
​
# 2.2 计算张三和李四的共同好友
SINTER zhangsan:friends lisi:friends  # 预期返回 1) "王五"
​
# 2.3 查询张三独有好友(张三有但李四无)
SDIFF zhangsan:friends lisi:friends   # 预期返回 1) "李四" 2) "赵六"
​
# 2.4 查询两人所有好友(去重合并)
SUNION zhangsan:friends lisi:friends  # 预期返回 5 个元素:李四、王五、赵六、麻子、二狗
​
# 2.5 判断李四是否是张三的好友
SISMEMBER zhangsan:friends "李四"     # 预期返回 1(存在)
​
# 2.6 判断张三是否是李四的好友
SISMEMBER lisi:friends "张三"         # 预期返回 0(不存在)
​
# 2.7 将李四从张三的好友列表中移除
SREM zhangsan:friends "李四"         # 预期返回 1(成功移除)

3.SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

  • 可排序

  • 元素不重复

  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

  • ZREM key member:删除sorted set中的一个指定元素

  • ZSCORE key member : 获取sorted set中的指定元素的score值

  • ZRANK key member:获取sorted set 中的指定元素的排名

  • ZCARD key:获取sorted set中的元素个数

  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

练习题:

将班级的下列学生得分存入Redis的SortedSet中:

Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76

并实现下列功能:

  • 删除Tom同学

  • 获取Amy同学的分数

  • 获取Rose同学的排名

  • 查询80分以下有几个学生

  • 给Amy同学加2分

  • 查出成绩前3名的同学

  • 查出成绩80分以下的所有同学

# 将学生分数存入SortedSet
ZADD scores 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
​
# 删除Tom同学
ZREM scores Tom
​
# 获取Amy同学的分数
ZSCORE scores Amy
​
# 获取Rose同学的排名(按分数从高到低排名,0表示第一名)
ZREVRANK scores Rose
​
# 查询80分以下学生数量
ZCOUNT scores -inf (80
​
# 给Amy同学加2分
ZINCRBY scores 2 Amy
​
# 查出成绩前3名同学(带分数)
ZREVRANGE scores 0 2 WITHSCORES
​
# 查出80分以下所有同学(带分数)
ZRANGEBYSCORE scores -inf (80 WITHSCORES

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

挑战用Cursor实现“Cursor“的第二天

挑战用Cursor实现"Cursor"的第二天 项目地址 :https://github.com/Ez4Sterben/Ez4Code/tree/master 省流(困了想睡觉了,就不多描述了): 干了1小时,文件树没问题了,代码能编辑了&…

已解决IDEA无法输入中文问题(亲测有效)

前言 在使用IDEA的时候,比如我们想写个注释,可能不经意间,输入法就无法输入中文了,但是在其他地方打字,输入法仍然能够正常工作。这是什么原因呢,这篇文章带你解决这个问题! 快捷键 如果你的I…

阿里云上的网站配置HTTPS

1. 获取SSL证书 创建证书 下载证书 下载 上传 .key .pem 文件 到 阿里云服务器 /etc/nginx/ssl nginx.conf 配置 server { listen 443 ssl; server_name yuming; ssl_certificate /etc/nginx/ssl/*.pem; ssl_certificate_key /etc/nginx/ssl/*.key;

在Unity中用简单工厂模式模拟原神中的元素反应

1. 第一步创建3个脚本Factory(反应工厂),Reactions(具体反应),FactoryText(测试反应的脚本) 2.编写工厂脚本 using UnityEngine;// 定义一个元素反应的接口,所有具体的元…

数组和指针常见笔试题(深度剖析)

下边我来讲一下常见的面试题&#xff0c;过程很详细放心观看 #include<stdio.h>#include <string.h>int main() {char arr[] { a,b,c,d,e,f };printf("%d\n", strlen(arr));//随机值&#xff0c;因为strlen是遇到斜杠\0结束&#xff0c;统计\0之前的字符…

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…

实战开发coze应用-姓氏头像生成器(上)

​欢迎关注【AI技术开发者】 上次&#xff0c;我们开发了一个对话形式的头像生成器智能体&#xff08;Agents&#xff09;&#xff0c;广受大家欢迎。 同时也接收到一些用户的反馈&#xff0c;生成前无法看到头像样式、初次使用不会用等等。 对此&#xff0c;我准备使用Coze开…

达梦:用户和模式

目录标题 数据库管理系统与用户权限管理**四权分立****用户管理与权限划分****用户管理界面与权限控制****用户创建与管理****实操**1. **默认创建用户与模式**&#xff1a;2. **用户权限和角色分配**&#xff1a;3. **命令行管理用户与角色**&#xff1a;4. 模式也可以创建 **…

【C++】类与对象全面剖析(尾卷)(构造深化、类型转换、static成员特性及内部类与匿名对象)

文章目录 一、再探构造函数二、隐式类型转换三、类中的静态成员1.静态成员变量2.静态成员函数 四、友元函数与友元类五、内部类六、匿名对象 一、再探构造函数 在之前的文章中我们大致将构造函数讲完了&#xff0c;但是还有一个比较重要的知识点当时没有讲到&#xff0c;因为如…

【部署优化篇四】《DeepSeek移动端优化:CoreML/TFLite实战对比》

手机里的AI助手能秒速回答你的问题,游戏人物能实时追踪你的表情变化,这些酷炫功能的背后都离不开移动端机器学习框架的支撑。今天我们就来撕开两个当红炸子鸡框架CoreML和TFLite的神秘面纱,看看它们在模型优化这件事上到底藏着哪些独门绝技。 一、移动端优化的生存法则 在…

SAM C++ TensorRT(实时图像分割)

SPEED SAM C TENSORRT &#x1f310; 1、概述 用于SAM&#xff08;segment anything model分割一切模型&#xff09;的TensorRT和CUDA优化的高表现C实现&#xff0c;特别适用于实时图像分割任务。 &#x1f4e2; 更新 模型转换&#xff1a;从ONNX模型构建TensorRT引擎以加速…

鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说&#xff0c;ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风&#xff0c;我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

用 Biome 替代 ESLint 和 Prettier

简介 ESLint 和 Prettier ESLint&#xff1a;代码质量检查工具&#xff0c;确保代码风格一致与无错误 Prettier&#xff1a;代码格式化工具&#xff0c;自动美化代码布局 所以&#xff1a;ESLint Prettier 能自动美化代码、自动检查代码错误的工具 Biome Biome&#xff1a;…

cluster-smi 命令详解

cluster-smi 是一个用于管理和监控集群中 GPU 的命令行工具&#xff0c;通常用于显示集群中每个节点&#xff08;如 GPU 服务器&#xff09;上的 GPU 使用情况。该命令是类似于 nvidia-smi 的工具&#xff0c;但它支持在集群环境中对多个节点进行管理和监控。 使用 cluster-sm…

Cursor使用及搭建网络环境

一、Cursor使用 1、注册、登录、下载 【CursorClaude】 2、登录后 3、破解方式 第一种方式&#xff1a; 14天到期后用其他邮箱重新注册&#xff0c;网易邮箱可以无限注册&#xff0c;把cursor中之前登录的账号退出&#xff0c;再登录新的账号。 第二种方式&#xff1a; 因为…

聚焦地灾防治,助力城市地质安全风险防控

城市是人类社会发展的重要载体&#xff0c;承载着经济繁荣、文化交流和人口聚集等重要功能。然而&#xff0c;由于城市建设过程中地质条件复杂&#xff0c;地质灾害风险隐患存在&#xff0c;城市地质安全等问题日益突出&#xff0c;引起人们的广泛关注。为保障城市发展的安全和…

VsCode美化 Json

1.扩展中输入:pretty json 2. &#xff08;CtrlA&#xff09;选择Json文本 示例:{ "name" : "runoob" , "alexa" :10000, "site" : null , "sites" :[ "Google" , "Runoob" , "T…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师&#xff0c;会一点浅薄的前端三大件&#xf…

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…