# Redis 入门到精通(二)通用指令

Redis 入门到精通(二)通用指令

一、redis 通用指令-key 基本操作

1、key 特征

key是一个字符串,通过key获取redis中保存的数据。

2、key 应该设计哪些操作?

对于 key 自身状态的相关操作,例如:删除,判定存在,获取类型等。
对于 key 有效性控制相关操作,例如:有效期设定,判定是否有效,有效状态的切换等。
对于 key 快速查询操作,例如:按指定策略查询 key。

3、key 基本操作

# 删除指定key
del key#获取key是否存在(返回1是存在此key值,返回0是不存在此key)
exists key # 获取key的类型
type key 

4、redis 实际操作–key 基本操作

# 先创建5种类型的数据
127.0.0.1:6379> set str str
OK
127.0.0.1:6379> hset hash1 hash1 hash1
(integer) 1
127.0.0.1:6379> lpush list1 list1
(integer) 1
127.0.0.1:6379> sadd set1 set1
(integer) 1
127.0.0.1:6379> zadd zset1 1 zset1
(integer) 1# 获取key的类型
127.0.0.1:6379> type zset1
zset
127.0.0.1:6379> type str
string
127.0.0.1:6379> type hash1
hash
127.0.0.1:6379> type list1
list
127.0.0.1:6379> type set1
set# 删除指定key127.0.0.1:6379> del zset1
(integer) 1
127.0.0.1:6379> del zset1
(integer) 0# 获取key是否存在(返回1是存在此key值,返回0是不存在此key)
127.0.0.1:6379> exists str
(integer) 1
127.0.0.1:6379> exists zset1
(integer) 0
127.0.0.1:6379>

二、redis 通用指令–key 时效性控制操作

1、key 扩展操作(时效性控制)


# 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp# 获取key的有效时间
ttl key
pttl key# 切换key从时效性转换为永久性
persist key

2、redis 实际操作–key 时效性控制操作


# 创建数据 
127.0.0.1:6379> set str str
OK
127.0.0.1:6379> lpush list1 list1
(integer) 2
127.0.0.1:6379> lpush list2 list2
(integer) 1# 设置 str 时效3127.0.0.1:6379> expire str 3
(integer) 1
127.0.0.1:6379> get str
"str"
127.0.0.1:6379> get str
(nil)# 设置 list1 时效30127.0.0.1:6379> expire list1 30
(integer) 1# 获取 list1 的有效时间(返回-2代表不存在此key,返回-1代表此key还存在)
127.0.0.1:6379> ttl list1
(integer) 21
127.0.0.1:6379> ttl list1
(integer) 12
127.0.0.1:6379> ttl str
(integer) -2
127.0.0.1:6379> ttl list1
(integer) -2
127.0.0.1:6379> ttl list2
(integer) -1# 持久化list2失败(因为list2不具备时效性)
127.0.0.1:6379> persist list2
(integer) 0# 设置list2时效性为60秒)
127.0.0.1:6379> expire list2 60
(integer) 1# 查看 list2 时效性
127.0.0.1:6379> ttl list2
(integer) 51# 持久化list2成功
127.0.0.1:6379> persist list2
(integer) 1
127.0.0.1:6379> ttl list2
(integer) -1# 切换 list2 的 key 从时效性转换为永久性,成功。
127.0.0.1:6379> persist str
(integer) 0

三、redis 通用指令–key 查询操作

1、key 扩展操作(查询模式)

# 查询key
keys pattern

2、查询模式规则

*	匹配任意数量的任意符号
? 	配合一个任意符号
[]	匹配一个指定符号
keys *			查询所有。
keys it*		查询所有以it开头。
keys *heima		查询所有以heima结尾。
keys ??heima	查询所有前面两个字符任意,后面以heima结尾。
keys user:?		查询所有以user:开头,最后一个字符任意。
keys u[st]er:1	查询所有以u开头,以er:1结尾,中间包含一个字母,s或t。

3、redis 实际操作–key 扩展操作(查询模式)


