一、帮助文档
通用指令是对任何的数据类型都可以使用的一些命令,这些命令有哪些呢?我们可以去官方文档中查看,它都放在 Generic
这一组下了。
除了在官方文档中可以看见,我们也可以打开命令行:@Generic
,可以发现出现了很多很多命令,及其使用方式也非常多。
如此多的命令不要去记,只要你会帮助文档,随时可以来查,没有必要去记忆。
虽然很多,但是真正常用的就几个:
- KEYS:查看符合模板的所有key
- DEL:删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期
通过 help [command](命令名称)
可以查看一个命令的具体用法,例如:
KEYS
后面跟着 pattern
,代表模板。
Find all keys matching the given pattern
:查找与给定模式匹配的所有键。
这个模版有点像一种匹配的表达式,但是不是正则,而是redis内置的一种表达式,这种表达式一般是使用通配符,例如 *
代表所有。
![1652887865189](https://img-blog.csdnimg.cn/img_convert/fb0cfbfd4f578df37123de70bd3c3df9.png)
或者去官方网站上找 KEYS
,同样也能找到它的用法。
点进去后官方文档中还有示例
其中
*
表示多个字符?
表示一个字符
其他的通配符可以到官网上看,这里就不再赘述。
这些都是在 KEYS
的官方文档中。
![image-20240522213410847](https://img-blog.csdnimg.cn/img_convert/5074af785c336161bb932d6c9674d292.png)
二、KEYS
按 tab
有自动补全功能,并且告诉你后面接 pattern
# *表示任意的,因此这里就匹配到了所有的key
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379>
# 查询以a开头的key
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379>
既然它这里支持通配符搜索,那它底层肯定有一种模糊查询的机制。
像这种模糊查询,效率肯定不高,事实上,当redis数据量达到一定规模时,例如数百万 / 上千万,甚至更多时,如果使用模糊匹配查询,往往会给服务器带来巨大的负担,也就是说它的搜索可能会搜很长时间。又因为redis是单线程的,在它搜索的这段时间内,它就无法执行其他的命令,等于整个redis服务都被阻塞了。
贴心小提示:因此在生产环境下,不推荐使用keys 命令,因为这个命令在key过多的情况下,效率不高
但如果你的redis是一个集群模式,有主有从,在从节点上执行这个命令,就是可以的,但是千万别在主节点做,因为会阻塞所有的请求。
三、DEL
DEL:删除 一个 / 多个
指定的Key,返回值是删除key的数量
127.0.0.1:6379> help del # 首先查询帮助文档
# 参数就是要删除的Key,后面有个[],意思是它可以接收多个key
DEL key [key ...]
summary: Delete a key # 删除一个Key
since: 1.0.0
group: generic
127.0.0.1:6379> del name #删除单个
(integer) 1 # 成功删除1个
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加数据
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "age"
127.0.0.1:6379> del k1 k2 k3 k4 # 我们的库中只有3个key,k4是不存在的,注意观察是否能删除
(integer) 3 # 此处返回的是成功删除的key,由于redis中只有k1,k2,k3 所以只成功删除3个,最终返回
127.0.0.1:6379>
127.0.0.1:6379> keys * #再查询全部的key
1) "age" #只剩下一个了
127.0.0.1:6379>
三、EXISTS
EXISTS:判断key是否存在,存在返回1,不存在返回0
127.0.0.1:6379> help EXISTS # 首先查询帮助文档
# 可以发现这个命令后面也可以跟一个或多个
EXISTS key [key ...]
summary: Determine if a key exists # 判断key是否存在
since: 1.0.0
group: generic
127.0.0.1:6379> exists age
(integer) 1
127.0.0.1:6379> exists name
(integer) 0
四、EXPIRE
EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除单位是秒。
为什么redis要有这样的一个命令呢?
因为redis是基于内存存储的,随着时间的增加,内存中存储的数据越来越多,总有一天内存可能会被占满,redis就为我们提供了这个功能,为key设置有效期。
例如我存了一个数进去,根据业务需求,例如是短信验证码,我们知道,验证码一般存在时间就是五分钟,此时我就可以设置五分钟有效期,到期以后自动删除,这样一来就可以节省redis的内存空间,因此EXPIRE也是非常常用的。
跟它合作使用的另外一个命令叫 ttl
,它是查看一个 Key的剩余有效期。
127.0.0.1:6379> help EXPIRE
# 命令后面跟上两个参数,key:给谁设置有效期,seconds:设置多长时间,单位是秒
EXPIRE key seconds
# 设置Key的存活时间,time to live即存活时间,简称为ttl
summary: Set a key's time to live in seconds
since: 1.0.0
group: generic
127.0.0.1:6379> expire age 10 # 为age设置10秒有效期
(integer) 1
127.0.0.1:6379> ttl age # 查看age的剩余有效期
(integer) 8 # 还剩8秒
127.0.0.1:6379> ttl age
(integer) 6 # 还剩6秒
127.0.0.1:6379> ttl age
(integer) -2 # 当这个key查询出来就是-2,表示这个key已经被移除了
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set age 10 # 如果没有设置过期时间
OK
127.0.0.1:6379> ttl age
(integer) -1 # 此时ttl的返回值就是-1,代表永久有效,但建议在给redis存入数据时,最好都设置一个有效期