Redis中文官网命令大全
笔者Redis字符串数据结构源码分析文章推送:Redis 5.0数据结构之SDS简单动态字符串实现源码详解
string常用命令汇总
命令 | 语法 | 语义 |
---|---|---|
set | set key value [EX|PX time] [NX|XX] | 将键key设定为value值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,可以选用EX或PX来指定键key的过期时间,可以选用NX或XX来指定键key不存在或存在时才执行命令 |
get | get key | 返回键key的value,如果key不存在,返回nil如果键key的value不是string,就返回错误 |
mset | mset key value [key value …] | set的复数操作版本,将键keys设定为values值 |
mget | mget key [key … | get的复数操作版本,返回键keys的values值,对于不存在的键key和非string类型的value值,一律返回nil |
setex | setex key seconds value | 将键key设定为value值,并且设置键在seconds秒后过期 |
psetex | psetex key milliseconds value | 将键key设定为value值,并且设置键在milliseconds毫秒后过期 |
setnx | setnx key value | 将键key的值设为value值,当目标键key不存在时效果等同于set,键key存在时什么也不做 |
msetnx | msetnx key value [key value …] | setnx的复数操作版本,只要键keys中任一key存在,则msetnx一个set操作也不会执行 |
setrange | setrange key offset value | 覆盖键key原value值的一部分,offset是原value起始位置,新的value值从offset位置开始覆盖 |
getrange | getrange key start end | 返回键key的子串,子串为value值在start和end区间内的部分 |
getset | getset key value | 将键key的value值返回,并使用传入新value值覆盖。如果key存在但是对应的value不是字符串,就返回错误 |
strlen | strlen key | 返回键key的value值长度,如果value值非string类型则返回错误 |
append | append key value | 如果键key存在,则将新value值追加到原value值的结尾,如果键key不存在,则创建一个空字符串键key后执行追加操作 |
incr | incr key | 键key的value值自增1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误 |
incrby | incrby key increment | 键key的value值自增increment ,如果value值非string类型或其存储的字符串不能表示为整数则返回错误 |
decr | decr key | 键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误 |
decrby | decrby key decrement | 键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误 |
命令演示
setget系列
set和get
可以使用set方法创建一个键并设置value值或者改变现有键key的value值,2.6.12版本以后Redis为set添加了如下几个可选选项:
- EX seconds – 设置键key的过期时间,单位时秒
- PX milliseconds – 设置键key的过期时间,单位时毫秒
- NX – 只有键key不存在的时候才会设置key的值
- XX – 只有键key存在的时候才会设置key的值
有了以上几个可选选项后,可以使得单独的set命令就具有setex、setnx等命令的功能。当set执行成功时,此前键key设置的过期时间会被覆盖或失效。
可以使用get方法获取某个键key的value值,目标键key不存在时返回nil,目标键key的值不是string类型时返回错误。
使用示例如下:
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> get k1
"v2"
127.0.0.1:6379> set k2 v3 ex 10 nx
OK
127.0.0.1:6379> ttl k2 //ttl 查看键k2过期时间
(integer) 9
127.0.0.1:6379> get k2
"v3"
127.0.0.1:6379> ttl k2
(integer) -2 // k2过期
127.0.0.1:6379> get k2
(nil)
mset和mget
mset和mget分别是set和get的复数操作版本,使用方法与set和get基本无差异,只不过能同时设置或获取多个键的值。mset不像set具有设置过期时间等选项,同时mset是原子操作,所有给定的键key都是一次性设置。
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
setex和psetex
二者使用方法完全相同,都是为键key设置value值并设定过期时间,唯一的区别是使用setex时设定的时间单位是秒s,使用psetex时设定的时间单位是毫秒ms。使用setex比连续使用set和expire执行效率更快。
只演示setex,psetex使用方法完全相同。
127.0.0.1:6379> setex k1 10 v1
OK
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> get k1
(nil)
setnx和msetnx
setnx全称是set if not exist,即不存在时set,只有在目标键key不存在时才会set,否则什么也不做,msetnx是mset和setnx的结合,传入键keys中只要有任何一个键key存在,则msetnx一个操作也不会执行。
127.0.0.1:6379> setnx k1 v1
(integer) 1
127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 0
127.0.0.1:6379> msetnx k2 v2 k3 v3
(integer) 1
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
setrange和getrange
使用setrange可以覆盖目标键key原value值的一部分,offset作为覆盖的起始位置,有两种特殊情况。
- 当传入的新value值的长度 > 原value长度-offset时。效果等同于在原value的offset的位置覆盖追加新value,例如键key原value值为aaa,offset为1,新的value值为bbb,最终键key的value为abbb。
- 当传入offset > 键key原value值的长度时。原value末尾位置到offset位置部分用0补全,然后追加新value值,例如key原value值为aaa,offset为5,新的value值为bbb,最终键key的value为aaa00bbb。
127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> setrange k1 1 aaaa
(integer) 5
127.0.0.1:6379> get k1
"aaaaa"
127.0.0.1:6379> setrange k1 8 bbb
(integer) 11
127.0.0.1:6379> get k1
"aaaaa\x00\x00\x00bbb"
使用getrange可以获取键key的子串,即返回原value值[start, stop]闭区间内的部分,可以使start或stop值为负数,表示从原value尾部开始获取。
127.0.0.1:6379> set k1 123456789
OK
127.0.0.1:6379> getrange k1 1 3
"234"
127.0.0.1:6379> getrange k1 0 -1
"123456789"
127.0.0.1:6379> getrange k1 -5 -1
"56789"
getset
将键key的旧value值返回,并使用传入新value值覆盖。
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 v2
"v1"
127.0.0.1:6379> get k1
"v2"
自运算
incr和decr
incr和decr用法相同,使用incr自增1,使用decr自减1。
如果键key不存在,则创建相应键key并设初值为0后自增或自减。如果键key的value值并非string类型或存储的字符串不能表示为一个整数,则返回错误。
用法相同,只演示incr:
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> incr k2
(integer) 1
incrby和decrby
与incr和decr用法完全相同,只不过可以指定自运算步长。
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incrby k1 5
(integer) 6
127.0.0.1:6379> decrby k1 3
(integer) 3
127.0.0.1:6379> incrby k2 10
(integer) 10
其他
strlen
返回键key的value值长度,如果value值非string类型则返回错误
127.0.0.1:6379> set k1 abc
OK
127.0.0.1:6379> strlen k1
(integer) 3
append
如果键key存在,则将新value值追加到原value值末尾,如果键key不存在,效果等同于set,效果等同于创建一个键key,并将其值设置为传入value。
127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> append k1 bbb
(integer) 6
127.0.0.1:6379> get k1
"aaabbb"
127.0.0.1:6379> append k2 ccc
(integer) 3
127.0.0.1:6379> get k2
"ccc"