# 查询所有 
127.0.0.1:6379> keys *
1) "list2"
2) "hash1"
3) "set1"# 创建数据 
127.0.0.1:6379> set name itheima
OK
127.0.0.1:6379> set itheima name
OK# 查询所有 
127.0.0.1:6379> keys *
1) "list2"
2) "name"
3) "hash1"
4) "set1"
5) "itheima"# 查询所有以it开头
127.0.0.1:6379> keys it*
1) "itheima"# 查询所有以s开头
127.0.0.1:6379> keys s*
1) "set1"# 创建数据 
127.0.0.1:6379> set str str
OK
127.0.0.1:6379> set smr smr
OK# 查询i后面任意字符并以heima结尾的key
127.0.0.1:6379> keys i?heima
1) "itheima"# 查询前面是s后面是r,中间是任意字符的key
127.0.0.1:6379> keys s?r
1) "str"
2) "smr"# 查询有4个任意字符的key
127.0.0.1:6379> keys ????
1) "name"
2) "set1"# 创建数据 
127.0.0.1:6379> set nbme nbme
OK
127.0.0.1:6379> set nwme nwme
OK# 查询所有以n开头,以me结尾,中间包含一个字母,a或w,的key
127.0.0.1:6379> keys n[aw]me
1) "name"
2) "nwme"
127.0.0.1:6379> keys *
1) "str"
2) "hash1"
3) "name"
4) "list2"
5) "nbme"
6) "nwme"
7) "smr"
8) "set1"
9) "itheima"
127.0.0.1:6379>

四、redis 通用指令–key 其他操作

1、key 其他操作


# 为key改名
rename key newkey
renamenx key newkey# 对所有key排序
sort# 其他key通用操作
help @generic

2、redis 实际操作–key 其他操作


# 创建数据 
127.0.0.1:6379> set str str
OK
127.0.0.1:6379> set str1 str1
OK
127.0.0.1:6379> set str2 str2
OK# 修改 str 为 str3 
127.0.0.1:6379> rename str str3# 查询所有 key 
127.0.0.1:6379> keys *
1) "str3"
2) "str2"
3) "str1"# 获取 str 的 value (不存在,key为空)
127.0.0.1:6379> get str
(nil)# 修改 str3 为 str2(原有str2将覆盖)
127.0.0.1:6379> rename str3 str2
OK# 只有2个key(原来的 str2 已经不存在了)
127.0.0.1:6379> keys *
1) "str2"
2) "str1"# 获取str2的value发现是str(而不是str2)
127.0.0.1:6379> get str2
"str"# 使用 renamenx 修改 key 名,不会覆盖修改,如果key存在修改失败(返回0),key不存在修改成功(返回1)。
127.0.0.1:6379> renamenx str1 str2
(integer) 0
127.0.0.1:6379> renamenx str1 str3
(integer) 1127.0.0.1:6379> keys *
1) "str3"
2) "str2"
127.0.0.1:6379>

3、redis 实际操作–key 其他操作:排序


# 查询排序帮助
127.0.0.1:6379> help sortSORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [AS
C|DESC] [ALPHA] [STORE destination]summary: Sort the elements in a list, set or sorted setsince: 1.0.0group: generic# 查询其他key通用操作
127.0.0.1:6379> help @generic# 创建数据 
127.0.0.1:6379> lpush aa 123
(integer) 1
127.0.0.1:6379> lpush aa 321
(integer) 2
127.0.0.1:6379> lpush aa 222
(integer) 3
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"# 排序(从小到大),不改变原数据
127.0.0.1:6379> sort aa
1) "123"
2) "222"
3) "321"# 查看原数据
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"# 排序(从大到小),不改变原数据
127.0.0.1:6379> sort aa desc
1) "321"
2) "222"
3) "123"# 查看原数据
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"
127.0.0.1:6379>

五、redis 通用指令–db 基本操作

1、数据库 key 的重复问题

  • key 是由程序员定义的。
  • redis 在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的 key。
  • 数据不区分种类、类别混杂在一起,极易出现重复或冲突。

