Redis中文官网命令大全
笔者Redis字符串数据结构源码分析文章推送:Redis 5.0数据结构之SDS简单动态字符串实现源码详解
可以使用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 v1OK127.0.0.1:6379> get k1"v1"127.0.0.1:6379> set k1 v2OK127.0.0.1:6379> get k1"v2"127.0.0.1:6379> set k2 v3 ex 10 nxOK127.0.0.1:6379> ttl k2 //ttl 查看键k2过期时间(integer) 9127.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和mgetmset和mget分别是set和get的复数操作版本,使用方法与set和get基本无差异,只不过能同时设置或获取多个键的值。mset不像set具有设置过期时间等选项,同时mset是原子操作,所有给定的键key都是一次性设置。
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4OK127.0.0.1:6379> mget k1 k2 k3 k41) "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 v1OK127.0.0.1:6379> ttl k1(integer) 7127.0.0.1:6379> get k1"v1"127.0.0.1:6379> ttl k1(integer) -2127.0.0.1:6379> get k1(nil)
setnx和msetnxsetnx全称是set if not exist,即不存在时set,只有在目标键key不存在时才会set,否则什么也不做,msetnx是mset和setnx的结合,传入键keys中只要有任何一个键key存在,则msetnx一个操作也不会执行。
127.0.0.1:6379> setnx k1 v1(integer) 1127.0.0.1:6379> setnx k1 v1(integer) 0127.0.0.1:6379>127.0.0.1:6379> msetnx k1 v1 k2 v2(integer) 0127.0.0.1:6379> msetnx k2 v2 k3 v3(integer) 1127.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 aaaOK127.0.0.1:6379> setrange k1 1 aaaa(integer) 5127.0.0.1:6379> get k1"aaaaa"127.0.0.1:6379> setrange k1 8 bbb(integer) 11127.0.0.1:6379> get k1"aaaaax00x00x00bbb"
使用getrange可以获取键key的子串,即返回原value值[start, stop]闭区间内的部分,可以使start或stop值为负数,表示从原value尾部开始获取。
127.0.0.1:6379> set k1 123456789OK127.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和decrincr和decr用法相同,使用incr自增1,使用decr自减1。
如果键key不存在,则创建相应键key并设初值为0后自增或自减。如果键key的value值并非string类型或存储的字符串不能表示为一个整数,则返回错误。
用法相同,只演示incr:
127.0.0.1:6379> set k1 1OK127.0.0.1:6379> incr k1(integer) 2127.0.0.1:6379> decr k1(integer) 1127.0.0.1:6379> incr k2(integer) 1
incrby和decrby与incr和decr用法完全相同,只不过可以指定自运算步长。
127.0.0.1:6379> set k1 1OK127.0.0.1:6379> incrby k1 5(integer) 6127.0.0.1:6379> decrby k1 3(integer) 3127.0.0.1:6379> incrby k2 10(integer) 10
其他 strlen返回键key的value值长度,如果value值非string类型则返回错误
127.0.0.1:6379> set k1 abcOK127.0.0.1:6379> strlen k1(integer) 3
append如果键key存在,则将新value值追加到原value值末尾,如果键key不存在,效果等同于set,效果等同于创建一个键key,并将其值设置为传入value。
127.0.0.1:6379> set k1 aaaOK127.0.0.1:6379> append k1 bbb(integer) 6127.0.0.1:6379> get k1"aaabbb"127.0.0.1:6379> append k2 ccc(integer) 3127.0.0.1:6379> get k2"ccc"