超详细Redis之Key操作API,什么?看不懂!你来锤我

  • 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类型
  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40399646/article/details/108906065