Redis字符串详解
Redis中的字符串有三种编码: raw
、embstr
、int
embstr:短字符串和浮点数,int是整数字符串,raw是可变且任意长度字符串
通过OBJECT ENCODING <key>
即可查看字符串编码
命令详解
-
SET:设置一个字符串,
SET <key> <value> [EX 过期时间(s)] [PX 过期时间(ms)] [NX(不存在时设置)|XX(存在时设置)]
,EX
和PX
不能同时设置SET a abc // 不设置过期时间和条件 SET a abc EX 5 // 5秒钟过期 SET a abc PX 5000 // 5000毫秒过期 SET a abc NX // 不存在时设置 SET a abc XX // 存在时设置
-
SETNX:当key不存在时设置,
SET <key> <value>
,相当于SET <key> <value> NX
-
SETEX:设置key过期时间并设置新值,
SETEX <key> <过期时间(s)> <value>
,相当于SET <key> <value> <EX 过期时间(s)>
-
PSETEX:命令和SETEX一样,只不过时间单位是毫秒
-
GET:获取字符串值,
GET <key>
SET a abc GET a // abc
-
GETSET:获取并设置新值,
GETSET <key> <value>
SET a abc GETSET a def // abc GET a // def
-
STRLEN:获取字符串长度,
STRLEN <key>
SET a abc STRLEN a // 3
-
APPEND:添加字符串到当前key指向的字符串末尾,
APPEND <key> <value>
SET a abc APPEND a " edf" GET a // abc edf
-
SETRANGE:从指定位置开始修改原来字符串的值,字符串下标从0开始,
SETRANGE <key> <offset> <replaceValue>
SET a abc SETRANGE a 0 00 GET a // 00c
-
GETRANGE:返回指定范围的字符串,-1代表字符串最后位置,
GETRANGE <key> <start> <end>
SET a abc GETRANGE a 0 -1 // abc
-
INCR:让int编码字符串自增1,
INCR <key>
SET a 1 INCR a GET a // 2
-
INCRBY:让int编码字符串加上指定数值,
INCRBY <key> <addValue>
SET a 1 INCRBY a 2 GET a // 3
-
INCRBYFLOAT:让浮点数加上指定数值,如果对int编码使用,会被转换成embstr编码,
INCRBYFLOAT <key> <addValue>
SET a 1 OBJECT ENCODING a // int INCRBYFLOAT a 3.8 OBJECT ENCODING a // embstr GET a // 4.8
-
DECR:int编码字符串自减,
DECR <key>
SET a 2 DECR a GET a // 1
-
DECRBY:int编码减去指定值,和
INCRBY
用法一样 -
MSET:一次性设置多个字符串,
MSET <key> <value> [key value ..]
MSET a a1 b b1 c c1
-
MGET:一次性获取多个字符串,
MGET <key> [key ..]
MGET a b c // a1 b1 c1
-
MSETNX:设置多个字符串,如果有一个key已存在,则拒绝设置所有字符串,
MSETNX <key> <value> [key value ..]
SET a a1 MSETNX b b1 c c1 // ok KEYS * // a b c DEL b c MSETNX a a1 b b1 c c1 // fail KEYS * // a
embstr、int、raw的转换机制
- APPEND命令会把int和embstr编码转成raw
- embstr编码的字符串在长度大于44时会被转换成raw编码
- INCRBYFLOAT命令会将整数类型转成浮点型(embstr编码)