本文主要详解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)
|