字符串类型
字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户邮箱、JSON化的对象甚至一张图片。一个字符串类型键允许存储的数据最大容量为512M。字符串类型是其他数据类型的基础,其他数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。例如,列表类型是以列表的形式组织字符串,而集合类型是以集合的形式组织字符串。
1. 赋值与取值
SET key value
GET key
SET和GET是Redis中最简单的两个命令,他们实现的功能和编程语言中变量读写相似:
127.0.0.1:6379> SET key hello
OK
127.0.0.1:6379> GET key
"hello"
当键不存在时,会返回空的结果
2. 递增数字
INCR key:递增1
字符串可以存储任何形式的字符串,当存储的字符串为整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值,当操作键不存在时,默认键值为0,当操作键值不为整数时,Redis会提示错误:
127.0.0.1:6379> INCR num
(integer) 1
127.0.0.1:6379> INCR num
(integer) 2
127.0.0.1:6379> SET foo hello
OK
127.0.0.1:6379> INCR foo
(error) ERR value is not an integer or out of range
INCRBY命令与INCR命令基本一样,只不过前者可以通过increment 参数指定一个增加的数值,如:
127.0.0.1:6379> INCRBY bar 2
(integer) 2
127.0.0.1:6379> INCRBY bar 3
(integer) 5
递减1:DECR key
减少指定整数:DECRBY key decrement
增加指定浮点数:INCREBYFLOAT key increment
127.0.0.1:6379> INCRBYFLOAT bar 2.7
"8.9"
127.0.0.1:6379> INCRBYFLOAT bar 5e+4
"50008.89999999999999858"
向尾部追加值:
APPEND key value
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> APPEND key " world"
(integer) 12
127.0.0.1:6379> GET key
"hello world"
获取字符串长度:STRLEN key 如果键不存在,则返回0
同时设置/获得多个键值
MGET key [key ...]
MSET key value [key value ...]
MGET/MSET与GET/SET相似,不过MGET/MSET可以同时获得/设置多个键值,例如:
127.0.0.1:6379> MSET key1 v1 key2 v2 key3 v3
OK
127.0.0.1:6379> GET key1
"v1"
127.0.0.1:6379> MGET key2 key3
1) "v2"
2) "v3"
3. 位操作
GETBIT key offsetSETBIT key offset value
BITCOUNT key [start] [end]
BITOP operation destkey key [key ...]
例如,将foo设置为bar: SET foo bar
bar的三个字母对应的ASCII码分别为98、97和114,转换成二进制后分别为01100010、01100001和01110010(一个字母占8bit),GETBIT命令可以获得一个字符串类型键指定位置的二进制位的值(0或者1),索引从0开始:
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> GETBIT foo 0
(integer) 0
127.0.0.1:6379> GETBIT foo 8
(integer) 0
127.0.0.1:6379> GETBIT foo 9
(integer) 1
如果所需要获得的二进制位的索引超出了键值的二进制位的实际长度,则默认为0:
SETBIT命令可以设置字符串类型键值指定位置的二进制位的值,返回值是该位置的旧值,如果设置的位置超出了键值的二进制位的长度,SETBIT命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制值,会自动将前面的值赋值为0
BITCOUTN命令可以获得字符串类型键中值是1的二进制位个数,后面还可以跟字节范围,如统计foo的前两个字节(即:‘ba'):
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> BITCOUNT foo
(integer) 10
127.0.0.1:6379> BITCOUNT foo 0 1
(integer) 6
BITOP命令可以对多个字符串类型键进行位运算,结果存储在destkey参数指定的键中。BITOP命令运算操作有AND、OR、XOR和NOT,比如:
127.0.0.1:6379> SET foo1 bar
OK
127.0.0.1:6379> SET foo2 aar
OK
127.0.0.1:6379> BITOP OR result foo1 foo2
(integer) 3
127.0.0.1:6379> GET result
"car"
利用位操作可以非常紧凑地存错布尔值。比如某网站的每个用户都有一个递增的整数ID,如果使用一个字串符类型键配合位操作来记录每个用户的性别,那个记录100W个用户的性别只需要占用100KB的空间,而且GETBIT和SETBIT的时间复杂度为O(1),所有读取二进制位的性能很高。