- j3_liuliang
- Redis常用API即应用场景开始系列(key),如果觉得有用可以关注博主,不定时更新哦!
一、键(key)
1.1 TYPE(type)
Redis Type 命令用于返回 key 所储存的值的类型。
语法
:
127.0.0.1:6379> TYPE KEY_NAME
可用版本
: >= 1.0.0
返回值
返回 key 的数据类型,数据类型有:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
案例:
127.0.0.1:6379> set stringkey stringvalue #设置String类型
OK
127.0.0.1:6379> type stringkey #返回String
string
127.0.0.1:6379> lpush listkey list01 list02 #设置list类型
(integer) 2
127.0.0.1:6379> type listkey #返回list
list
127.0.0.1:6379> sadd setkey setvalue #设置set类型
(integer) 1
127.0.0.1:6379> type setkey #返回set
set
127.0.0.1:6379> zadd zsetkey 1 "liuliang" #设置zset类型
(integer) 1
127.0.0.1:6379> type zsetkey #返回zset
zset
127.0.0.1:6379> hset hashkey name liuliang #设置hash类型
(integer) 1
127.0.0.1:6379> type hashkey #返回hash
hash
1.2 PEXPIREAT(pexpireat)
Redis PEXPIREAT 命令用于设置 key 的过期时间,
亿毫秒记
。key 过期后将不再可用。
语法
127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
可以版本:
>= 1.0.0
返回值:
设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
案例
127.0.0.1:6379> set k3 v3 #创建key 并赋值
OK
127.0.0.1:6379> pexpireat k3 5000000000000 #设置过期时间,大于等于这个输才行1000000000000
(integer) 1
127.0.0.1:6379> ttl k3 #查看剩余过期时间
(integer) 3398395525 #单位秒
127.0.0.1:6379> ttl k3
(integer) 3398395522
127.0.0.1:6379>
1.3 RENAME(rename)
Redis RENAME命令用于修改 key 的名称 。
语法
127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME
可以版本:
>= 1.0.0
返回值:
改名成功时提示 OK ,失败时候返回一个错误。
当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令 将覆盖旧值。
案例
################### 第一种情况:重命名的新key不存在 ###################
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> rename j3-liuliang liuliang #重命名key,新key不存在
OK
127.0.0.1:6379> exists j3-liuliang #exists判断key是否存在,0不存在,1存在
(integer) 0
127.0.0.1:6379> exists liuliang
(integer) 1
################### 第二种情况:重命名的新key存在 ###################
127.0.0.1:6379> set xiaozhang 28 #设置key并赋值
OK
127.0.0.1:6379> rename liuliang xiaozhang #重命名key(liuliang),新key(xiaozhang)存在
OK #重命名成功
127.0.0.1:6379> exists liuliang #查看key是否存在
(integer) 0
127.0.0.1:6379> exists xiaozhang
(integer) 1
127.0.0.1:6379> get xiaozhang #可以发现,如果重命名的key存在,则会覆盖新key的值
"18"
1.4 PERSIST (persist)
Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。
语法
127.0.0.1:6379> PERSIST KEY_NAME
可以版本:
>= 2.2.0
返回值:
当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。
案例
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间
(integer) 98
127.0.0.1:6379> persist j3-liuliang #移除key的过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看key状态,-1永久有效
(integer) -1
1.5 MOVE(move)
Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。
语法
127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE
可以版本:
>= 1.0.0
返回值:
移动成功返回 1 ,失败则返回 0 。
案例
################### 第一种情况:key存在于当前数据库中(移动成功,当前库不存在key目标库存在key) ###################
127.0.0.1:6379> select 0 #切换数据库,默认就是 0 号数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并复制
OK
127.0.0.1:6379> move j3-liuliang 1 #移动key到 1 号数据库
(integer) 1
127.0.0.1:6379> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> exists j3-liuliang #查看当前数据库是否存在key
(integer) 1
127.0.0.1:6379[1]>
################### 第二种情况:key不存在于当前数据库中(移动失败,因为key根本不存在) #################
127.0.0.1:6379> flushall #清空所有数据库数据 0-15
OK
127.0.0.1:6379> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0
127.0.0.1:6379> move j3-liuliang 1 #将一个不存在的key移动到 1 号数据库
(integer) 0 #返回 0 说明已经失败了
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0 #显然不存在
127.0.0.1:6379[1]>
################### 第三种情况:当源数据库和目标数据库有相同的 key 时(结论移动失败,不做任何变化) ####
127.0.0.1:6379[1]> flushall #清空所有数据库数据 0-15
OK
127.0.0.1:6379[1]> set j3-liuliang 28 #在当前数据库设置一个key
OK
127.0.0.1:6379[1]> select 0 #切换数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置和上一个数据库中相同的一个key,值不要一样,便于区分
OK
127.0.0.1:6379> move j3-liuliang 1 #将当前数据库中key移动到上一个数据库中
(integer) 0 #发现,移动失败,说明,当两个数据库中有相同的key时,会移动失败
127.0.0.1:6379> get j3-liuliang #获取当前数据库中key,发现没有变化
"18"
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> get j3-liuliang #发现也没有变化
"28"
127.0.0.1:6379[1]>
1.6 RANDOMKEY(randomkey)
Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。
语法
127.0.0.1:6379> RANDOMKEY
可以版本:
>= 1.0.0
返回值:
当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil 。
案例
127.0.0.1:6379> flushall #清空所有数据库数据
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 #一次设置多个key value
OK
127.0.0.1:6379> keys * #查看数据库说有key
1) "k4"
2) "k5"
3) "k1"
4) "k2"
5) "k3"
127.0.0.1:6379> randomkey #随机输出一个key
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k1"
127.0.0.1:6379> flushall #情况所有数据库数据
OK
127.0.0.1:6379> randomkey #发现输出为 nil
(nil)
127.0.0.1:6379>
1.7 DUMP(dump)
Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。
语法
127.0.0.1:6379> DUMP KEY_NAME
可以版本:
>= 2.6.0
返回值:
如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。
案例
127.0.0.1:6379> flushall #清空所有数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> dump j3-liuliang #将给定的key序列化
"\x00\xc0\x12\t\x00\x9d+/\x83A\xa7'\x9a" #key序列后的值
127.0.0.1:6379> dump not-exists-key #序列化不存在的值
(nil) #返回nil
127.0.0.1:6379>
1.8 TTL(ttl)
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
语法
127.0.0.1:6379> TTL KEY_NAME
可以版本:
>= 1.0.0
返回值:
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。
**注意:**在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
案例
127.0.0.1:6379> flushall #清空所有数据库数据
OK
127.0.0.1:6379> ttl j3-liuliang #判断一个不存在的key
(integer) -2
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> ttl j3-liuliang #查看存在的key但没有设置过期时间
(integer) -1
127.0.0.1:6379> expire j3-liuliang 100 #给存在的key设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间(秒)
(integer) 98
127.0.0.1:6379>
1.9 EXPIRE(expire)
Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。
语法
127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS
可以版本:
>= 1.0.0
返回值:
设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
案例
127.0.0.1:6379> flushall #清空所有数据库数据
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #给存在的key设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间(秒)
(integer) 88
127.0.0.1:6379>
以上实例中我们为键 j3-liuliang设置了过期时间为 100秒,100秒后该键会自动删除。
1.10 DEL(del)
Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
语法
127.0.0.1:6379> DEL KEY_NAME
可以版本:
>= 1.0.0
返回值:
被删除 key 的数量。
案例
127.0.0.1:6379> flushall #清空所有数据库数据
OK
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> del k1 #删除key
(integer) 1 #返回删除的数量
127.0.0.1:6379> del k2
(integer) 0 #返回删除的数量 0 说明没有改变什么,表明该值不存在
127.0.0.1:6379>
1.11 PTTL(pttl)
Redis PTTL命令以
毫秒
为单位返回 key 的剩余过期时间。
语法
127.0.0.1:6379> PTTL KEY_NAME
可以版本:
>= 2.6.0
返回值:
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。
**注意:**在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
案例
127.0.0.1:6379> flushall #清空所有数据库数据
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #设置过期时间
(integer) 1
127.0.0.1:6379> pttl j3-liuliang #返回key的剩余时间,毫秒
(integer) 91266
127.0.0.1:6379> pttl key #查看不存在key的剩余时间,毫秒
(integer) -2
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> pttl k1 #查看没有设置过期时间的key
(integer) -1
127.0.0.1:6379>
1.12 RENAMENX(renamenx)
Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
语法
127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME
可以版本:
>= 1.0.0
返回值:
修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。
案例
################### 第一种情况:newkey不存在(改名成功) ###################
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> renamenx j3-liuliang liuliang #将key设置新值,新值不存在
(integer) 1
127.0.0.1:6379> exists j3-liuliang #判断老key是否还存在
(integer) 0
127.0.0.1:6379> get j3-liuliang #判断是否还可以取到老key的值
(nil)
127.0.0.1:6379> exists liuliang #判断新key是否存在
(integer) 1
127.0.0.1:6379> get liuliang #获取新key的值
"18"
127.0.0.1:6379>
################### 第二种情况:newkey存在(改名失败,不做变化) ###################
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> renamenx k1 k2 #将key设置新值,新值存在
(integer) 0 #重命名失败
127.0.0.1:6379> get k1 #没有任何变化
"v1"
127.0.0.1:6379> get k2 #没有任何变化
"v2"
127.0.0.1:6379>
1.13 EXISTS(exists)
Redis EXISTS 命令用于检查给定 key 是否存在。
语法
127.0.0.1:6379> EXISTS KEY_NAME
可以版本:
>= 1.0.0
返回值:
若 key 存在返回 1 ,否则返回 0 。
案例
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> exists k1 #判断key是否存在
(integer) 0 #不存在
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> exists k1 #判断key是否存在
(integer) 1 #存在
127.0.0.1:6379>
1.14 EXPIREAT(expireat)
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。
语法
127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
可以版本:
>= 1.0.0
返回值:
设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
案例
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expireat j3-liuliang 1293840000 #给key设置过期时间,时间是时间戳
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间
(integer) -2
127.0.0.1:6379> exists j3-liuliang #查看key是否还存在
(integer) 0
127.0.0.1:6379>
1.15 KEYS(keys)
Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。
语法
127.0.0.1:6379> KEYS PATTERN
可以版本:
>= 1.0.0
返回值:
符合给定模式的 key 列表 (Array)。
案例
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set k1 v1 #创建一些key
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set m1 n1
OK
127.0.0.1:6379> set m2 n2
OK
127.0.0.1:6379> keys k* #查找所有符合 k* 的key
1) "k1"
2) "k2"
127.0.0.1:6379> keys m* #查找所有符合 m* 的key
1) "m2"
2) "m1"
127.0.0.1:6379> keys * #查找所有的key
1) "m2"
2) "k1"
3) "m1"
4) "k2"
127.0.0.1:6379>
结束语
- 本文结合Redis中文网和博主的实践案例所写,下期写String类型
- 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。