2、解决方案

  • redis 为每个服务提供有16个数据库,编号从0到15。
  • 每个数据库之间的数据相互独立。

redis通用指令-db基本操作.png

3、db 基本操作


# 切换数据库
select index# 其他操作
quit
ping
echo message

4、redis 实际操作–db 基本操作


# 切换数据库(0-15127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 5
OK
127.0.0.1:6379[5]> select 8
OK
127.0.0.1:6379[8]> select 15
OK
127.0.0.1:6379[15]> select 20
(error) ERR invalid DB index
127.0.0.1:6379> select 0
OK
127.0.0.1:6379># echo 回显字符
127.0.0.1:6379> echo redis
"redis"
127.0.0.1:6379> echo abc
"abc"
127.0.0.1:6379> echo 123# ping 服务器是否处于连通状态(连通时回显字符,无连通将等待无回显)
127.0.0.1:6379> ping aaa
"aaa"
127.0.0.1:6379> ping bbb
"bbb"# 断开服务端后,客户端一直处于等待状态,需要重新启动redis服务端,连接客户端
127.0.0.1:6379> ping ccc
......# 退出客户端 
127.0.0.1:6379> quit

六、redis 通用指令–db 其他操作

1、db 其他操作:数据移动 move key db 和数据清除操作。


# redis db 数据库相关操作:数据移动 
move key db# 数据清除
dbsize
flushdb
flushall

2、redis 实际操作–db 其他操作:数据移动 move key db


# 创建数据(在库027.0.0.1:6379> set name redis1
K# 切换到库1
27.0.0.1:6379> select 1
K# 获取 name 值(库1无name) 
27.0.0.1:6379[1]> get name
nil)# 切换到库0
27.0.0.1:6379[1]> select 0
K# 获取 name 值(库0中有name) 
27.0.0.1:6379> get name
redis1"# (在库0中操作)redis db 数据库相关操作:数据移动(移动 name 到库127.0.0.1:6379> move name 1
integer) 1# 切换到库1
27.0.0.1:6379> select 1
K# 获取 name 值(库1已经有name,相当于从库0剪切到库127.0.0.1:6379[1]> get name
redis1"# 切换到库0
27.0.0.1:6379[1]> select 0
K# 库0中已经没有地name
27.0.0.1:6379> get name
nil)# 移动库0中name到库2,操作失败(因为库0中已经没有name)
27.0.0.1:6379> move name 2
integer) 0# 在库0中重新创建name值为redis2
27.0.0.1:6379> set name redis2
K# 再次在库0中,移动name到库1,操作失败(因为库1中也有name)
27.0.0.1:6379> move name 1
integer) 0
27.0.0.1:6379>

3、redis 实际操作–db 其他操作:数据清除操作


# 在库0显示所有key
127.0.0.1:6379> keys *
1) "str2"
2) "str3"
3) "name"
4) "aa"# 切换到库1,显示所有key
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"# 切换到库2,显示所有key
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> keys *
(empty list or set)# 在库2,创建name
127.0.0.1:6379[2]> set name haha
OK
127.0.0.1:6379[2]> keys *
1) "name"# 在库2,清库(只清除了库2中所有数据)
127.0.0.1:6379[2]> flushdb
OK
127.0.0.1:6379[2]> keys *
(empty list or set)
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "str2"
2) "str3"
3) "name"
4) "aa"# 在库0,清库(flushall清除了所有库中所有数据,慎用,一般不用)
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> keys *
(empty list or set)
127.0.0.1:6379[2]># 统计当前库中有多少key
127.0.0.1:6379[2]> dbsize
(integer) 0
127.0.0.1:6379[2]> set name abc
OK
127.0.0.1:6379[2]> dbsize
(integer) 1
127.0.0.1:6379[2]> set name2 abc2
OK
127.0.0.1:6379[2]> dbsize
(integer) 2
127.0.0.1:6379[2]> set name3 abc3
OK
127.0.0.1:6379[2]> dbsize
(integer) 3
127.0.0.1:6379[2]>

