目录
全局命令
1)keys
2)exists
3) del(delete)
4)expire
5)type
SET命令
GET命令
MSET 和 MGET命令
其他SET命令
计数命令
redis-cli
,进入redis
最核心的命令:我们这里只是先介绍 set 和 get 最简单的操作,后面有详细介绍
set: 存储 key 和 value
get: 根据 key 来取 value
key 和 value 的类型都是字符串
get 查询不存在的值会返回一个 nil
全局命令
1)keys
用来查询当前服务器上的匹配的 key
通过一下特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就会被查出来。
keys pattern
,pattern 是包含特殊符号的字符串。
pattern 所支持的统配样式:
“?” 可以匹配任意一个字符
“ * ” 匹配 0 个或者多个任意字符
keys *
可以查询所有的 key
[ae] 只能匹配到 a/e 两个字符之一
[^e] 表示排除 e ,除了 e 之外可以匹配其他字符
[a-e] 匹配 a - e 范围内的字符,包含 a 和 e
注意:keys 的时间复杂度是 O(N)。在生产环境上,一般都会禁止使用 keys 命令。
2)exists
判定 key 是否存在。
exists key [key ...]
,返回值:返回 key 存在的个数
时间复杂度:O(N),此处的 N 是检查的 key 的个数
3) del(delete)
删除指定的 key,可以一次删除一个或者多个
del key [key ...]
, 返回值:返回删除 key 的个数
时间复杂度:O(N),此处的 N 是成功删除的 key 的个数
4)expire
给指定的 key 设置过期时间,key 存活时间超过这个指定的值,就会被自动删除。
expire key seconds
, expire 设置的时间单位是 秒。pexpire key 毫秒
, pexpire 设置的时间单位是毫秒
返回 0 表示设置失败,1 表示设置成功。
时间复杂度:O(1)。
ttl(time to live) 查询 key 的过期时间,单位秒。pttl 和 pexpire 搭配使用。
时间复杂度:O(1)。
返回值:剩余过期时间;-1 表示么有设置过期时间;-2 表示 key 不存在。
redis 的过期策略是怎么实现的?
如果直接遍历所有的 key,显然是不可能的,所有redis 采取了两种方式相结合:
1.定期删除
每隔一定时间,抽取一部分 key 检查是否到达删除时间,每次抽取一部分可以有效保证效率,不会浪费太多时间。 如果扫描过期 key 消耗的时间太多了,就可能会导致正常处理请求命令就阻塞了。
2.惰性删除
假设这个 key 已经到了过期时间,但是暂时还没有将其删除,key 依然存在,接下来再访问该 key 的时候,就会触发 redis 的删除操作,同时返回一个 nil。
redis 为了应对上述策略,还提供了一系列的内存淘汰策略。
5)type
type key
,返回 key 对应的 value 的数据类型。
SET命令
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
NX:如果 key 不存在,才设置,如果 key 存在,则不设置(返回nil)
XX:如果 key 存在,才设置(相当于更新 key 的 value),如果 key 不存在,则不设置(返回nil)
EX:设置过期时间,单位秒
PS:设置过期时间,单位毫秒
EXAT:设置 key 过期的指定 Unix 时间(以秒为单位)
PXAT:设置 key 过期的指定 Unix 时间(以毫秒为单位)
KEEPTTL:保存与 key 相关联的生存时间
set key value ex 10
,就相当于set key value
和 expire key 10
。
因为 key2 已经过期了,所以我们在设置 key2 时加上 NX,成功设置 key2。由于 key1 已经存在,所以加上 NX 会返回一个 nil。
GET命令
GET key
,需要注意的是,GET 只能获取到字符串类型的 value,如果 value 是其他类型,使用 GET 获取就会出错!
MSET 和 MGET命令
MSET key value [key value]
,MSET 可以设置多组键值对,MGET key key
,MGET 可以获取多个 key 的 value。
MSET 和 MGET 的时间复杂度都是 O(N),N为 key 的个数。
其他SET命令
SETNX
:不存在才能设置,存在则设置失败。
SETEX
:设置 key 的过期时间(以秒为单位)
PSETEX
:设置 key 的过期时间(以毫秒为单位)
计数命令
incr 针对 value + 1
INCR key
,此时 key 对应的 value 必须是整数。
返回值:原 value +1 的结果
无论是字符串还是小数,还是太大的数(超出规定范围),都不能完成该操作
如果 incr 操作的 key 不存在,那么就会将这个 key 默认为0来操作
incrby 针对 value + n
INCRBY key increment
,incrby 的使用规则和 incr 一样,都只能对整数使用,我们就不再进行演示了。
incrby 不仅仅可以加一个正数,还能够加负数
decr 针对 value + 1
DECR key
返回值:返回 value-1 后的结果
对一个不存在的 key 进行该操作,同样默认该 key 的 value 为0
decrby 针对 value - n
DECRBY key decrement
incrbyfloat
incrbyfloat key increment
,把 key 对应的 value 进行 + - 运算,运算的操作数可以是浮点数
注意:Redis 中不存在 decrbyfloat
,只能通过 incrbyfloat
+ 负数来实现减法