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

news2024/12/31 4:18:12

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.coloradmin.cn/o/1415663.html

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

相关文章

一行命令在 wsl-ubuntu 中使用 Docker 启动 Windows

在 wsl-ubuntu 中使用 Docker 启动 Windows 0. 背景1. 验证我的系统是否支持 KVM?2. 使用 Docker 启动 Windows3. 访问 Docker 启动的 Windows4. Docker Hub 地址5. Github 地址 0. 背景 我们可以在 Windows 系统使用安装 wsl-ubuntu,今天玩玩在 wsl-ub…

数据库查询3

目录 1. 多表查询 1.1.1 介绍 1.1.2 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 2. 事务 2.1 操作 2.2 四大特性 数据库总结2 数据库总结1 1. 多表查询 1.1.1 介绍 多表查询&#xff…

RLHF学习

整体流程 三个步骤分解: 预训练一个语言模型 (LM) ;聚合问答数据并训练一个奖励模型 (Reward Model,RM) ;用强化学习 (RL) 方式微调 LM。 RW RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励&…

1、PDManer 快速入门

文章目录 序言一、快速入门1.1 PDMan 介绍1.2 特点1.3 下载和安装 小结 序言 本人长期以来一直从事于应用软件的研发以及项目实施工作,经常做数据库建模(数据表设计)。有一款称心如意的数据库建模工具,自然能够事半功倍&#xff0…

【算法路线图】算法小抄题解-一文理解算法体系-费元星

做研发多年,对算法理解一直不够成体系,基本是每次在面试的时候才会去重点看算法,刷一些题,因此在这里,把我多年的总结发出来,希望晚辈站在一个高的位置学习。 最新链接:有道云笔记 -----------…

阿里云部署配置幻兽帕鲁Palworld联机服务器详细教程

阿里云作为国内领先的云计算服务提供商,为企业和个人提供了丰富的云服务。本文将为大家详细介绍如何在阿里云上配置幻兽帕鲁Palworld联机服务器,以便与更多玩家共同体验游戏的乐趣。 第一步:登录服务器创建页 1、进入幻兽帕鲁联机服务快速部…

设计模式⑩ :用类来实现

文章目录 一、前言二、Command 模式1. 介绍2.应用3. 总结 三、Interpreter 模式1. 介绍2. 应用3. 总结 参考文章 一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系…

GCP :Stackdriver Logging

官方介绍 Logs Explorer 利用 Logs Explorer,您可以通过灵活的查询语句、丰富的直方图视觉呈现、简单的字段浏览器以及保存查询的功能,对日志进行搜索、排序和分析。设置提醒以便在您包含的日志中出现特定消息时通知您,或者使用 Cloud Moni…

GPT-SoVITS 测试

开箱直用版(使用 AutoDL) step1 打开地址 https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official 选择 AutoDL创建实例,选择 3080ti 机器 step2 创建好实例之后,进入命令行,输入命令 echo {}>…

Kubernetes成本优化

云原生可以帮助团队更精细化利用资源,但如果缺乏工具的帮助,很难采取适当的措施优化资源的使用。本文介绍了若干用于可视化Kubernetes资源使用情况的工具,并且可以自定义策略优化资源使用,实现更好的成本优化。原文: Kubernetes C…

【计算机二级考试C语言】C强制类型转换

C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型&#x…

【NodeJS】004- NodeJS的模块化与包管理工具

模块化 1. 介绍 1.1.什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用 1.2 什么是模块化项目 ? 编码时是按照模…

openssl3.2 - 测试程序的学习 - test\aesgcmtest.c

文章目录 openssl3.2 - 测试程序的学习 - test\aesgcmtest.c概述笔记能学到的流程性内容END openssl3.2 - 测试程序的学习 - test\aesgcmtest.c 概述 openssl3.2 - 测试程序的学习 aesgcmtest.c 工程搭建时, 发现没有提供 test_get_options(), cleanup_tests(), 需要自己补上…

公考之判断推理(一、图形推理)

一、前言 判断推理这一题型主要具体分为四种题型: 1.图形推理 2.类比推理 3.定义判断 4.逻辑判断每种题型做题方法又不一样。 才本文采用总分的形式结构。 每一小标题的下面紧接着就是总结。二、图形推理常见的命题形式 图形推理常见的命题形式: 1.…

路飞项目--04

分析后端接口 # 用户板块--原型图--分析需要写哪些接口 多方式登录接口 短信登录接口 发送短信接口 短信注册接口 校验手机号是否注册接口 手机号是否存在接口 思路: 1 用了全局异常捕获,直接抛出异常报错 2 路由用了自定义路由&…

剑指offer——删除链表的节点

题目描述&#xff1a;给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。返回删除后的链表的头节点。 数据范围&#xff1a; 0 <链表节点值 < 10000 0 <链表长度 < 10000 示例1&#xff1a; 输入&#xff1a;{2,5,1,9}&#xff…

NIO-Selector详解

NIO-Selector详解 Selector概述 Selector选择器&#xff0c;也可以称为多路复⽤器。它是Java NIO的核⼼组件之⼀&#xff0c;⽤于检查⼀个或多个Channel的状态是否处于可读、可写、可连接、可接收等。通过⼀个Selector选择器管理多个Channel&#xff0c;可以实现⼀个线程管理…

STM32标准库——(5)EXTI外部中断

1.中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#xff…

Ribbon 体系架构解析

前面已经介绍了服务治理相关组件&#xff0c;接下来趁热打铁&#xff0c;快速通关Ribbon&#xff01;前面我们了解了负载均衡的含义&#xff0c;以及客户端和服务端负载均衡模型&#xff0c;接下来我们就来看下SpringCloud 下的客户端负载均衡组件Ribbon 的特点以及工作模型。 …

day04 两两交换链表中的节点、删除链表倒数第N个节点、链表相交、环形链表II

题目链接&#xff1a;leetcode24-两两交换链表中的节点, leetcode19-删除链表倒数第N个节点, leetcode160-链表相交, leetcode142-环形链表II 两两交换链表中的节点 基础题没有什么技巧 解题思路见代码注释 时间复杂度: O(n) 空间复杂度: O(1) Go func swapPairs(head *Li…