【redis学习篇1】redis基本常用命令
目录
redis存储数据的模式
常用基本命令
一、set
二、keys pattern
keys +字符串当中携带问号
keys +字符串当中携带*号
keys + 【^+字母】
keys +*
三、exists
四、del
五、expire
5.1 ttl命令
5.2key删除策略
5.2.1惰性删除
5.2.2定期删除
六、type
key的数据类型
string
incr:自增1,仅限数字类型
incrby key +一个具体的数量
decr key
incrbyfloat key +一个值
append
getrange key +start +end
setrange key start+替换的字符串
strlen key
hash
hset key file1 value1
hget key file1
hexists key file1
hdel key file1
hkeys key
list
lpush
lrange
rpush
lpop
lindex
llen key
set
Set的常见操作
SADD命令
SMEMBERS 命令
SISMEMBER 命令
SPOP命令
SRANDMEMBER命令
SMOVE 命令
SREM 命令
zset
一、zset数据类型概述
二、zset的常见操作
redis存储数据的模式
一般情况下,都是以 key value的模式进行存储的。
这种存储的结构类似于哈希表(HashMap);
但是redis不同于哈希表的地方在于:
redis的key只可以是string类型;value可以是其他数据结构。
而HashMap的key和value都可以是任意的数据结构。
对于value的类型,有字符串,哈希表,列表,集合,有序集合等数据结构的类型
而操作这些不同的数据结构,就会用到不同的命令。
常用基本命令
一、set
用法:set 【key】 【value】
在这里面,key和value都是字符串;由用户手动输入key和value的值;

当敲回车之后提示OK说明已经设置成功了;
二、keys pattern
pattern为包含特殊符号的字符串;
keys +字符串当中携带问号
例如:keys h?llo
?只能匹配一个字符;因此返回的字符可能是:hello/hallo等;就是问好只能占据一个字符;
keys +字符串当中携带*号
例如:当输入:keys h*llo的时候
返回的内容可能是:heeeeello;habcdllo也是就*可以代替若干个字母
keys + 【^+字母】
这种情况,是为了排除某个字母设置的。
keys +*
查询当前服务器上面的所有key
三、exists
判定key是否存在
用法:exists +key的名称:返回key存在的个数
假如一个key hello存在,那么 exists + hello就会返回1.
假如一个key hello,hallo存在;那么 exists +hello+hallo 就会返回2.
四、del
删除某个key.
del +key的名称:删除某一个key;删除成功返回1;
del +key1 +key2:删除key1和key2;删除成功返回2;
五、expire
expire的作用是给指定的key设定过期时间;key超出了指定的时间就会自动失效..
expire +key + seconds;设置成功返回1,设置失败返回0.
seconds为key有时效的秒数.
5.1 ttl命令
这个命令是为了判断一个key的剩余过期时间是多少;
ttl+key:返回某个key的剩余过期时间
如果返回-1说明没有设置过期时间;
如果返回-2说明已经过期;
5.2key删除策略
5.2.1惰性删除
key的过期时间到了,但是还没有删除,key还存在;当最后一次访问这个key的时候发现已经过期了就删除;
5.2.2定期删除
定期删除策略,并不一定是在一定时间内删除所有的key,而是每次抽取一部分的key,进行过期时间验证,也就是类似于一个抽查的过程;因为redis是单线程的程序,因此不太好一次遍历所有的key;否则容易造成宕机。
六、type
type+key的类型:返回当前的key的数据类型是什么;

key的数据类型
string
set key value ex +key有效的时间(设置某个key有效时间为10秒)
set key1 vlaue1 NX(某个key1不存在才设置,如果存在就返回nil)
set key2 value2 XX (某个key2存在才设置,存在则设置失败)
get key3:只支持字符串类型的value
incr:自增1,仅限数字类型
令某一个key增加1:
set key 10
incr key
get key:返回11;
incr操作的key如果不存在,那么就当作自增1来表示。
incrby key +一个具体的数量
对于某一个key的value增加10.
decr key
针对某一个数值的key执行-1操作.
incrbyfloat key +一个值
对于某一个key自增对应的一个值
append
set key hello;
append key world;==> key变成了:hello world
getrange key +start +end
getrange helloworld +0+-1
含义:截取这个字符串的从左边开始的第一个元素到从右边开始的第一个元素之间的字符串;
返回:helloworld;
getrange helloworld +1+-2
含义:截取这个字符串的从左边开始的第二个元素到从右边开始的第二个元素之间的字符串;
返回内容:elloworl
setrange key start+替换的字符串
setrange +helloworld + 1 +aaa
含义就是:从左往右的1号元素开始,也就是从字母e开始,往后替换三个字符为aaa.
==>haaaoworld
strlen key
返回的是key的长度==>包含的字符长度
hash

