redis-cli
打开 redis 自带的命令行客户端
redis-cli --raw
显示中文格式的 打开 redis 自带的命令行客户端
redis 是读存数据不进行会格式转换, 简单说就是什么格式存就是什么格式取, 因此读取数据的时候会以二进制格式输出汉字
不使用 --raw 则会, 以十六进制的格式显示中文字符 “\xd6\xd0”
set key value – O(1)
设置 key 值 和 value 值 (键 值 对)
get key – O(1)
根据 key 来取 value 值
默认使用 字符串类型, 此处 key 和 value 加不加 引号, 单引号还是双引号, 看你心情, 因为不影响, 都会被识别为 字符串格式
keys pattern – O(N)
模式(通配符)匹配
(没事别乱用, redis 一般是替 MySQL 负重前行的, 生产模式下[正式工作], 一个 Redis 中贼拉多数据, 你扫一遍其他任务还做不做了, 查询 redis 失败后, 会去直接查询数据库(MySQL …), 大量任务一涌入, MySQL 就寄了, 年终奖也就寄了)
exist key [key …] – O(N)
判定 key 值是否存在, 可公式判断多个
返回的值是上述判断 key 值的存在个数
del key [key …] – O(N)
删除指定 key, 删了key,该 key 对应的 value 自然也不存在了
同理, 返回删除成功 的个数
expire key seconds 秒 / pexpire key 毫秒 – O(1)
expire 作用是给指定的 key 设置过期时间 - key存货时间超出这个数值, 就会自动删除
ttl key – O(1)
ttl 查询过期时间 (time to live)
redis 的 key 的过期策略是怎么实现的?
一个 redis 中会同时存在很多 key, 这些 key 中可能有很大一部分有过期时间.
此时, redis 服务器如何知道哪些 key 已经过期要被删除, 哪些 key 还没过期.
整体策略如下:
- 定期删除
每次抽取一部分, 进行验证过期时间
保证整个抽取检查的过程足够快
(因为如果扫描过期 key 消耗的时间太多, 会导致正常处理请求命令被阻塞) - 惰性删除
到了过期时间, 还不会被删除,
只有当被访问到, 会让 redis 触发删除 key 的操作, 再返回一个 nil - 定时删除
在设置 key 过期时间的同时, 为该 key 创建一个定时器, 让定时器在 key 的过期时间来临时, 对 key 进行删除.
(但是如果在过期时间来临前, 来了一个时间很长的请求, 你就会错过这次删除时间, 导致它活了更长时间)
redis 并没有采取 定时器 的方式来实现过期 key 删除
如果有多个 key 过期, 也会通过一个 定时器(基于优先级队列或者时间轮) 来高效 / 节省 cpu 的前提下来处理多个 key
– 基于优先队列: 定期检查队首元素, 队首没过期, 其他的肯定就都没过期
– 基于时间轮: 将时间分为很多段, 每个小段上挂一个链表, 链表上代表该任务在该时间内运行
type key – O(1)
type 返回 key 对应值 的类型
value 对应的格式: none , string , list , set , zset , hash , stream
object encoding key – O(1)
查看 key 对应的 value 的编码方式
当数据大小不同时, 即使是同一类型的数据存储, 他们的底层编码方式也不一样
flushall
删除 redis 上的所有键值对
也会带走你的年终奖
(不是)