文章目录

  • 01 exists
  • 02 type
  • 03 keys
  • 04 rename
  • 05 renamenx
  • 06 randomkey
  • 07 ttl/pttl
  • 08 expire/pexpire
  • 09 persist
  • 10 move
  • 11 del
  • 12 flushall
  • 13 flushdb


01 exists

判断单个或多个key是否存在,返回结果要么是0要么是正整数,0表示都不存在,正整数是几就表示存在几个。

## 创建key1和key2键,其value是string数据类型
172.16.1.21:6379> set key1 "1"
OK
172.16.1.21:6379> set key11 "11"
OK

## 判断单个键,判断key1键是否存在
172.16.1.21:6379> exists key1
(integer) 1

## 判断多个键,判断key1和key11键是否存在
172.16.1.21:6379> exists key1  key11
(integer) 2

## 判断多个键,判断key0和key1键是否存在
172.16.1.21:6379> exists key0 key1
(integer) 1

02 type

判断key对应的value是什么数据类型,注意:只能判断单个key对应value的数据类型

## 创建key2键,value是string数据类型
172.16.1.21:6379> set key2 "2"
OK

## 创建key22键,value是list数据类型
172.16.1.21:6379> rpush key22 chenliang lili
(integer) 2

## 判断key2和key22键对应value的数据类型
172.16.1.21:6379> type key2
string
172.16.1.21:6379> type key22
list
172.16.1.21:6379> type key2 key22           <== 同时判断多个key对应的value报错
(error) ERR wrong number of arguments for 'type' command

03 keys

查看当前所在库的所有键(key)或者通过匹配获取相应的键(key);

#### 匹配格式
keys *           					# 列出当前所处库下的所有键(key)
keys k*          				    # 列出当前所处库下以k开头的键(key)
keys h?llo       				    # 列出当前所处库下以h开头,llo结尾,中间任意一个字符的键(key)
keys h[ae]llo                       # 列出当前所处库下hallo和hello键(key)

#### 求例
172.16.1.21:6379> keys *            # 匹配所有的键
1) "key22"
2) "key11"
3) "key1"
4) "key2"

172.16.1.21:6379> keys k*            # 匹配以k开头的键
1) "key22"
2) "key11"
3) "key1"
4) "key2"

172.16.1.21:6379> keys key?2         # 匹配出以key开头,2结尾,中间任意一个字符的键
1) "key22"

172.16.1.21:6379> keys key[12]       # 匹配出key1和key2键
1) "key1"
2) "key2"

04 rename

为键(key)进行重命名,一次只能对单个键(key)进行重命名,格式:rename key newkey
在设置newkey时,要判断newkey是否存在,不存在时才用rename来重命名

## 创建键key4,数据类型为string
172.16.1.21:6379> set key4 "4"
OK

## 将键key4重命名为key44
172.16.1.21:6379> exists key44         # 判断key44键是否存在,一定要不存在哈
(integer) 0
172.16.1.21:6379> rename key4 key44    # 将key4重命名为key44
OK
172.16.1.21:6379> get key44            # 查看key44键对应的value
"4"
172.16.1.21:6379> exists key4          # 判断key4是否存在
(integer) 0

05 renamenx

为键(key)进行重命名,一次只能对单个键(key)进行重命名,格式:renamenx key newkey
在设置newkey时,不需要判断newkey是否存在,因为若newkey存在,那么renamenx是不
会成功的

### 创建key5和key55
172.16.1.21:6379> set key5 "5"
OK
172.16.1.21:6379> set key55 "55"
OK
172.16.1.21:6379> get key5
"5"
172.16.1.21:6379> get key55
"55"

## 将key5键重命名成key55看是否成功,答案是不会成功的
172.16.1.21:6379> renamenx key5 key55      # 将key5重命名为key55,不成功,结果返回0
(integer) 0 
172.16.1.21:6379> get key55                # key55键的value还是55
"55"
172.16.1.21:6379> get key5                 # key5键还是存在的,值也是
"5"

