Redis 支持很多种数据结构,全局命令,就是能够搭配任意一个数据结构来使用的命令
Redis 自身的这些键值对,是通过哈希表的方式来组织的。键值对中的 key 固定是字符串,但是 value 可以是字符串,哈希表,列表,集合,有序集合这些多种类型
keys 命令
用来查询当前服务器上匹配的 key,通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就能被查询出来
语法:
KEYS pattern
时间复杂度:O(N)
返回值:匹配 pattern 的所有 keypattern
:包含特殊符号的字符串,翻译成"样式"或者"模式",存在的意义,对匹配字符串要求的描述
pattern 支持的匹配符
-
?
:匹配任意一个字符
示例:h?llo
匹配hello
,hallo
和hxllo
set hello 1 set hallo 2 set hxllo 3 keys h?llo
-
*
:匹配0个或者多个任意字符
示例:h*llo
匹配hllo
和heeeello
set hllo 1 set heeeello 2 keys h*llo
注:keys *
=> 查询 redis 中所有的 key -
[]
:[ae]
只能匹配到 a, e。相当于选择题给出固定的选项
示例:h[ae]llo
匹配hello
和hallo
, 但不匹配hillo
set hello 1 set hallo 2 set hillo 3 keys h[ae]llo
-
[^e]
:排除 e,只有e匹配不了,其他的都能匹配。可以理解考试时我们做选择题的排除法
示例:h[^e]llo
匹配hallo
,hbllo
, … 但不匹配hello
set hallo 1 set hbllo 2 set hello 3 keys h[^e]llo
-
[a-b]
:匹配 a - b 这个范围内的字符,包含两侧边界
示例:h[a-b]llo
匹配hallo
和hbllo
, 但不匹配hcllo
set hallo 1 set hbllo 2 set hcllo 3 keys h[a-b]llo
exists 命令
判断 key 是否存在
语法:
EXISTS key [key ...]
时间复杂度:O(1)
返回值:key 存在的个数(针对多个 key)
Redis 按照哈希表的方式来组织 key 的,哈希表的查询时间复杂度是 O(1)
Redis 已存在的 key
示例1:
EXISTS hello
EXISTS hallo
示例2:
EXISTS hello hallo
示例1 和 示例2 的区别:
Redis 是一个客户端服务器结构的程序,客户端和服务器之间通过网络来进行通信;
示例1 相对于示例2 会产生更多轮次的网络通信,效率更低,成本更高
del 命令
del (delete) 删除指定的 key, 可以一次删除一个或者多个
语法:
DEL key [key ...]
时间复杂度:O(1)
返回值:删除掉的 key 的个数
示例:
keys *
del hillo
del hello hallo aaa
keys *
expire 命令
expire 作用是给指定的 key 设置过期时间:key 存活时间超出这个指定的值,就会被自动删除;
此处设定过期时间,必须是针对已经存在的 key 设置
注: 1. 这里的 expire 时间单位是 秒/s
2. 需要设置毫秒的过期时间,使用 pexpire
命令,使用: pexpire key 毫秒
语法:
EXPIRE key seconds
时间复杂度:O(1)
返回值:1 表⽰设置成功,0 表⽰设置失败
使用场景:比如手机验证码,该验证码,5分钟内有效;点外卖,优惠券,在指定时间之内有效
设置成功返回1,设置失败返回0
示例:
set hello 1
expire hello 7
get hello
get hello
ttl 命令
TTL (Time To Live),查看当前指定 key 的过期时间,秒级
注:有pttl
命令与上述的 pexpire
命令是对应的
语法:
TTL key
时间复杂度:O(1)
返回值:剩余过期时间,-1 表⽰没有关联过期时间,-2 表⽰ key 不存在
示例:
set fly 0213
expire fly 7
ttl fly
ttl fly
ttl fly
ttl fly
再次 get hello
, 会发现 hello 已经消失了,说明 这个 key 时间到,就被删除了
get hello
type 命令
Redis 所有的 key 都是 string,但是 key 对应的 value 是可能会存在多种类型的, 而type
命令就是会返回 key 对应的数据类型
语法:
TYPE key
时间复杂度:O(1)
返回值: none
, string
, list
, set
, zset
, hash
and stream
…。
注意: stream
是 Redis 作为消息队列的时候,使用这个类型的 value
示例:
-
none
127.0.0.1:6379> type key1 none
-
string
127.0.0.1:6379> set key2 222 OK 127.0.0.1:6379> type key2 string
-
list
127.0.0.1:6379> lpush key3 111 222 333 (integer) 6 127.0.0.1:6379> type key3 list
-
set
127.0.0.1:6379> sadd key4 111 222 333 (integer) 1 127.0.0.1:6379> type key4 set
-
hash
127.0.0.1:6379> hset key5 field1 value1 (integer) 1 127.0.0.1:6379> type key5 hash