1、简单描述

redis本质上是一个key-value db,value可以有多种类型(string、hash、set、sorted set、list等),本章节不讲这些类型的命令,这里是讲跟key相关的命令操作。

key本身是string类型,不支持边界符,比如my key 这种含有空格的名字是会报错的,mykey\n这样包含换行符的也不行,包含\r\n的会被特殊处理,暂不细说。

由于redis的数据是在内存中的,所以如果key的名字过长,会占用更多字节,另外就是查找的时候,会比长度短的key慢。但是key名称长度也不能过小,否则可读性差。

 

2、相关命令(下面所有截图是在redis 4.0.1上测试的结果,4.0.1是2017年7月发布的稳定版本)

 1)exists命令 : 判断key是否存在,同时可以支持多个key的判断,返回存在的key的数量。

redis命令查list redis命令查找存在空格key_重置

2)keys命令:支持模式匹配

redis命令查list redis命令查找存在空格key_redis_02

 3)type命令:查看key的类型

redis命令查list redis命令查找存在空格key_redis_03

【注意】type命令只能查看一个key的类型,不支持多个key同时查询。

4)rename命令:重命名一个key为新的名称。如果新key本来是存在的,则会覆盖,如果旧key不存在,会报错。

redis命令查list redis命令查找存在空格key_重置_04

如果修改的新key存在,会覆盖,而且新key的类型会跟着改变,比如myHash本来是hash类型,现在把myString改名字为myHash:

redis命令查list redis命令查找存在空格key_数据_05

myHash本来是hash类型,把string类型的myString的名字改为myHash,会把原来存在的myHash这个key给覆盖掉了。

 5)randomkey命令:随机返回一个key,如果为空,则返回nil,表示空串。

redis命令查list redis命令查找存在空格key_redis_06

6)del命令:删除key,支持删除多个key,命令执行结果看上图。

7)renamenx命令:重命名一个旧key为一个新key,如果新key存在,则报错:

redis命令查list redis命令查找存在空格key_数据_07

8)dbsize命令:查看key的数量

redis命令查list redis命令查找存在空格key_重置_08

【注意】dbsize是统计的某个索引db下的key的数量。比如索引为0的有2个,索引为1的key有10个,那么在索引为0的当前环境下,dbsize会返回2,而不是返回12(即2+10)。

9)expire命令:设置过期时间。

10)ttl命令:获取过期的时间。

redis命令查list redis命令查找存在空格key_redis_09

【注意】过期时间是可以被重置的,比如重新给key赋值。

【注意】expire设置如果给一个不存在的key过期时间,会返回错误信息。

【注意】对一个不存在的key执行ttl命令,会返回错误信息。

 

redis命令查list redis命令查找存在空格key_数据库_10

【注意】对一个设置了过期时间的key再次执行expire,会重置过期时间:

redis命令查list redis命令查找存在空格key_数据库_11

 【注意】rename操作会使得新的key继承旧的key的过期时间,哪怕是新key和旧key有各自的过期时间和不同类型,只要新key是被旧key覆盖,那么新key的过期时间就是继承了旧ky的过期时间:

redis命令查list redis命令查找存在空格key_重置_12

rename改名字,新key是存在的,所以rename后是被覆盖了,过期时间继承过来了:

redis命令查list redis命令查找存在空格key_redis命令查list_13

 11)select命令,选择一个一个db索引。默认是有16个db,默认是用的索引是0:

redis命令查list redis命令查找存在空格key_redis命令查list_14

12)move命令:把key转移到某个索引号对应的db下

redis命令查list redis命令查找存在空格key_数据_15

【注意】如果要转移的key不存在,或者已经存在于目标索引的db中,会返回0,表示转移失败:

redis命令查list redis命令查找存在空格key_数据库_16

redis命令查list redis命令查找存在空格key_数据库_17

12)flushdb命令:删除当前索引db的所有数据,其他索引db下的数据不受影响。

redis命令查list redis命令查找存在空格key_数据库_18

13)flushall命令:删除所有数据,所有索引db的数据全部删除。

redis命令查list redis命令查找存在空格key_redis命令查list_19

多个索引db都有数据,一条flushall把所有的key都删了,这些命令的操作要慎重!!!

 

3、小结

1)expire命令设置过期时间,ttl获取过期时间;

2)rename允许新的名字是已存在的key名字,这样会覆盖,同时把旧key的过期时间延续过去。

3)flushdb和flushall命令会删除数据,慎用;

4)keys 命令会列出一大堆的key,如果key过多,会影响性能,慎用!