06 randomkey

随机获取一个键(键),不是说随机获取一个key对应的value哈,也不会把键(key)给删除了;

172.16.1.21:6379> randomkey          # 随机获取一个键,结果是key1键
"key1"
172.16.1.21:6379> exists key1        # 判断key1键是否存在,结果是存在的
(integer) 1
172.16.1.21:6379> randomkey          # 随机获取一个键,结果是key2键
"key2"
172.16.1.21:6379> exists key2        # 判断key2键是否存在,结果是存在的
(integer) 1

07 ttl/pttl

返回key剩余的生存时(你要知道key是可以设置过期时间的哈)
只要key没有设置过期时间,不管用ttl还是pttl查看,返回的结果都是-1
ttl的单位是秒,pttl的单位是毫秒

### 添加key7键
172.16.1.21:6379> set key7 "7"
OK
172.16.1.21:6379> get key7
"7"

## 查看key7键还有多少生存时间
172.16.1.21:6379> ttl key7         # 用ttl命令查看key7键还剩多少秒过期
(integer) -1                       <== -1表示key7没有过期时间
172.16.1.21:6379> pttl key7        # 用pttl命令查看key7键还剩多少毫秒过期
(integer) -1                        <== -1表示key7没有过期时间

## 为key7设置生存时间为60秒,
172.16.1.21:6379> expire key7 60
(integer) 1

## 查看key7键还剩余多少时间过期
172.16.1.21:6379> ttl key7         # ttl查看key7键还剩余54秒过期
(integer) 54
172.16.1.21:6379> ttl key7         # ttl查看key7还剩余52秒过期
(integer) 52
172.16.1.21:6379> pttl key7        # pttl查看key7还剩余11590毫秒过期
(integer) 11590

## 当key过期后,key就会不存在[这里等待60秒]
172.16.1.21:6379> exists key7      # 判断key7是否存在
(integer) 0                        <== 0表示不存在

08 expire/pexpire

expire是以秒为单位为key设置过期时间;pexpire是以毫秒为单位为key设置过期时间;

## 添加key8和key88两个键(key)
172.16.1.21:6379> set key8 "8"
OK
172.16.1.21:6379> set key88 "88"
OK
172.16.1.21:6379> ttl key8      # 判断key8键还有多少秒过期,-1表示没有过期时间
(integer) -1
172.16.1.21:6379> ttl key88     # 判断key8键还有多少秒过期,-1表示没有过期时间
(integer) -1

## 设置key8键在60秒后过期
172.16.1.21:6379> expire key8 60       # 设置key8键在60秒后过期
(integer) 1
172.16.1.21:6379> ttl key8             # 查看key8键还有多少秒过期
(integer) 57
172.16.1.21:6379> ttl key8             # 查看key8键还有多少秒过期
(integer) 56

## 设置key88在60000毫秒(60秒)后过期
172.16.1.21:6379> pexpire key88 60000  # 设置key88键在60000毫秒后过期
(integer) 1
172.16.1.21:6379> pttl key88           # 查看key88键还剩多少毫秒过期
(integer) 57310
172.16.1.21:6379> pttl key88           # 查看key88键还剩多少毫秒过期
(integer) 55894

09 persist

移除key的过期时间,这样key就不会自动过期

172.16.1.21:6379> set key9 "9"       # 添加key9键
OK
172.16.1.21:6379> expire key9 60     # 设置key9键60秒后过期
(integer) 1
172.16.1.21:6379> ttl key9           # 查看key9键还剩余多少秒过期
(integer) 57
172.16.1.21:6379> ttl key9           # 查看key9键还剩余多少秒过期
(integer) 56
172.16.1.21:6379> persist key9       # 移除key9键的过期时间
(integer) 1
172.16.1.21:6379> ttl key9           # 查看key9键还有多少过期,-1表示没有过期时间
(integer) -1
172.16.1.21:6379> get key9           # 查看key9对应的value
"9"

