Redis中文官网命令大全
笔者Redis字符串数据结构源码分析文章推送:Redis 5.0数据结构之SDS简单动态字符串实现源码详解
| 命令 | 语法 | 语义 |
|---|---|---|
| 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类型或其存储的字符串不能表示为整数则返回错误 |
可以使用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 "aaaaax00x00x00bbb"
使用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) 1incrby和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) 3append
如果键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"



