03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)

Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令,对 Key 的操作命令,对 Value 的操作命令。


3.1 Redis 基本命令

一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入

首先通过 redis-cli 命令进入到 Redis 命令行客户端,然后再运行下面的命令。

3.1.1 心跳命令 ping

键入 ping 命令,会看到 PONG 响应,则说明该客户端与 Redis 的连接是正常的。该命令亦称为心跳命令。
在这里插入图片描述

3.1.2 读写键值命令 set/get

set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。

关于更多 set 与 get 命令格式,后面会详细学习。

3.1.3 切换数据库 select

默认使用的是 0 号 DB,可以通过 select db 索引来切换 DB。例如,如下命令会切换到DB3

select 3

3.1.4 查看 key 数量 dbsize

在这里插入图片描述

3.1.5 删库跑路

flushdb删除当前库所有数据
flushall删除所有库的所有的信息

3.1.6 退出redis自带命令行客户端

exit / quit


3.2 Key操作命令

Redis 中存储的数据整体是一个 Map,其 key 为 String 类型,而 value 则可以是 String、 Hash 表、List、Set 等类型。

3.2.1 Keys

 格式:KEYS pattern
 功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。
 说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。

keys * 返回数据库中所有键

3.2.2 exists

 格式:EXISTS key
 功能:检查给定 key 是否存在。
 说明:若 key 存在,返回 1 ,否则返回 0 。

3.2.3 del

 格式:DEL key [key …]
 功能:删除给定的一个或多个 key 。不存在的 key 会被忽略。
 说明:返回被删除 key 的数量。

3.2.4 rename

 格式:RENAME key newkey
 功能:将 key 改名为 newkey。
 说明:当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。

3.2.5 move

 格式:MOVE key db
 功能:将当前数据库的 key 移动到给定的数据库 db 当中。
 说明:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。移动成功返回 1 ,失败则返回 0 。

3.2.6 type

 格式:TYPE key
 功能:返回 key 所储存的值的类型。
 说明:返回值有以下六种 none (key 不存在)

  • string (字符串)
  • list (列表)
  • set (集合)
  • zset (有序集)
  • hash (哈希表)

3.2.7 expire 与 pexpire

 格式:EXPIRE key seconds
 功能:为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key被称为“易失的”(volatile)。
 说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。

3.2.8 ttl 与 pttl

 格式:TTL key
 功能:TTL, time to live,返回给定 key 的剩余生存时间。
 说明:其返回值存在三种可能:
 当 key 不存在时,返回 -2 。
 当 key 存在但没有设置剩余生存时间时,返回 -1 。
 否则,返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒,而 pttl 命令返回的时间单位为毫秒。

3.2.9 persist

 格式:PERSIST key
 功能:去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”。
 说明:当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,则返回 0。

3.2.10 randomkey (给数据库判空)

 格式:RANDOMKEY
 功能:从当前数据库中随机返回(不删除)一个 key。
 说明:当数据库不为空时,返回一个 key。当数据库为空时,返回 nil。

3.2.11 scan

 格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
 功能:用于迭代数据库中的数据库键。其各个选项的意义为:
 cursor:本次迭代开始的游标。
 pattern :本次迭代要匹配的 key 的模式。
 count :本次迭代要从数据集里返回多少元素,默认值为 10 。
 type:本次迭代要返回的 value 的类型,默认为所有类型。

 相关命令:另外还有 3 个 scan 命令用于对三种类型的 value 进行遍历。
 hscan:属于 Hash 型 Value 操作命令集合,用于遍历当前 db 中指定 Hash 表的所有 field-value 对。
 sscan:属于 Set 型 Value 操作命令集合,用于遍历当前 db 中指定 set 集合的所有元素
 zscan:属于 ZSet 型 Value 操作命令集合,用于遍历当前 db 中指定有序集合的所有元素(数值与元素值)
SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个存储集合的键名。而 SCAN 命令则不需要在第一个参数提供任何数据库键 —— 因为它遍历的是当前数据库中的所包含的键。

3.2.11.1 SCAN命令基本过程

SCAN 命令是一个基于游标 cursor (指示开始位置)的迭代器:SCAN 命令每次被调用之后,都会向用户返回返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。当SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。如果新游标返回 0 表示迭代已结束。

3.2.11.2 SCAN命令有效性

SCAN 命令仅仅使用游标来记录遍历状态, 所以这些命令带有以下缺点:

  • 同一个元素可能会被返回多次。 处理重复元素的工作交由应用程序负责, 比如说, 可以考虑将遍历返回的元素,只用于可以安全地重复执行多次的操作上。
  • 如果一个元素是在遍历过程中被添加到数据集的, 又或者是在遍历过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会, 这是不确定的。
3.2.11.3 SCAN命令每次执行返回的元素数量