10 move

移除当前库下的单个key到其它库下,格式:move key db

## 在0号库下添加key10键
172.16.1.21:6379>                    # 当前是在0号库下哈
172.16.1.21:6379> set key10 "10"     # 添加key10键
OK
172.16.1.21:6379> get key10          # 查看key10对应的value
"10"

## 在0号库下将key10移动2号库下
172.16.1.21:6379> move key10 2       # 在0号库下将key10移动2号库下
(integer) 1
172.16.1.21:6379> exists key10       # 在0号库下判断key10是否存在,显然不存在
(integer) 0

## 切换到2号库下去,查看key10是否存在
172.16.1.21:6379> select 2           # 切换至2号库下
OK
172.16.1.21:6379[2]> exists key10    # 在2号库下判断key10键是否存在
(integer) 1
172.16.1.21:6379[2]> get key10       # 在2号库下查看key10对应的value
"10"

11 del

删除单个key或多个key,key和key之间用空格分隔,返回值要么是0,要么是正整数,0表示key不存在,正整数是几就表示删除了几。格式:del key [key …]

## 添加key11、key111、key1111
172.16.1.21:6379> set key11 "11"
OK
172.16.1.21:6379> set key111 "111"
OK
172.16.1.21:6379> set key1111 "1111"
OK

## 删除单个key(这里删除key11)
172.16.1.21:6379> del key11
(integer) 1
172.16.1.21:6379> exists key11
(integer) 0

## 删除多个key(这里删除key12 key111 key1111,key12是不存在的哈)
172.16.1.21:6379> exists key12                # 判断key12键是否存在,是不存在的哈
(integer) 0
172.16.1.21:6379> del key12 key111 key1111    # 删除key12 key111 key111这三个键
(integer) 2       <== 表示成功删除了两个key
172.16.1.21:6379> exists key111 key1111       # 判断key111和key1111是否存在
(integer) 0

12 flushall

该命令非常危险,生产中应该给其做别名或者禁用。它的作用是清除掉redis实例中所有库下的所有数据(key-value对)。

## 查看0号库下有多少个key
172.16.1.21:6379> dbsize              # 统计当前0号库下有多少个key
(integer) 7

## 查看2号库下有多少个key(前面有移动key到2号库下)
172.16.1.21:6379> select 2            # 切换至2号库下
OK
172.16.1.21:6379[2]> dbsize           # 统计当前2号库下有几个key
(integer) 1

## 在2号库下执行flushall命令,然后看看结果
172.16.1.21:6379[2]> FLUSHALL         # 在2号库下执行flushall命令
OK
172.16.1.21:6379[2]> dbsize           # 在2号库下统计当前库下有多少个key
(integer) 0
172.16.1.21:6379[2]> select 0         # 切换至0号库下
OK
172.16.1.21:6379> dbsize              # 在0号库下统计当前库下有多少个key
(integer) 0

13 flushdb

该命令也非常危险,它相比flushall命令的威力小一些,它是将当前所在的库下所有key给清除掉。其实也危险。生产中应该给其做别名或者禁用。

## 在0号库下添加一个key
172.16.1.21:6379> set key0 "0"
OK
172.16.1.21:6379> get key0
"0"

## 切换至1号库下添加一个key
172.16.1.21:6379[1]> set key1 "1"
OK
172.16.1.21:6379[1]> get key1
"1"

## 在1号库下执行flushdb命令
172.16.1.21:6379[1]> flushdb
OK
172.16.1.21:6379[1]> keys *         # 查看1号库下的所有key,结果是没有
(empty list or set)
172.16.1.21:6379[1]> select 0       # 切换至0号库下
OK
172.16.1.21:6379> keys *            # 查看0号库下的所有key
1) "key0"