Bootstrap

Redis - 通用命令

了解Redis客户端

想要输入Redis命令,必须先进入Redis客户端

使用redis-cli连接本机的命令行客户端

redis-cli

如果想连接其他的ip和端口的客户端,可以使用下面命令

redis-cli -h 主机 -p 端口

在这里插入图片描述

遇到不会的命令,可以查看Redis官方文档Commands | Docs

set 和 get

set的用法

set key value

key和value是字符串类型的

例如:
在这里插入图片描述

key和value是不需要加上引号的,如果加上也是可以的(单引号和双引号都行)
在这里插入图片描述

另外,Redis的命令是不区分大小写的

get的用法

get key

在这里插入图片描述

如果输入的key不存在,会返回nil,表示空,和 C++和Java中的NULL、null差不多

在这里插入图片描述

Redis全局命令

Redis是键值对结构,key固定是字符串,value可以是字符串、哈希表、列表、集合、有序集合,操作不同的数据结构会有不同的命令

全局命令,是可以搭配任意一个数据结构来使用的命令

keys命令

keys pattern

上述命令会返回所有满足pattern 样式的key,这个命令的时间复杂度是O(N)

pattern书写规则:

  • ?匹配任意一个字符

  • * 匹配0个或者多个任意字符

  • [ab] 只能匹配a或者b,其他都不行

  • [^a] 表示排除a,除了a其他都能匹配

  • [a-e] 表示a~e这个范围内都匹配(闭区间)

例如:
先设置如下key
在这里插入图片描述

?匹配任意字符
在这里插入图片描述

* 匹配0个或者多个任意字符
在这里插入图片描述

[ae] 匹配a和e
在这里插入图片描述

[^e] 除了e都能匹配
在这里插入图片描述

[a-e] 匹配a~e范围内的值(闭区间)
在这里插入图片描述

查看Redis中所有的key

keys *

在这里插入图片描述

这个命令在生产环境中一般不推荐使用,因为执行keys * 的时间可能会非常长,会使Redis服务器阻塞,无法给其他的客户端提供服务

exists命令

这个命令的作用是判断key是否存在,可以判断一个key,也可以判断多个key,多个key使用空格分开,返回值是key存在的个数,这个操作的时间复杂度是O(N)N只的是key的个数

exists key [key ...]

在这里插入图片描述

exists key1 key2的写法和exists key1、exists key2分开的写法的区别:分开写会产生更多的网络通信,一次网络通信的成本比较高,所以尽可能一次网络通信完成多个操作

del命令

删除指定的key,可以一次删除一个或者多个

del key [key ...]

返回值是删除key的个数
在这里插入图片描述

expire命令

作用是给指定的key设置过期时间(前提是这个key已经存在),单位秒,达到指定的时间之后,这个key就会被自动删除

expire key seconds

返回值1表示设置成功,0表示设置失败

在这里插入图片描述

除了expire外,还有一个命令pexpire用法和expire一致,只不过pexpire的单位是毫秒

pexpire key milliseconds

ttl命令

time to alive,使用这个命令可以查看指定的key的过期时间还剩多少

ttl key

返回值是是剩余的过期时间,-1表示没有设置过期时间,-2表示key不存在,单位是毫秒

在这里插入图片描述

另外还有一个pttl命令,用法和ttl一致,只不过pttl的时间单位是毫秒

pttl key

Redis中key的过期策略

一个Redis中,可能同时存在很多key,这些key中很可能大部分都有过期时间,Redis服务器是如何知道哪些key已经过期要被删除,哪些key还没过期?

Redis的策略是:定期删除和惰性删除结合

1、定期删除:每次只抽取一部分的key检查是否过期,因为如果把所有的key都扫描一遍,成本比较大,Redis是一个单线程的程序,主要任务(处理命令、扫描过期的key等任务)都是在一个线程中完成,如果扫描过期key消耗的时间过多,处理正常请求命令就被阻塞了,这时Redis不能快速的处理请求,所以不能让扫描过期key的时间消耗过多

2、惰性删除:假设这个key已经到过期时间,但是暂时还没删除(还在服务器中存在),后面再次访问这个key时,这次的访问就会让Redis触发删除key的操作,同时返回一个nil。也就是说,当我们不用这个key的时候,这个key已经过期了,但是还在服务器中存储着,当我们使用到的服务器时候发现key已经过期,这时才会触发删除操作。

虽然有上述两种策略的结合,但是可能还会有很多过期的key残留,因此Redis提供了内存淘汰策略

type

查看key对应的value的类型

type key

key对应的value的类型有:none(表示key不存在)、string(字符串)、list(列表)、set(集合)、zset(有序集合)、hash(哈希表)、stream(当Redis作为消息队列时使用stream类型的value),type命令时间复杂度为O(1)

在这里插入图片描述

;