1.keys:返回所有满足条件的key,比如:
KEYS pattern
时间复杂度:O(N),返回值:匹配pattern的所有key。
• h?llo 匹配 hello , hallo 和 hxllo
• h*llo 匹配 hllo 和 heeeello
• h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
• h[^e]llo 匹配 hallo , hbllo ,…但不匹配 hello
• h[a-b]llo 匹配 hallo 和 hbllo
注意:生产环境一般都会禁止使用keys *,因为生产环境上key可能会非常多,而redis是一个单线程的服务器,执行keys *可能时间非常长,这样就会使Redis阻塞无法给其他客户端提供服务!!
2.exists:判断某个key是否存在。
EXISTS key [key ...]
时间复杂度:O(1),返回值:key存在的个数。
3.del:删除指定的key。
DEL key [key ...]
时间复杂度:O(1),返回值:成功删除key的个数。
4.expire:为指定的key添加秒级的过期时间。
ttl:获取指定key的过期时间。
EXPIRE key seconds
TTL key
时间复杂度:O(1),返回值:1表示设置成功。0表示设置失败。
时间复杂度:O(1),返回值:剩余过期时间。-1表示没有关联过期时间,-2表示key不存在。
5.type:返回key对应的数据类型。
TYPE key
时间复杂度:O(1),返回值: none , string , list , set , zset , hash ,stream 。
6.set:将string类型的value设置到key中。如果key之前存在,则覆盖,无论原来的数据类型是什么,之前关于此key的ttl也全部失效。
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
如果设置成功,返回OK。如果由于set指定了NX或者XX但条件不满足,set不会执行,并返回(nil)。
时间复杂度:O(1)
• EX seconds⸺使用秒作为单位设置key的过期时间。
• PX milliseconds⸺使用毫秒作为单位设置key的过期时间。
• NX ⸺只在key不存在时才进行设置,即如果key之前已经存在,设置不执行。
• XX ⸺只在key存在时才进行设置,即如果key之前不存在,设置不执行。
7.get:获取key对应的value。如果key不存在,返回nil。如果value的数据类型不是string,会报错 。
GET key
时间复杂度:O(1),返回值:key对应的value,或者nil当key不存在。
8.mget:⼀次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil。
MGET key [key ...]
时间复杂度:O(N)N是key数量,返回值:对应value的列表。
9.mset:⼀次性设置多个key的值。
MSET key value [key value ...]
时间复杂度:O(N)N是key数量,返回值:永远是OK。
多次get和单次mget区别
使⽤mget/mset由于可以有效地减少了网络时间,所以性能相较更⾼。假设网络耗时1毫秒,命令执行时间耗时0.1毫秒 。
1000次get耗时1000x1+1000x0.1=1100毫秒,1次mget1000个键耗时1x1+1000x0.1=101毫秒.
但是要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞.
10.setnx:设置key-value,但只允许在key不存在的情况下设置。
SETNX key value
时间复杂度:O(1),返回值:1表示设置成功。0表示没有设置。
11、incr:将key对应的string表⽰的数字加1。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
INCR key
时间复杂度:O(1),返回值:integer类型的加完后的数值
12.incrby:将key对应的string表⽰的数字加上对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
INCRBY key decrement
时间复杂度:O(1),返回值:integer类型的加完后的数值
13.decr:将key对应的string表⽰的数字减⼀。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
DECR key
时间复杂度:O(1),返回值:integer类型的减完后的数值。
14.decrby:将key对应的string表⽰的数字减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
DECRBY key decrement
时间复杂度:O(1),返回值:integer类型的减完后的数值。
15。incrbyfloat:将key对应的string表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的不是string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数。
INCRBYFLOAT key increment
时间复杂度:O(1),返回值:加/减完后的数值 。
16.append:如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在,则效果等同于set命令。
APPEND KEY VALUE
时间复杂度:O(1).追加的字符串⼀般⻓度较短,可以视为O(1),返回值:追加完成之后string的⻓度。
17.getrange:返回key对应的string的⼦串,由start和end确定(左闭右闭)。可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的⻓度调整成正确的值。
GETRANGE key start end
时间复杂度:O(N).N为[start,end]区间的⻓度.由于string通常⽐较短,可以视为是O(1)
返回值:string类型的⼦串
18.setrange:覆盖字符串的⼀部分,从指定的offset开始
SETRANGE key offset value
时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1).返回值:替换后的string的⻓度
19.strlen:获取key对应的string的⻓度。当key存放的类似不是string时,报错。
STRLEN KEY
时间复杂度:O(1),返回值:string的⻓度。或者当key不存在时,返回0。
总结:
命令 | 解释 | 时间复杂度 |
---|---|---|
set key value [keyvalue…] | 设置key的值是value | O(n),n是键个数 |
get key | 获取key的值 | O(1) |
del key [key…] | 删除指定的key | O(n),n是键个数 |
mset key value [keyvalue …] | 批量设置指定的key和value | O(n),n是键个数 |
mget key [key…] | 批量获取key的值 | O(n),n是键个数 |
incr key | 指定的key的值 +1 | O(1) |
decr key | 指定的key的值 -1 | O(1) |
incrby key n | 指定的key的值 +n | O(1) |
decrby key n | 指定的key的值 -n | O(1) |
incrbyfloat key n | 指定的key的值+n | O(1) |
append key value | 指定的key的值追加value | O(1) |
strlen key | 获取指定key的值的⻓度 | O(1) |
setrange key offset value | 覆盖指定key的从offset开始的部分值 | O(n),n是字符 串⻓度,通常视 为O(1) |
getrange key start end | 获取指定key的从start到end的部分值 | O(n),n是字符 串⻓度,通常视 为O(1) |