SCAN 命令族并不保证每次执行都返回某个给定数量的元素。增量式命令甚至可能会返回零个元素, 但只要命令返回的游标不是 0 , 应用程序就不应该将遍历视作结束。

不过命令返回的元素数量总是符合一定规则的, 在实际中:对于一个大数据集来说, 增量式遍历命令每次最多可能会返回数十个元素;而对于一个足够小的数据集来说, 小集合键、小哈希键和小有序集合键, 那么增量遍历命令将在一次调用中返回数据集中的所有元素。

3.2.11.4 COUNT 选项
  • COUNT 选项的作用就是让用户告知遍历命令, 在每次遍历中应该从数据集里返回多少元素

  • 这个选项只是对增量式遍历命令的一种提示, 有些时候这种提示会失效。

  • Redis 会自动调整每次的遍历数目。由于 scan 命令每次执行都只会返回少量元素,所以该命令可以用于生产环境,而不会出现像 KEYS 命令带来的服务器阻塞问题。

  • 增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止,能否结束一个迭代取决于用户执行迭代的速度是否比数据集增长的速度更快。

  • 重要: 并非每次遍历都要使用相同的 COUNT 值。用户可以在每次遍历中按自己的需要随意改变 COUNT 值, 只要记得将上次遍历返回的游标用到下次遍历里面就可以了。

3.2.11.5 MATCH选项

对元素的模式匹配工作是在命令从数据集中取出元素之后, 向客户端返回元素之前的这段时间内进行的, 所以如果被遍历的数据集太大, 而且数据集中又只有少量元素和模式相匹配, 那么遍历命令或许会在多次执行中都不返回任何元素。

对此,我们可以设置一个很大count, 强制返回更多数据以供匹配.

3.2.11.5 TYPE选项
  • 从6.0版开始,使用 TYPE 选项要求 SCAN 只返回与给定类型匹配的对象
  • TYPE选项仅在整个数据库SCAN 命令上可用,HSCAN 或 ZSCAN 等无效。
  • 与MATCH类似, TYPE 筛选器会在从数据库中获取到元素后应用,因此该选项不会减少服务器完成完整遍历所必须执行的工作量,对于罕见类型,可能在多次遍历中没有收到任何元素。
3.2.11.6 使用错误的游标进行增量式遍历
  • 在同一时间, 可以有任意多个客户端对同一数据集进行遍历, 客户端每次执行遍历都需要传入一个游标, 并在遍历执行之后获得一个新的游标, 而这个游标就包含了遍历的所有状态, 因此, 服务器无须为遍历记录任何状态。
  • 只有两种游标是合法的:
    a. 在开始一个新的遍历时, 游标必须为 0。
    b. 增量式遍历命令在执行之后返回的游标值, 用于延续(continue)遍历过程的游标。
  • 使用非法游标并不会造成崩溃, 但可能会产生不确定的结果.

实验:
先往数据库中插入数据成这样 :
注意: 集合(Set)是一种无序的数据结构,即使按照一定的顺序插入元素,Redis在内部存储时并不保证保持相同的顺序。
在这里插入图片描述