上一节关联链接请点击:
# Redis 入门到精通(一)数据类型(4)

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

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

相关文章

企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP

文章目录 需求实验修改dhcp虚拟机配置文件测试PC获取IP查看user-bind 需求 (vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP 实验 前期配置: https://blog.csdn.net/xzzteach/article/details/140406092 后续配置均在以上配置的前…

keepalive和haproxy

1、keepalive 1.1概念 调度器的高可用 vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器 在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器 1、配优先级 …

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接,我当时快速看了一…

shell脚本之if/case语句

一、条件测试 1、1 返回码 $? $? :返回码,用来判断命令或者脚本是否执行成功。 0 :表示true ,成功;非0 则表示flase ,失败。 1、2 test命令 可以进行条件测试,然后根据返回值来判断条件是否成立 -e…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

4、linux相关基础知识

1、gcc编译过程 .c通过编译生成.o文件,.out目标文件进过链接生成.so库文件。 2、在C中可以使用system(("mkdir -p "path).c_str())创建目录。c_str()把string转化为c字符串,便于system命令识别,system命令会新启动一个进程来创建文…

移动硬盘有盘符打不开:深度解析与高效恢复指南

在数字化信息爆炸的今天,移动硬盘作为便捷的数据存储与传输工具,其重要性不言而喻。然而,当您遇到移动硬盘有盘符却无法正常打开的情况时,无疑会给您的工作和生活带来不小的困扰。本文将深入探讨移动硬盘有盘符打不开的原因&#…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁,这一次抛出了“王炸”级的资产交易。 7月3日,《多肽链》获得一则足以引爆国内医疗设备行业的投资信息:被东软集团视为核心资产、掌上明珠的东软医疗,成功引入通用技术集团资本有限公司与中国国有…

BI佐罗,居然抄袭洗稿我的文章

必须曝光此博主不当行径。 4月2日这天发表的原创文章:BI报表系统建设10大坑,因为都是切身的实际项目经验总结,获得了很多人的关注。 我觉得写文章要写的是亲身、真的做过的专业的项目经验,而不是信口开河随口忽悠。 如果有些博…

Fancybox: 号称世界上最流行的灯箱脚本!这款“花盒“为什么与众不同?

今天要分享的是一个灯箱脚本库:Fancybox。最近了不起刚好用到它。这里就和大家分享下。 简介 Fancybox 是终极的 JavaScript 灯箱替代品,为多媒体显示中的优质用户体验设定了标准。支持图像、视频、地图、内联内容、iframe 和任何其他 HTML 内容。 此…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库,它可以用来处理流式数据,进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候,如果使用nn.Sequential()将几个有紧密联系的运算组成一个序列,可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential()的用法,搭建以下测试网络&…

数字电路-建立时间和保持时间详解

对于数字系统而言,建立时间(setup time)和保持时间(hold time)是数字电路时序的基础。数字电路系统的稳定性,基本取决于时序是否满足建立时间和保持时间。我自己在初学时一度很难理解清楚他们的概念&#x…

基于JAVA+SpringBoot+Vue+uniApp小程序的心理健康测试平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 该系统由三个核心角色…

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机,把新网卡插上,我用淘宝遥现金搞了个红包,花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有,确实挺丐的。稍后测下速度看…

移动硬盘有盘符打不开的全方位解决方案

一、现象描述:移动硬盘有盘符却无法访问 在日常的数据存储与传输中,移动硬盘无疑扮演着举足轻重的角色。然而,不少用户可能会遇到这样一个令人头疼的问题:移动硬盘在连接电脑后,虽然能正常显示盘符,但双击…

【算法】单调队列

一、什么是单调队列 单调队列是一种数据结构,其特点是队列中的元素始终保持单调递增或递减,主要用于维护队列中的最小值或最大值。 不同于普通队列只能从队头出队、队尾入队,单调队列为了维护其特征,还允许从队尾出队 不管怎么…

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令🩷zip/unzip指令🩷tar指令🩷bc指令🩷uname指令🩷shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理🩷文件访问者的分类&#…