本文主要详解key-value中vaule为字符串类型的情况,value属于其他的数据类型不适应;有几个命令是通用命令
目录
1.set和get
2.keys
3.exists
4.del
5.expire
6.ttl
7.type
8.object encoding key
9.加减操作
10.字符串操作
11.命令小结
1.set和get
背景:redis存储数据是以键值对的形式,所以这两个命令就是最基础核心的两个,分别是存储键值对和取出键值对
主要学习下面几个命令:
set、get、mset、mget、setnx、setex、psetex
(1)set 语法:set key value,key和value默认为字符串,加或者不加单双引号都可以

存储了key为key1,value为value1的键值对,下面我们多存储几个,方便后的get命令。

(2)get 语法:get key,如果存在key,返回对应value值,否则返回nil

无论value在存储的时候以什么形式,返回的都是字符串形式,而且redis的命令是不区分大小写的
注意事项:get命令只能支持字符串类型的value,如果是其他类型,需要使用其他命令
(3)进阶set
语法:setkey value [expiration EX seconds|PX milliseconds] [NX|XX]
含义:[]是可选项、里面的内容是二选一,下面介绍几种搭配
- set key value ex seconds
含义:设置key-value并且设置存活时间,单位秒s

- set key value px milliseconds
含义:设置key-value并且设置存活时间,单位豪秒ms

- set key value nx
含义:如果key不存在,则创建;如果key存在,则不设置,返回nil(和默认值一样)

- set key value xx
含义:如果key存在,才设置,类似更新key的value;如果key不存在,则不会设置成功,返回nil

- set key value ex seconds nx
含义:设置存活时间并且当key不存在时才会创建成功

(4)setnx
语法:setnx key value
含义:key不存在才能设置成功

(5)setex
语法:setex key seconds value
含义:设置key-value并且指定过期时间,单位秒s

(6)psetex
语法:psetex key milliseconds value
含义:设置key-value并且指定过期时间,单位毫秒ms

(7)mset
语法:mset key1 value1 key2 value2
含义:同时设置多个key-value
时间复杂度:O(N),N为key的数量

(8)mget
语法:mget key1 key2 key3
含义:同时获取多个key的value
时间复杂度:O(N),N为key的数量

2.keys
这是redis的一个全局命令。key固定是字符串,但是value可以是很多种数据类型,所以说全局命令就是可以随便搭配一个数据结构来使用。
语法:keys 通配符key,用来查询匹配的key值,也就是用来查询key的,不是查询value
这里的通配符有五种
先查看所有的key

(1)?
含义:任意匹配一个字符。也就是这个符号可以替换成任意符号

(2)*
含义:可以匹配0个或者多个任意字符

(3)[abcde]
含义:只能匹配[]中的字符,比如这里的abcde字符,其他字符不能匹配

(4)[^e]
含义:排除e字符,匹配除了e字符外的所有字符

(5)[a-b]
含义:可以匹配区间[a,b]的所有字符,其他字符不行

这些命令就类似mysql中的模糊查询,和select *一样,都需要谨慎使用,特别是keys *。
3.exists
语法:exists key1 key2 ……
含义:判断key值是否存在,可以同时判断多个。如果存在,返回存在的个数,否则返回0
(1)一次判断一个

(2)判断多个

- 一般推荐一次查询多个,分开查询会消耗更多的网络资源,成本和时间也更加多。
- 时间复杂度:O(m),m为查询的个数
4.del
语法:del key1 key2 ……
含义:是delete的缩写,删除一个或者多个key,返回成功删除的个数
(1)一次删除一个

(2)一次删除多个

(3)这个操作在redis中不是应该很危险的操作
(4)时间复杂度:O(m),m为删除key的个数
5.expire
语法:expire key encods
含义:给指定的key设置过期时间,key存活时间超过就会自动被删除,默认单位是秒
(1)设置时间

(2)到达过期时间后
如果key过期后就会被删除

6.ttl
语法:ttl key
含义:查看key剩余的时间;如果key不存在,返回-2,key没有关联时间,发挥-1,其他则是返回剩余时间
(1)返回剩余时间

(2)不存在的key

(3)key没被设置过期时间

7.type
语法:type key
含义:返回key对应value的数据类型
(1)返回String

8.object encoding key
语法:object encoding key
含义:查看key对应的value的实际编码方式
(1)用法

9.加减操作
下面介绍的n为整数,时间复杂度都为1
(1)incr
含义:设置key对应的value+1,这里的value必须是整数
返回值:+1结果后的值

(2)incrby
含义:设置key对应的value+n

(3)decr
含义:设置key对应的value-1

(4)decrby
含义:设置key对应的value-n

(5)decrbyfloat
含义:设置key对应的value+n,n可以是任意数,包括浮点数和整数

10.字符串操作
(6)append
含义:在value后面拼接字符串,返回值为拼接好的字符串长度,单位字节
语法:append key value

(7)getrange
含义:截取范围区间的字符串,,范围为前闭后闭。返回也可以为负数,表示倒数第几个
语法:getrange key start end


(8)setrange
含义:修改区间范围内的字符串,从起始点开始修改,修改的内容为value,返回修改后的字符串长度
语法:setrange key offset value

(9)strlen
含义:求字符串长度,单位字节
语法:strlen key

11.命令小结
(1)通用命令小结
| 命令 | 含义 | 时间复杂度 |
|---|---|---|
| keys * | 查看所有的key | O(m) |
| exists key1 key2 … | 返回key存在的个数 | O(m) |
| del key1 key2 … | 删除key | O(m) |
| expire key encods | 给对应key设置过期时间 | O(1) |
| ttl key | 获取key剩余过期时间 | O(1) |
| type key | 获取key对应value的数据类型 | O(1) |
| object encoding key | 查看key对应value的实际编码方式 | O(1) |
(2)字符串类型命令小结
下面的命令操作的value都是为字符串类型,否则会报错
| 命令 | 含义 | 时间复杂度 |
|---|---|---|
| set key value [key2 value] | 设置单个key-value | O(1) |
| get key | 获取key对应的value | O(1) |
| mset key value [key2 value] | 同时设置多个key-value | O(m) |
| mget | 同时获取多个key的value | O(m) |
| setnx | 设置key-value,key不存在才能设置成功 | O(1) |
| setex | 设置kv并设置过期时间,单位秒/s | O(1) |
| psetex | 设置kv并设置过期时间,单位豪秒/ms | O(1) |
| incr key | 指定kye的value+1 | O(1) |
| incrby key n | 指定kye的value+n | O(1) |
| decr key | 指定kye的value-1 | O(1) |
| decrby key n | 指定kye的value-n | O(1) |
| incrbyfloat key n | 指定kye的value+n,n为有理数 | O(1) |
| append key vlaue | 指定key的值追加value | O(1) |
| getrange key start end | 获取指定key的值的范围值 | O(1) |
| setrange key offset value | 修改指定key的值的范围值 | O(1) |
| strlen key | 获取指定key的长度 | O(1) |