Redis字符串
Redis 字符串类型的相关命令用于管理redis字符串值。
语法
redis 127.0.0.1:6379> COMMAND KEY_NAME
常用字符串命令
SET key value
设置指定的key值。
127.0.0.1:6379> set k1 "hello"
OK
GET key
获取指定的key值
127.0.0.1:6379> GET k1
"hello"
GETRANGE key start end
返回key中字符串值得字字符
127.0.0.1:6379> GETRANGE k1 1 4
"ello"
GETSET key value
将给定的key值设为value,并返回key的旧值
127.0.0.1:6379> GETSET k1 "hello2"
"hello"
MGET key1 [key1…]
获取所有(一个或多个)给定key的值
127.0.0.1:6379> MGET k1 k2
1) "hello2"
2) "hello"
SETEX key seconds value
将值value关联到key,并将key的过期时间设置为seconds(以秒为单位)。
127.0.0.1:6379> SETEX k1 30 v1
OK
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> TTL k1
(integer) 16
SETNX key value
跟SET类似,但只有key不存在时设置key的值。
127.0.0.1:6379> SETNX k1 "newv1"
(integer) 1
127.0.0.1:6379> GET k1
"newv1"
127.0.0.1:6379> SETNX k1 "newv2"
(integer) 0
127.0.0.1:6379> GET k1
"newv1"
SETRANGE key offset value
用value来覆盖key对应value的下标第offset位置的值,如果offset大于key对应value的长度对应下标,则value放于最后,中间用0补齐。
127.0.0.1:6379> SET k1 vvvv
OK
127.0.0.1:6379> SETRANGE k1 1 t
(integer) 4
127.0.0.1:6379> GET k1
"vtvv"
127.0.0.1:6379>
offset大于value最大下标情况
127.0.0.1:6379> SETRANGE k1 6 t
(integer) 7
127.0.0.1:6379> GET k1
"vtvv\x00\x00t"
127.0.0.1:6379>
STRLEN key
返回key所储存的字符串值得长度
127.0.0.1:6379> STRLEN k1
(integer) 5
MSET key value [key value …]
同时设置一个或多个key-value对。
127.0.0.1:6379> MSET k1 v1 k2 v2
OK
127.0.0.1:6379> GET k1 k2
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> MGET k1 k2
1) "v1"
2) "v2"
MSETNX key value [key value …]
同时设置一个或多个key-value对,并且仅当所有给定key都不存在才生效。如下例子:k1存在,而k4、k5不存在。
127.0.0.1:6379> MSETNX k1 newv1 k4 v4
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> MSETNX k4 v4 5 v5
(integer) 1
PSETEX key milliseconds value
这个命令和SETEX命令类似,但他以毫秒为单位设置key的生存时间,而不是像 SETEX 命令那样,以秒为单位。
127.0.0.1:6379> PSETEX k1 100000 v1
OK
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> PTTL k1
(integer) 91683
INCR key
将key中储存的数字值增一,注意当key对应的value是数字是才能正确执行。
127.0.0.1:6379> SET k1 5
OK
127.0.0.1:6379> INCR k1
(integer) 6
127.0.0.1:6379> GET k1
"6"
127.0.0.1:6379> SET k1 "a2b"
OK
127.0.0.1:6379> INCR k1
(error) ERR value is not an integer or out of range
INCRBY key increment
将key所储存的值加上给定的增量值(increment)。
127.0.0.1:6379> SET k1 5
OK
127.0.0.1:6379> INCRBY k1 5
(integer) 10
127.0.0.1:6379> GET k1
"10"
INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。
127.0.0.1:6379> SET k1 5
OK
127.0.0.1:6379> INCRBYFLOAT k1 3.22
"8.22"
127.0.0.1:6379> GET k1
"8.22"
DECR key
将 key 中储存的数字值减一。
DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。
APPEND key value
如果key已经存在并且是一个字符串,APPEND命令将指定的value追加key原来值(value)的末尾。
127.0.0.1:6379> SET k1 "abc"
OK
127.0.0.1:6379> APPEND k1 "def"
(integer) 6
127.0.0.1:6379> GET k1
"abcdef"
BITCOUNT/BITFIELD/BITOP/BITPOS/SETBIT/GETBIT key offset
在了解这几个命令怎么使用之前,我们得先了解下Redis字符串的存储方式,Redis中的字符串都是以二进制的方式进行存储,比如说我执行如下命令:
127.0.0.1:6379> SET k1 a
OK
a对应的ASCII码是97,转换为二进制数据是01100001,我们BIT相关命令都是对二进制数据进行操作。
GETBIT key offset
获取key对应value在offset处的bit值,以前面提到的k1为例,a对应的二进制数据为01100001,所以当offset为0时,对应的bit值位0;offset为1时,对应的bit值位1;以此类推…如下:
127.0.0.1:6379> GETBIT k1 0
(integer) 0
127.0.0.1:6379> GETBIT k1 1
(integer) 1
127.0.0.1:6379> GETBIT k1 2
(integer) 1
127.0.0.1:6379> GETBIT k1 3
(integer) 0
127.0.0.1:6379> GETBIT k1 4
(integer) 0
127.0.0.1:6379> GETBIT k1 5
(integer) 0
127.0.0.1:6379> GETBIT k1 6
(integer) 0
127.0.0.1:6379> GETBIT k1 7
(integer) 1
SETBIT key offset value
SETBIT 可以用来修改二进制数据,比如 a 对应的 ASCII 码为 97,c 对应的 ASCII 码为 99,97 转为二进制是 01100001 ,99 转为二进制是 01100011 ,两个的差异在于第六位一个是 0 一个是 1 ,通过 SETBIT 命令,我们可以将 k1 的第六位的 0 改为 1 (第六位是从 0 开始算),如下:
127.0.0.1:6379> SETBIT k1 6 1
(integer) 0
127.0.0.1:6379> GET k1
"c"