Redis:Key指令

发布时间 2023-08-29 10:53:13作者: ShineLe
学习自:《Redis开发与运维》pdf 148页

1、命令(在redis-cli下)

命令

说明

返回值

K-V基本设置

set K V

get K

设置K-V

获取K对应的V

 
keys * 查看所有K 按行列出所有K
dbsize K的数量  
exists K 检查某个K是否存在

1:K存在

0:K不存在

del K1 [K2] [K3] 删除K

0:K不存在

数字:成功删除的K的数量

expire K n

pexpire K n

expireat K t

pexpireat K t

设置K在n秒后过期(n为负数立刻删除)

设置K在n毫秒后过期

设置K在秒级时间戳t后过期

设置K在毫秒级时间戳t后过期

1:成功设置

0:K不存在

persist K

取消K过期

 

ttl K

pttl K

查看K的剩余过期时间(s)

查看K的剩余过期时间(ms)

≥0:剩余过期时间 

-1:无过期时间

-2:K不存在

type K K对应的V的数据类型

K存在:string、lis、hash、set、zset

K不存在:none

object encoding K  K对应的V的内部编码(底层源码)实现类型 embstr、int、linkedlist…… 
rename K K2 将K重命名为K2 OK
renamenx K K2 只有在K2不存在时才能rename成功

成功:OK

失败:0

randomkey 随机返回一个K  

K的迁移

move K db 把K从当前db移动到指定db  

dump+restore

dump K

restore K ttl V

不同Redis实例间的数据迁移:

在源redis上,dump将K-V序列化,格式RDB;在目标Redis上,resotre将序列化后的K-V进行复原,ttl代表过期时间

dump:序列化后的值

resotre:OK

migrate

Redis实例间进行数据迁移,实际上是dump、restore、del命令的组合

 

遍历K

keys pattern

挑选符合pattern的K

这里的pattern并非关键字,而是一种正则规则,比如*代表全部,.代表单个字符,其他正则规则这里都适用,不再多说

 
scan cursor [pattern] [count]

扫描遍历所有K

cursor:游标

pattern:模式

count:每次遍历的K个数,默认10

两部分:

1)下次遍历时的cursor(当为0时说明遍历完成);

2)本次遍历的count个K

hscan

扫描遍历

hash

set

zset

 
sscan  
zscan  

2、具体命令

1)expire等设置过期的指令

设置了过期expire时,如果再用set重置K-V,会取消过期;

2)keys pattern

keys会遍历所有的键,但是由于Redis是单线程架构,如果Redis包含了大量的K,执行keys会导致Redis阻塞,所以一般不要在生产环境下使用keys,但是如果确实有遍历K的需求,可以有三种方法:

  • 在一个不对外提供服务的Redis从节点上执行,这样不会阻塞客户端请求,但会影响主从复制;
  • 如果确认K数量确实不多,可以用keys;
  • 使用scan渐进式遍历,可以有效防止阻塞。