【Redis笔记】Redis 的通用命令

发布于:2025-08-14 ⋅ 阅读:(21) ⋅ 点赞:(0)


redis 是按照键值对的方式存储数据的,key 固定就是字符串,value 实际上会有很多类型,比如字符串、哈希表、列表、集合、有序集合等
必须要先进入 redis-cli 客户端程序,才能输入redis 命令

1. redis中最核心的两个命令 get 、set

set :把 key 和 value 存进去;
get :根据 key 来取 value,直接输入 key 就能得到 value,如果当前的 key 不存在,会返回 nil,和 null 是一个意思;
(key 和 value 都是字符串)
在这里插入图片描述

2. keys:用来查询当前服务器上匹配的 key

通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的key 就能被查询出来
语法:

KEYS pattern

patten 具体是咋写的,支持哪些通配符呢?
?匹配任意一个字符:
在这里插入图片描述
*匹配0个或者多个任意字符:
在这里插入图片描述
[abcde]只能匹配到 abcde,别的不行,相当于给出固定的选项了:

在这里插入图片描述
[^e]排除e,只有e匹配不了,其他的都能匹配:
在这里插入图片描述
[a-b] 匹配 a-b 这个范围内的字符,包含两侧边界:
在这里插入图片描述
生产环境中,一般都会禁止使用 keys *(查询 redis 中所有的 key),生产环境上的 key 可能会非常多,而 redis 是一个单线程的服务器,执行keys*的时间非常长,就使 redis 服务器被阻塞了,无法给其他客户端提供服务

3. exists :判定 key 是否存在

语法:

EXISTS key [key...]

返回值:key 存在的个数
时间复杂度:O(1)
在这里插入图片描述
尽量不要分开写,比如:
在这里插入图片描述
因为 redis 是一个 客户端 服务器 结构的程序,客户端和服务器之间通过网络来进行通信!分开的写法,会产生更多轮次的网络通信,导致效率比较低,成本比较高(和直接操作内存相比)

4. del:删除指定的 key

语法:

DEL key [key ...]

返回值:删除掉的 key 的个数
时间复杂度:0(1)
在这里插入图片描述
del 同样是很危险的操作,要谨慎使用

5. expire:作用是给指定的 key 设置过期时间,key 存活时间超出这个指定的值,就会被自动删除

设置的时间单位是
语法:

EXPIRE key seconds

时间复杂度: O(1)
此处的设定过期时间,必须是针对已经存在的 key 设置,设置成功返回 1,设置失败返回 0 。

补充:pexpire key 亳秒(时间单位是毫秒)

在这里插入图片描述

6. ttl:查看当前 key 的过期时间还剩多少

在这里插入图片描述

补充:pttl,和 pexpire key 亳秒 一样是毫秒级

7. redis 的 key 的过期策略是怎么实现的?[经典面试题]

一个 redis 中可能同时存在很多很多 key,这些 key 中可能有很大一部分都有过期时间,此时, redis 服务器咋知道哪些 key 已经过期要被删除,哪些 key 还没过期?
redis 整体的策略是:定期删除和惰性删除结合

  • 定期删除:
    每次定期抽取一部分 key ,进行验证过期时间(保证这个抽取检查的过程,足够快)

为啥这里对于定期删除的时间,有明确的要求呢?
因为 redis 是单线程的程序,主要的任务(处理每个命令的任务,扫描过期key )都在一个线程上进行,如果扫描过期key 消耗的时间太多了,就可能导致正常处理请求命令就被阻塞了。(产生了类似于执行 keys * 这样的效果)

  • 惰性删除
    假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在,紧接着,后面又一次访问,正好用到了这个 key,于是这次访问就会让 redis 服务器触发删除 key 的操作,同时再返回一个 nil

8. type:返回 key 所对应的 value 的类型

返回值: none , string , list , set , zset , hash and stream 。
时间复杂度:O(1)


网站公告

今日签到

点亮在社区的每一天
去签到