redis 数据类型为string命令整理以及示例
#设置值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
SET
命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。
所以我依次介绍下set的不同模式,实例中GET获取String值不再介绍。
#第一种常规
127.0.0.1:6379> set Current 2018-03-04 OK 127.0.0.1:6379> get Current "2018-03-04"
#设置有生存时间的key
#将CurrentHaveTimeOut设置为120s的生成时间
127.0.0.1:6379> set CurrentHaveTimeOut test Ex 120 OK
#查看时间,还有108s会被删除
127.0.0.1:6379> ttl CurrentHaveTimeOut (integer) 108
#过了2分钟再次获取
127.0.0.1:6379> get CurrentHaveTimeOut (nil)
#设置为仅当key不存在的时候才能设置
127.0.0.1:6379> set CurrentHaveNx test NX OK
#再次重复设置
127.0.0.1:6379> set CurrentHaveNx test NX (nil)
#和NX相反的是XX,仅有key存在的时候才能修改
#值不存在的时候设置失败
127.0.0.1:6379> set CurrentHaveXx test XX (nil)
#设置值
127.0.0.1:6379> set CurrentHaveXx test1 OK
#进行XX模式修改重设成功
127.0.0.1:6379> set CurrentHaveXx test XX OK 127.0.0.1:6379> get CurrentHaveXx "test"
#tips:NX模式可用来制作redis锁。依赖的就是用NXSET来判断锁是否存在
#给String追加值
APPEND key value
如果 key
已经存在,并且值为字符串,那么这个命令会把 value
追加到原来值(value)的结尾。 如果 key
不存在,那么它将首先创建一个空字符串的key
,再执行追加操作
127.0.0.1:6379> EXISTS key (integer) 0 127.0.0.1:6379> APPEND key gavin (integer) 5 127.0.0.1:6379> get key "gavin" 127.0.0.1:6379> APPEND key jun (integer) 8 127.0.0.1:6379> get key "gavinjun"
#指定位置字符串替换
SETRANGE key offset value
这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。
#情况一正常情况,offset不超过长度
127.0.0.1:6379> set key1 "hello world!" OK 127.0.0.1:6379> get key1 "hello world!" 127.0.0.1:6379> SETRANGE key1 6 redis (integer) 12 127.0.0.1:6379> get key1 "hello redis!"
#情况二 String不存在,和存在但是offset大于字符串长度
#不存在的情况,会进行补0操作
127.0.0.1:6379> SETRANGE key2 3 test (integer) 7 127.0.0.1:6379> get key2 "\x00\x00\x00test" #offset大于字符串长度,情况和上面类似,都是前补0 127.0.0.1:6379> set key3 t OK 127.0.0.1:6379> get key3 "t" 127.0.0.1:6379> SETRANGE key3 3 go (integer) 5 127.0.0.1:6379> get key3 "t\x00\x00go"
#获取key的字符串长度
STRLEN key
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
127.0.0.1:6379> STRLEN key3 (integer) 5 #举例一种非string类型的情况 127.0.0.1:6379> LPUSH list 1 (integer) 1 127.0.0.1:6379> LRANGE list 0 -1 1) "1" 127.0.0.1:6379> STRLEN list (error) WRONGTYPE Operation against a key holding the wrong kind of value #当key不存在的情况返回0 127.0.0.1:6379> STRLEN key4 (integer) 0
#将自增自减和GETSET先获取后重置放一起介绍
INCR key
对存储在指定key
的数值执行原子的加1操作。
如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0
。
如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,
那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。
这个操作仅限于64位的有符号整型数据
#情况1key不存在,会从0自增 127.0.0.1:6379> INCR key5 (integer) 1 127.0.0.1:6379> get key5 "1" #情况2key不可以转成整数 127.0.0.1:6379> set key7 test OK 127.0.0.1:6379> INCR key7 (error) ERR value is not an integer or out of range #情况3key是浮点数,结果和上面一致 127.0.0.1:6379> set key6 3.1 OK 127.0.0.1:6379> INCR key6 (error) ERR value is not an integer or out of range #情况4正常情况 127.0.0.1:6379> set key4 1 OK 127.0.0.1:6379> get key4 "1" 127.0.0.1:6379> INCR key4 (integer) 2 127.0.0.1:6379> get key4 "2"
DECR key
对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
#不做描述,情景和自增INCR一致
GETSET key value
自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。
127.0.0.1:6379> INCR key8 (integer) 1 127.0.0.1:6379> GETSET key8 2 "1" 127.0.0.1:6379> get key8 "2"
#批量设置和获取 略,和set类似。具体可以查看redis手册