在这里插入图片描述
指令含义: 从0开始, 返回3个键.
返回内容:x`
a. 返回的最后一个键是c,c是下一次从4开始
b. 返回的头三个键

3.3 String型Value命令(*)

**如果 value 字符串中带有空格,则该字符串必须使用双引号或单引号引起来,否则报错. 因此 , 在具体开发中, 建议每次写Value值时都使用括号

Redis 存储数据的 Value 可以是一个 String 类型数据。String 类型的 Value 是 Redis 中最基本,最常见的类型。String 类型的 Value 中可以存放任意数据,包括数值型,甚至是二进制的图片、音频、视频、序列化对象等。一个 String 类型的 Value 最大是 512M.

3.3.1 SET

  • 格式: SET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX] [GET]
  • EX seconds – 设置键key的过期时间,单位时秒
  • PX milliseconds – 设置键key的过期时间,单位时毫秒
  • NX – 只有键key不存在的时候才会设置key的值
  • XX – 只有键key存在的时候才会设置key的值
  • KEEPTTL(6.0后新增) – 获取 key 的过期时间
  • GET(6.2后新增) – 返回 key 存储的值,如果 key 不存在返回空

注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX, GETSET,的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。

3.3.2 SETEX和PSETEX

 格式:SETEX/PSETEX key seconds value
 功能:set expire,其不仅为 key 指定了 value,还为其设置了生存时间。setex 的单位为秒,psetex 的单位为毫秒。
 说明:如果 key 已经存在, 则覆写旧值。该命令类似于以下两个命令,不同之处是, SETEX 是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
SET key value
EXPIRE key seconds # 设置生存时间

3.3.4 GETSET

 格式:GETSET key value
 功能:将给定 key 的值设为 value ,并返回 key 的旧值。
 返回值:当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。

3.3.5 MSET和MSETNX

 格式:MSET/MSETNX key1 value1 [key2 value2 …]
 功能:同时设置一个或多个 key-value 对。
 说明:MSET 和MSETNX就是SET和SETNX的升级, 同时支持1或多键值对版本()
 说明1:如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
 说明2: MSET/MSETNX 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。
 返回值: 总是返回“OK”,因为 MSET 不会失败。

3.3.6 MGET

 格式:MGET key [key …]
 功能:返回所有(一个或多个)给定 key 的值。
 返回值:如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

3.3.7 APPEND

 格式:APPEND key value
 功能:

  • 如果 key 已经存在, 并且其值是一个字符串, APPEND 命令将 value 追加到key 原来的值的末尾。
  • 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

 返回值:追加 value 之后, key对应的值字符串的长度。
在这里插入图片描述

3.3.8 INCR和DECR

 格式: INCR key 或 DECR key
 功能:将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。
 返回值:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。
 说明: 本质上这是一个整数操作,因为Redis没有专门的整数类型。存储在 key 中的字符串被转换为十进制有符号整数,在此基础上加1。

3.3.9 INCRBY和DECRBY

 格式: INCRBY key increment 或 DECRBY key decrement
 功能:将 key 中存储的数字值增加/减少指定的数值increment / decrement,这个数值只能是整数,可以是负数,但不能是小数。
 返回值:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。

3.3.10 INCRBYFLOAT

 格式:INCRBYFLOAT key increment
 功能:为 key 中所储存的值加上浮点数增量 increment 。
 返回值:与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。

3.3.11 STRLEN

 格式:STRLEN key
 功能:返回 key 所储存的字符串值的长度。
 返回值:当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。

3.3.12 GETRANGE

 格式:GETRANGE key start end
 功能:返回 key 对应Value值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。
 用途: GETRANGE 通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
 说明:**end 必须要比 start 大。**支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。

3.3.13 SETRANGE

 格式:SETRANGE key offset value
 功能:从偏移量 offset 开始, 用 value 参数替换给定 key 所储存的字符串值 str。
 说明:当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。
在这里插入图片描述
不存在的key的例子:
在这里插入图片描述

3.3.15 位操作命令

名称中包含 BIT 的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、 bittop、bitfield,这些命令不常用。

3.3.15 典型应用场景

3.3.15.1 数据缓存

Redis 作为数据缓存层,MySQL 作为数据存储层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从 MySQL 中获取后先存入缓存层再返回给应用服务器。

3.3.15.2 计数器

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

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

相关文章

Nodejs前端学习Day3_准备工作

妈的,这几天真tm冷,前天上午还下了一整天的雪,大雪 文章目录 前言一、Node.js简介1.1何为1.2有什么 二、Node.js可以做什么三、学习路线四、下载nodejs4.1小坑记录4.2LTS和Current版本的不同 五、什么是终端六、在nodejs中执行js代码七、powe…

【PyTorch】n卡驱动、CUDA Toolkit、cuDNN全解安装教程

文章目录 GPU、NVIDIA Graphics Drivers、CUDA、CUDA Toolkit和cuDNN的关系使用情形判断仅仅使用PyTorch使用torch的第三方子模块 安装NVIDIA Graphics Drivers(可跳过)前言Linux法一:图形化界面安装(推荐)法二&#x…

用友U8接口-部署和简要说明(1)

概括 本专栏文章目的说明对目前用友U8ERP接口介绍对底层接口二次封装的介绍 说明 过去发布过介绍U8接口文章简介,参考以下链接。 U8接口开发方式 本专栏文章与下面的HTTP接口相辅相成,主要是写给正在使用,或未来使用本套接口的开发人员&am…

PhpStorm调试docker容器中的php项目

背景 已经通过docker容器启动了一个web服务&#xff0c;并在宿主机可以访问http://localhost:8080访问网页。 现在想使用phpstorm打断点调试代码。 方法 1. 容器内安装xdebug 进入容器 docker exec -it <container-name> bash为php安装xdebug拓展 apt install php8…

市场复盘总结 20240122

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 6/39 15.3% 二进三&#xff1a; 进级率低 0% 最常用的二种方法&#xff1a; 方法…

数据湖技术之发展现状篇

一. 大数据处理架构&#xff1a; 大数据处理架构的发展过程具体可以分为三个主要阶段&#xff1a;批处理架构、混合处理架构&#xff08;Lambda、Kappa架构&#xff09;、湖仓一体。首先是随着Hadoop生态相关技术的大量应用&#xff0c;批处理架构应运而生&#xff0c;借助离线…

用C语言实现贪吃蛇游戏!!!

前言 大家好呀&#xff0c;我是Humble&#xff0c;不知不觉在CSND分享自己学过的C语言知识已经有三个多月了&#xff0c;从开始的C语言常见语法概念说到C语言的数据结构今天用C语言实现贪吃蛇已经有30余篇博客的内容&#xff0c;也希望这些内容可以帮助到各位正在阅读的小伙伴…

MongoDB:从容器使用到 Mongosh、Python/Node.js 数据操作

文章目录 1. 容器与应用之间的关系介绍2. 使用 Docker 容器安装 MongoDB3. Mongosh 操作3.1 Mongosh 连接到 MongoDB3.2 基础操作与 CRUD 4. Python 操作 MongoDB5. Nodejs 操作 MongoDB参考文献 1. 容器与应用之间的关系介绍 MongoDB 的安装有时候并不是那么容易的&#xff0…

Qt项目文件以及对象树

"在哪里走散&#xff0c;你都会找到我~" 前篇&#xff0c;我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目&#xff0c;Qt会为自动创建诸如&#xff1a;.pro、.h\.cpp、.iu等文件&#xff0c;这些文件到底是什么&#xff1f;我们在使用Qt时 应该…

c++ QT 信号的个人理解 信号就是独立文件调用的一种“协议”

一. 简介 就我个人来理解&#xff0c;信号槽机制与Windows下消息机制类似&#xff0c;消息机制是基于回调函数&#xff0c;Qt中用信号与槽来代替函数指针&#xff0c;使程序更安全简洁。 信号和槽机制是 Qt 的核心机制&#xff0c;可以让编程人员将互不相关的对象绑定在一起&a…

IntelliJ IDE 插件开发 | (五)VFS 与编辑器

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

[GYCTF2020]Ezsqli1

打开环境&#xff0c;下面有个提交表单 提交1&#xff0c;2有正确的查询结果&#xff0c;3以后都显示Error Occured When Fetch Result. 题目是sql&#xff0c;应该考察的是sql注入 简单fuzz一下 发现information_schema被过滤了&#xff0c;猜测是盲注了。 测试发现只要有东…

Qt : Style Sheet

When a style sheet is active, the QStyle returned by QWidget::style() is a wrapper “style sheet” style, not the platform-specific style. The wrapper style ensures that any active style sheet is respected and otherwise forwards the drawing operations to t…

Linux 系统相关的命令

目录 一. 系统用户相关1.1 查看当前访问的主机和用户1.2 切换用户1.2.1 设置root用户密码1.2.2 普通用户和root用户切换 1.4 系统状态1.4.1 vmstat 查看当前系统的状态1.4.2 history 查看系统中输入过的命令 二. 系统文件相关2.1 权限修改2.2 磁盘占用2.2.1 每秒钟监视当前磁盘…

在 VUE 项目中,使用 Axios 请求数据时,提示跨域,该怎么解决?

在 VUE 项目开发时&#xff0c;遇到个问题&#xff0c;正常设置使用 Axios 库请求数据时&#xff0c;报错提示跨域问题。 那在生产坏境下&#xff0c;该去怎么解决呢&#xff1f; 其可以通过以下几种方式去尝试解决&#xff1a; 1、设置允许跨域请求的响应头 1.1 在响应头中…

LINUX基础培训十九之常见服务nfs介绍

前言、本章学习目标 了解nfs服务用途掌握nfs服务器的配置掌握nfs客户端的配置使用 一、NFS简介 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用…

机器学习第一个项目-----鸢尾花数据集加载及报错解决

项目步骤 如刚开始做&#xff0c;从 “项目开始” 看&#xff1b; 如遇到问题从 “问题” 开始看&#xff1b; 问题 报错如下 ModuleNotFoundError: No module named sklearn解决过程 查看官网&#xff0c;感觉可能是python版本和skilearn版本不匹配&#xff0c;更新一下p…

使用vue_cli脚手架创建Vue项目(cmd和图形化方式)

使用vue_cli脚手架创建Vue项目&#xff08;cmd和图形化方式&#xff09; 创建项目(cmd方式) vue create vue_cli1.方向键选择manually select feature(手动选择方式创建)&#xff0c;回车 2.按空格键选择需要的组件&#xff1a;Babel、PWA、Router、Vuex、CSS&#xff0c;回…

【GitHub项目推荐--游戏模拟器(switch)】【转载】

01 任天堂模拟器 yuzu 是 GitHub 上斩获 Star 最多的开源 Nintendo Switch 模拟器 &#xff0c;使用 C 编写&#xff0c;考虑到了可移植性&#xff0c;该模拟器包括 Windows 和 Linux 端。 如果你的 PC 满足必要的硬件要求&#xff0c;该模拟器就能够运行大多数商业游戏&…

Django实战

一、开发登录表单 def login_form(request):html <html><body><form method"post">用户名:<input name "username" type"text"></input></br>密码&#xff1a;<input name "password" type…
最新文章