每一个hash类型的key,都是按照这样的结构存储的;在上图当中,key的名称是name1;
在这个key下面有好几个键值对:key-value;
hset key file1 value1
对于key设置:file1+value1
hget key file1
对于key,获取到file1的value是多少
hexists key file1
对于key,判断其中的file1属性是否存在
hdel key file1
删除的是key当中的file1
hkeys key
获取到key当中的所有hash的键;
list
lpush
lpush key 1 2 3 4==>含义是:使用头插法插入:1 2 3 4;因此执行完之后;在这个key当中元素的顺序是: 4,3,2,1
lrange
lrange key start end
这一个命令,相当于对于key做了一个截取操作,start的位置为从左往右的元素下表,end的位置为从从右往左的第一个元素下标;

rpush
rpush key 1 2 3 4
这样,相当于尾插;这个时候key当中的元素存储顺序为:1 2 3 4;
lpop
从list左侧取出元素,相当于头删;
lindex
lindex + key:返回的是下标对应的元素:如果一个list当中存在下面的元素:
1,2,3,4,5,6,7,8;
那么 lindex key 3==>返回的就是元素4;负数同理,从右往左计算索引。
llen key
返回key当中的list个数。
set
类似于JAVA当中的hashset数据结构;元素是无序的,并且不可以重复;
Set的常见操作
二.SET命令
集合的元素,代表 member
SADD命令
往集合当中添加元素,返回添加成功的元素个数。
语法: SADD key member [member,member,...]
SMEMBERS 命令
展示集合当中元素
语法 :SMEMBERS key
SISMEMBER 命令
判断一个元素在不在set当中
语法:SISMEMBER key member
SPOP命令
一般表示从末尾删除元素,但由于set集合是无序的,此处是随机删除COUNT 个元素。
语法:pop key [count]
SRANDMEMBER命令
随机获取集合当中的count个元素。
语法:srandmember key [count]
SMOVE 命令
将一个元素从源set(source)取出,并且放入目标的set集合(destination)
语法:SMOVE SOURCE DESTINATION MEMBER
SREM 命令
将集合set删除元素,一次删除多个个member
语法:srem key member [member ...]
集合之间的操作:交、并、差集
交集命令:SINTER key [key,key,...] 或者 SINTERSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
并集命令:SUNION key [key ,...] 或者 SUNIONSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
差集命令:SDIFF key [key ,...] 或者 SDIFFSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
zset
Redis的zset数据类型,即有序集合(Sorted Set),是一种非常特别且有用的数据结构。以下是对zset数据类型的详细介绍及其常见操作的归纳:
一、zset数据类型概述
-
特性:
- zset是Redis中字符串类型元素的集合,且集合中的成员是唯一的,不允许重复。
- 每个成员都会关联一个double类型的分数(score),这个分数用于对集合中的成员进行排序。分数可以重复。
- 集合中的成员会根据分数从小到大进行排序,如果分数相同,则按照字典顺序排序。
-
底层实现:
- 在Redis的早期版本中,zset的底层数据结构可以是压缩列表(zipList)或跳表(skipList)。
- 当有序集合的元素个数小于一定数量(如128个)且每个元素的值小于一定字节数(如64字节)时,Redis会使用压缩列表作为底层数据结构。
- 当不满足上述条件时,Redis会使用跳表作为底层数据结构。
- 在Redis 7.0及更高版本中,压缩列表数据结构已经被废弃,改由listpack数据结构实现。
二、zset的常见操作
-
添加元素:
- 使用
ZADD命令向zset中添加一个或多个元素,并指定它们的分数。 - 语法:
ZADD key score1 member1 [score2 member2 ...]
- 使用
-
获取元素:
- 使用
ZRANGE命令获取zset中指定排名范围内的元素,可以选择是否同时返回分数。 - 语法:
ZRANGE key start stop [WITHSCORES] - 类似地,
ZREVRANGE命令可以获取zset中指定排名范围内的元素,但按分数从高到低排序。
- 使用
-
获取元素数量:
- 使用
ZCARD命令获取zset中元素的数量。 - 语法:
ZCARD key
- 使用
-
获取元素排名:
- 使用
ZRANK命令获取元素在zset中的排名(从0开始,按分数从小到大排序)。 - 语法:
ZRANK key member - 类似地,
ZREVRANK命令可以获取元素在zset中的排名,但按分数从高到低排序。
- 使用
-
获取元素分数:
- 使用
ZSCORE命令获取元素的分数。 - 语法:
ZSCORE key member
- 使用
-
删除元素:
- 使用
ZREM命令从zset中删除一个或多个元素。 - 语法:
ZREM key member [member ...]
- 使用
-
为元素分数增加增量:
- 使用
ZINCRBY命令为元素的分数加上指定的增量。 - 语法:
ZINCRBY key increment member
- 使用
-
按分数范围获取元素:
- 使用
ZRANGEBYSCORE命令获取zset中分数在指定范围内的元素,可以选择是否同时返回分数。 - 语法:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] - 类似地,
ZREVRANGEBYSCORE命令可以获取zset中分数在指定范围内的元素,但按分数从高到低排序。
- 使用
-
按分数范围删除元素:
- 使用
ZREMRANGEBYSCORE命令删除zset中分数在指定范围内的元素。 - 语法:
ZREMRANGEBYSCORE key min max
- 使用
-
按排名范围删除元素:
- 使用
ZREMRANGEBYRANK命令删除zset中指定排名范围内的元素。 - 语法:
ZREMRANGEBYRANK key start stop
- 使用
-
交集和并集操作:
- 使用
ZINTERSTORE命令计算多个zset的交集,并将结果存储在新的zset中。可以指定每个zset的权重和聚合方式。 - 语法:
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max] - 使用
ZUNIONSTORE命令计算多个zset的并集,并将结果存储在新的zset中。同样可以指定权重和聚合方式。
- 使用
相关文章:
【redis学习篇1】redis基本常用命令
目录 redis存储数据的模式 常用基本命令 一、set 二、keys pattern keys 字符串当中携带问号 keys 字符串当中携带*号 keys 【^字母】 keys * 三、exists 四、del 五、expire 5.1 ttl命令 5.2key删除策略 5.2.1惰性删除 5.2.2定期删除 六、type key的数据类型…...
量子计算:颠覆未来计算的革命性技术
量子计算:颠覆未来计算的革命性技术 量子计算作为下一代颠覆性技术,正在引领计算领域的重大变革。与传统计算机基于比特的二进制运算不同,量子计算通过量子比特(qubits)在叠加态和纠缠态下实现并行计算,能…...
ctfshow-web入门(信息收集,持续更新中。。)
写在之前:近期打了个比赛,备受打击,入手了vip账号进修,加油! 文章目录 ctfshow-web1查看源代码ctfshow-web2burp抓包ctfshow-web3burp抓包ctfshow-web4访问robots.txtctfshow-web5dirscarch扫描PHPS文件泄露ctfshow-web6dirscarch扫描ctfshow-web7dirscarch扫描ctfshow-w…...
蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC
蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位,通过硬件过采样扩展到16位,模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道…...
李飞飞谈AI+3D发展:3D/4D AI将成为下一个重要前沿
人工智能(AI)的发展已经深刻改变了我们的世界,从简单的图像识别到复杂的自然语言处理,再到如今正在兴起的生成式模型。在这个过程中,李飞飞教授认为,3D/4D AI技术将是推动下一波变革的关键力量。以下根据她的观点整理了AI发展历程中的关键里程碑以及对3D/4D AI未来发展的…...
centos72009源码编译R语言
./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Pconnect -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Dhadoop.version3.4.0 -Pkubernetes spark3.5.3 源码版本 ./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Pconnect -P…...
初识算法 · 双指针(4)
目录 前言: 复写零 题目解析 算法原理 算法编写 四数之和 题目解析 算法原理 算法编写 前言: 本文是双指针算法的最后一文,以复写零和四数之和作为结束,介绍方式同样是题目解析,算法原理,算法编写…...
java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码
java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码...
matlab 判断多组数据的分布是否一致,可以使用什么方法?
在 MATLAB 中,可以使用以下几种方法来判断多组数据的分布是否一致: 1. Kolmogorov-Smirnov 检验 (K-S Test) K-S 检验是一种非参数检验,用于比较两组数据是否来自相同的分布。MATLAB 提供了 kstest2 函数来进行这种检验。该方法适用于连续分…...
jenkins配置eureka、nacos发布优雅上下线服务
eureka发布期间优雅上下线 1、编写eureka下线脚本 vim biz_out_of_service-eureka.pyimport sys import requests#服务名,脚本第一个参数 APP_NAMEsys.argv[1] # 需要置为OUT_OF_SERVICE的服务实例的ID,脚本第二个参数 INSTANCE_IDsys.argv[2]# Eureka…...
【JAVA开源】基于Vue和SpringBoot的周边产品销售网站
本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
【C++差分数组】2381. 字母移位 II|1793
本文涉及知识点 C差分数组 LeetCode2381. 字母移位 II 给你一个小写英文字母组成的字符串 s 和一个二维整数数组 shifts ,其中 shifts[i] [starti, endi, directioni] 。对于每个 i ,将 s 中从下标 starti 到下标 endi (两者都包含&#…...
【pytorch】范数的计算
近日在看沐神的《动手学深度学习》,其中提到了范数这一数学概念,感觉很陌生,参考ChatGPT补一下知识。 目录 范数示例 1: 计算向量的 L2 范数(欧几里得范数)示例 2: 计算矩阵的 Frobenius 范数示例 3: 计算向量的 L1 范数(曼哈顿距离)曼哈顿范数的定义曼哈顿范数的计算示…...
MATLAB|基于多主体主从博弈的区域综合能源系统低碳经济优化调度
目录 主要内容 程序亮点: 模型研究 一、综合能源模型 二、主从博弈框架 部分代码 结果一览 下载链接 主要内容 程序参考文献《基于多主体主从博弈的区域综合能源系统低碳经济优化调度》,采用了区域综合能源系统多主体博弈协同优化方…...
Django 后端数据传给前端
Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb() Step7 简单创建两…...
elasticsearch 写入新数据测试(二)
背景:elasticsearch单个node节点写入数据-CSDN博客 需要设置密码才能作为外部调用,不设置我不会用。设置方法见上一篇。 设置密码出现如下问题: Unexpected response code [503] from calling PUT http://172.19.0.1:9200/_security/user/apm_system/_password?pretty …...
android navigation 用法详细使用
Navigation 的关键概念 1、Navigation Graph: 定义了应用内的所有导航目的地以及它们之间的连接。 2、NavHost: 一个 UI 元素,用于承载当前的导航目的地。 3、NavController: 管理目的地之间的导航。 4、Destination: 导航图中的一个节点,用户导航到该节…...
uni-app在线预览pdf
这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹,将解压文件放进 pdf 文件…...
SpringBoot--为什么Controller是串行的?怎样才能并行?
原文网址:SpringBoot--为什么Controller是串行的?怎样才能并行?-CSDN博客 简介 本文介绍SpringBoot为什么Controller是串行的?在什么场景下才能并行执行? 大家都知道,SpringBoot的Controller按理是并行执…...
C/C++ 中的未定义行为(Undefined Behavior, UB)
0. 简介 在 C/C 编程中,理解未定义行为(UB)及其相关概念至关重要。本文将对未定义行为进行详细解析,并通过实例展示其影响与处理方法。 1. 概念辨析 在 C/C 中,未定义行为容易与以下两个概念混淆: 1.1 …...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
