Redis
是一个开源的、基础内存的键值型存储系统。用于内存键值数据库、缓存、消息中间件等。它支持多种抽象数据结构,如字符串、散列、列表、集合、有序集合等。
Redis
通用命令是与 Redis
服务器进行交互的基础,因此学习Redis
常见命令非常重要,接下来让我们来学习相关的常见命令。
首先,我们需要明确什么是Redis
中的通用命令,通用命令是那些不特定于数据类型(如字符串、列表、集合、哈希或有序集合)的命令。接下来,让我们来学习常见的通用命令。
1. EXISTS
- EXISTS:判断键是否存在。
- 语法:
EXISTS key [key ...]
- 若键存在,返回 1
- 若键不存在,返回 0
- 可以同时判断多个键是否存在,若同时判断的是同一个键,则返回判断的次数
- 例子:
2. DEL
- DEL:删除特定的键,如果键不存在,该命令被忽略。
- 语法:
DEL key [key ...]
- 可同时删除多个键
- 返回值为删除的键的个数
- 示例:
3. KEYS
- keys: 返回与模式相匹配的所有的键
- 语法:
keys pattern
- 通配符:
*
:匹配任意数量的任意字符。?
:匹配一个任意字符。[]
:匹配在括号内的任一字符(比如[a-z]
将匹配任意小写字母)。\x
:转义字符,用于匹配特殊字符,比如*
或?
。
- 例子:
keys redi? //匹配以redi开头,以任意字符结尾的键
keys *redis* // 匹配包含redis的键
keys red[a-z]s // 匹配将括号内的字符为a-z的键
keys \*redis // 匹配名为*redis的键
- 注意事项:
KEYS
命令在大型数据库中使用时可能会非常慢,因为它会遍历整个键空间来匹配模式,这可能导致Redis服务器阻塞,因此不推荐在生产环境中使用。如果你的目的是为了查找特定的键,可以考虑使用SCAN
命令,它是基于游标的迭代器,可以在不阻塞服务器的情况下逐步返回匹配的键。
4. SCAN
- SCAN:迭代当前选定的 Redis 数据库中的键集。允许增量迭代,即每次调用仅返回少量元素和下一次迭代的初始游标参数。由于每次调用不会遍历整个键空间,所有性能较高,适合在生产环境中适用。
- 语法:
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
cursor
:游标参数,使用时设置为 0 代表迭代开始。当该命令返回的游标参数为 0 时,代表迭代结束。MATCH
选项:匹配模式,可以用通配符进行模式匹配。COUNT
选项:你期望本次迭代返回的元素个数。这并不是一个硬性要求,而是一个提示,告诉Redis在每次调用时尽量返回接近指定数量的元素。TYPE
选项:要求**SCAN**
仅返回与给定**type**
匹配的键。例如string
、hash
等。
- 核心要点:
- SCAN 命令并不会一次性返回所有的键,而是返回两个部分:第一个部分是下一次迭代的参数游标,用在下一次的 SCAN 命令当中,若返回的是 0 代表遍历完成;第二部分返回的本次迭代的键。
- 在一个完整的迭代过程中,
SCAN
命令保证返回集合中从开始到结束所有存在的元素。 - 如果一个元素在迭代开始的时候不存在,但在迭代的过程中被添加或一个元素在迭代的过程中被删除,
SCAN
命令不保证是否返回这个元素。 - 由于
SCAN
命令状态信息很少(只有游标),同一个元素可能会被返回多次。应用程序需要处理这种情况,通常的方法是对返回的元素去重,例如使用Set来存储返回的键,确保每个键只处理一次。
- 示例:
- 基本用法:
通过每次返回的游标作为下一次 SCAN 命令的游标参数完成迭代。
- 使用
MATCH
选项的用法:
在遍历的过程当中匹配只包含 key1 的键
- 使用
COUNT
选项的用法:
SCAN 命令每次迭代获取到的键的个数是不确定的,COUNT 选项只是一个提示,告诉 Redis 尽量按照这个数量进行迭代。因此上面每次获取到的个数是不相同的。
- 使用
TYPE
选项的用法:
由于该数据库当中包含 key1 的键只有 string 类型,所以使用 TYPE 选项中只有指定为 string 才能进行迭代。
5. EXPIRE
- EXPIRE:给键设置过期时间(倒计时),超时之后,键自动删除。
- 语法:
EXPIRE key seconds
- 根据秒数进行过期删除
- 示例:
10 秒之后被删除,无法获取该键的值
6. TTL
- TTL:查看一个键的有效期还剩多少时间。
- 语法:
TTL key
- 如果键不存在,则返回 -2
- 如果键存在存在但是没有设置过期时间,则返回-1
- 如果键存在且有设置过期时间,则返回还剩多少时间过期
- 示例:
如果本文对你有帮助的话,希望可以点个赞。🥰🥰🥰