【Redis】Redis常用命令01

news/2024/7/24 8:38:32 标签: redis, redis基础, redis命令详解, 缓存, 数据库

【Redis01】Redis常用命令

一、基础命令

1、ping(心跳命令)

键入ping命令,若看到PONG响应,则说明客户端与Redis的连接时正常的。

image-20230408211628706

2、get/set(读写键值命令)

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

image-20230408211730487

3、select(切换数据库

redis默认有 16 个数据库。这个在 Redis Desktop Manager(RDM)图形客户端中可以直 观地看到。默认使用的是 0 号 DB,可以通过 select db 索引来切换 DB。如图,切换到1号DB:

image-20230408211802887

4、dbsize(查看key数量)

dbsize 命令可以查看当前数据库中 key 的数量。

image-20230408211945404

5、flushdb(删除当前库中所有数据)

清楚当前DB中的所有数据,不影响其他DB。

image-20230408212221534

6、flushall(删除所有DB中的数据)

image-20230408212320609

二、Key 相关操作命令

1、keys

格式:KEYS pattern

功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。

说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。

如图:查看所有模式与查看所有开头结尾为‘a’的模式

image-20230408213343952

2、exists

格式:EXISTS key

功能:检查给定 key 是否存在。

说明:若 key 存在,返回 1 ,否则返回 0 。

image-20230408213455338

3、del

格式:DEL key [key …]

功能:删除给定的一个或多个 key 。不存在的 key 会被忽略。

说明:返回被删除 key 的数量。

image-20230408213541854

4、rename

l 格式:RENAME key newkey

l 功能:将 key 改名为 newkey。

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

image-20230408213806672

5、move

l 格式:MOVE key db

l 功能:将当前数据库的 key 移动到给定的数据库 db 当中。

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

image-20230408213945562

6、type

l 格式:TYPE key

l 功能:返回 key 所储存的值的类型。

l 说明:返回值有以下六种

​ none (key 不存在)

​ string (字符串)

​ list (列表)

​ set (集合)

​ zset (有序集)

​ hash (哈希表)

7、expire/pexpire

l 格式:EXPIRE key seconds

l 功能:为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key被称为“易失”(volatile)。

l 说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。

8、ttl/pttl

格式:TTL key

功能:TTL, time to live,返回给定 key 的剩余生存时间。

说明:其返回值存在三种可能:

​ 1/当 key 不存在时,返回 -2 。

​ 2/当 key 存在但没有设置剩余生存时间时,返回 -1 。

​ 3/否则,返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒,而 pttl 命令返回的时间单位为毫秒。

image-20230408214503144

9、persist

l 格式:PERSIST key

l 功能:去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”。

l 说明:当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,则返回 0。

image-20230408214631492

10、randomkey

l 格式:RANDOMKEY

l 功能:从当前数据库中随机返回(不删除)一个 key。

l 说明:当数据库不为空时,返回一个 key。当数据库为空时,返回 nil。

image-20230408214740825

11、scan

  • 格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

  • 功能:用于迭代数据库中的数据库键。其各个选项的意义为:

    • cursor:本次迭代开始的游标。
    • pattern :本次迭代要匹配的 key 的模式。
    • count :本次迭代要从数据集里返回多少元素,默认值为 10 。
    • type:本次迭代要返回的value 的类型,默认为所有类型。

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

  • 说明:使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成服务器崩溃。

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

    增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止,换句话说,如果被迭代数据集的大小不断地增长的话,增量式迭代命令可能永远也无法完成一次完整迭代。即当一个数据集不断地变大时,想要访问这个数据集中的所有元素就需要做越来越多的工作, 能否结束一个迭代取决于用户执行迭代的速度是否比数据集增长的速度更快。

  • 相关命令:另外还有 3 个 scan 命令用于对三种类型的 value 进行遍历。

    • hscan:属于 Hash 型 Value 操作命令集合,用于遍历当前 db 中指定 Hash 表的所有 field-value 对。
    • sscan:属于 Set 型Value 操作命令集合,用于遍历当前 db 中指定 set 集合的所有元素
    • zscan:属于 ZSet 型 Value 操作命令集合,用于遍历当前 db 中指定有序集合的所有元素(数值与元素值)

三、String型Value操作命令

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

1、set

格式:SET key value [EX seconds | PX milliseconds] [NX|XX]

功能:SET 除了可以直接将 key 的值设为 value 外,还可以指定一些参数。

  • EX seconds:为当前 key 设置过期时间,单位秒。等价于 SETEX 命令。

  • PX milliseconds:为当前 key 设置过期时间,单位毫秒。等价于 PSETEX 命令。

  • NX:指定的 key 不存在才会设置成功,用于添加指定的 key。等价于 SETNX 命令。

  • XX:指定的 key 必须存在才会设置成功,用于更新指定key 的value。

说明:如果value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。

image-20230408215404893

2、setex/psetex

格式:SETEX/PSETEX key seconds value

功能:set expire,其不仅为 key 指定了value,还为其设置了生存时间。setex 的单位为秒,psetex 的单位为毫秒。

说明:如果 key 已经存在, 则覆写旧值。该命令类似于以下两个命令,不同之处是, SETEX 是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。

  • SET key value

  • EXPIRE key seconds # 设置生存时间

如下图两条指令作用相同:

image-20230408215652794

3、setnx

l 格式:SETNX key value

l 功能:SET if Not eXists,将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key

已经存在,则 SETNX 不做任何动作。成功,返回 1,否则,返回 0。

l 说明:该命令等价于 set key value nx

image-20230408215816215

4、getset

格式:GETSET key value

功能:将给定 key 的值设为 value ,并返回 key 的旧值。

说明:当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。

image-20230408220000780

5、mset/msetnx

格式:MSET/MSETNX key value [key value …]

功能:同时设置一个或多个 key-value 对。

说明:如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不 是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情 况下进行设置操作。MSET/MSETNX 是一个原子性(atomic)操作,所有给定 key 都会在同 一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。该命令永不失败。

image-20230408220130792

6、mget

格式:MGET key [key …]

功能:返回所有(一个或多个)给定 key 的值。

说明:如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

image-20230408220218797

7、append

格式:APPEND key value

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

说明:追加 value 之后, key 中字符串的长度。

image-20230408220359590

8、incr/decr

格式:INCR key 或 DECR key

功能:increment,自动递增。将 key 中存储的数字值增一。decrement,自动递减。将 key 中存储的数字值减一。

说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后的值。

image-20230408220515890

9、incrby/decrby

格式:INCRBY key increment 或 DECRBY key decrement

功能:将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。

说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。

image-20230408220620950

10、incrbyfloat

格式:INCRBYFLOAT key increment

功能:为 key 中所储存的值加上浮点数增量 increment 。

说明:与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。

image-20230408220721017

11、strlen

格式:STRLEN key

功能:返回 key 所储存的字符串值的长度。

说明:当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。

image-20230408220812700

12、getrange

格式:GETRANGE key start end

功能:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。

说明:end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。

image-20230408220941085

13、setrange

格式:SETRANGE key offset value

功能:用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。

说明:当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。

image-20230408221127133

14、位操作命令

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

15、典型应用场景

Value 为 String 类型的应用场景很多,这里仅举这种典型应用场景的例子:

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

  • 计数器:在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等。每个有效客户端访问一次,或视频每播放一次,都是直接修改 Redis 中的计数器,然后再以异步方式持久化到其它数据源中,例如持久化到 MySQL。

  • 共享Session:对于一个分布式应用系统,如果将类似用户登录信息这样的 Session 数据保存在提供登录服务的服务器中,那么如果用户再次提交像收藏、支付等请求时可能会出现问题:在提供收藏、支付等服务的服务器中并没有该用户的 Session 数据,从而导致该用户需要重新登录。对于用户来说,这是不能接受的。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。这样就不会引发“重新登录”问题。

    image-20230408221723064

到其它数据源中,例如持久化到 MySQL。

  • 共享Session:对于一个分布式应用系统,如果将类似用户登录信息这样的 Session 数据保存在提供登录服务的服务器中,那么如果用户再次提交像收藏、支付等请求时可能会出现问题:在提供收藏、支付等服务的服务器中并没有该用户的 Session 数据,从而导致该用户需要重新登录。对于用户来说,这是不能接受的。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。这样就不会引发“重新登录”问题。

    [外链图片转存中…(img-pzu0SH3Z-1681037660328)]

  • 限速器:现在很多平台为了防止 DoS(Denial of Service,拒绝服务)攻击,一般都会限制一个 IP不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。注意,其无法防止 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击。


http://www.niftyadmin.cn/n/198369.html

相关文章

ICC实验-基于2010年Synopsy的lab guide

ICC实验-基于2010年Synopsy的lab guide 文章目录ICC实验-基于2010年Synopsy的lab guide1 ICC实验1.1 Intro to ICCBeginAnalyze Timing Paths1.2 Data_SetupTask 1 Create a Milkyway libraryTask 2 Load the Netlisg, TLU,Constraints and ControlsTask 3 Basic Flow : Design…

尚品汇细节分析-Vue项目中如何实现自定义校验规则

需求:当用户登录时,会输入用户名和密码,用户名不能为空,密码的长度不能小于6位。需要在用户在点击登录按钮前,进行验证是否通过我们设定的规则,如果通过则放行,如果不通过则会进行提示。 效果图…

JAVASE 继承

文章目录继承1.为什么需要继承2.继承的概念3.继承的语法4.父类成员访问4.1 子类中访问父类的成员变量4.2 子类中访问父类的成员方法5 super关键字6.子类的构造方法7.super和this8.再谈初始化9.protected关键字10.继承方法11.final 关键字12.继承与组合继承 1.为什么需要继承 …

尝试说透C语言指针

前言 不久以前尝试总结过《尝试说透C语言指针》的底稿,但觉得还是写的太复杂了,遂就放弃发布出去。 最近遇到一个事情,觉得void *类型是组织文字的一个比较好的抓手和切入点,以及增补有助理解的图表,就再次有兴趣将其…

Oracle Flex ASM

Oracle Flex ASM 允许 Oracle ASM 实例运行在与数据库服务器分离的物理服务器上。通过这种部署,更大的 Oracle ASM 实例集群可以支持更多的数据库客户端,同时减少整个系统的 Oracle ASM占用空间。当使用 Oracle Flex ASM 时,Oracle ASM 客户端…

prim算法 从连通图中寻找最小生成树的算法 java 记录路径

prim算法 从连通图中寻找最小生成树的算法 2023年4月4日 20:04 稠密图就是边多,点少,点少就用点 边少就用边 点多就用边边多就用点感觉很像dijikstra算法的设计思路 Int visit 记录节点是否记录过 Int dis 记录当前节点到别的节点的最短距离&#x…

ROS实践03 订阅方实现C++

文章目录运行环境:思路:1.1 vscode 环境配置:1)ctrlshiftX 添加扩展插件:2)ctrlshiftB 配置中更换为以下代码1.2 C代码实现1)工作空间创建和编译2)功能包创建和添加依赖3&#xff09…

内存屏障在硬件层面的实现原理以及如何解决各种问题

可见性问题: Store屏障 Load屏障 如果加了Store屏障之后,就会强制性要求你对一个写操作必须阻塞等待到其他的处理器返回invalidate ack之后,对数据加锁,然后修改数据到高速缓存中,必须在写数据之后,强制…