字符串类型是最常用的数据类型。Redis中的所有键都是字符串。
相关命令
SET、GET、STRLEN、APPEND、SETRANGE、SETNX、MSET、MGET、OBJECT
操作
1、使用redis-cli连接到Redis
2、使用SET命令将一个字符串的值关联到一个键。
127.0.0.1:6379> SET "test-1" "Hello World!"
OK
3、使用GET命令获取字符串的值
127.0.0.1:6379> GET test-1
"Hello World!"
4、使用GET获取一个不存在的Key是,会返回(nil)
127.0.0.1:6379> GET test-2
(nil)
5、使用STRLEN命令返回键字符串对应值的长度
127.0.0.1:6379> STRLEN test-1
(integer) 12
6、使用STRLEN命令获取不存在的键对应值的长度的时候,返回0
127.0.0.1:6379> STRLEN test-2
(integer) 0
7、使用APPEND命令向一个键对应值的后面追加字符串
127.0.0.1:6379> APPEND test-1 " Hai"
(integer) 16
127.0.0.1:6379> GET test-1
"Hello World! Hai"
8、使用SETRANGE命令可以覆盖字符串值的一部分
127.0.0.1:6379> SETRANGE test-1 10 "X123456"
(integer) 17
127.0.0.1:6379> GET test-1
"Hello WorlX123456"
9、SET命令会覆盖键此前对应的值,有时候我们不希望覆盖,这时候可以使用EXIST命令来判断键是否存在。但是Redis给我们提供了SETNX命令,用于原子性的设置键的值,如果键已经存在,则返回0,表示不覆盖原来的值,不存在,则返回1。
127.0.0.1:6379> SETNX test-2 "ABC"
(integer) 1
127.0.0.1:6379> SETNX test-2 "ABC"
(integer) 0
#等价下面的格式
127.0.0.1:6379> SET test-3 "ABC" NX
OK
127.0.0.1:6379> SET test-3 "ABC" NX
(nil)
SET命令中的NX选项与SETNX一样。相反,SET命令的XX选项表示仅仅存在键才设置值。
127.0.0.1:6379> SET test-3 "ABC" XX
OK
127.0.0.1:6379> SET test-4 "ABC" XX
(nil)
10、使用MSET命令来一次性设置多个值
127.0.0.1:6379> MSET test-4 "DEF" test-5 "HHH"
OK
11、使用MGET命令一次性来获取多个值
127.0.0.1:6379> MGET test-4 test-5
1) "DEF"
2) "HHH"
Redis字符串内部是如何编码的?
Redis使用了三种不同的编码方式来存储字符串对象,并会根据每个字符串值自动决定所使用的编码方式:
- int:用于能够使用64位有符号整数表示的字符串
- embstr:用于长度小于或等于44字节的字符串,这种类型的编码在内存使用和性能方面更有效率
- raw:用于长度大于44字节的字符串
可以使用OBJECT命令来查看与键相关联的Redis值对象的内部编码方式:127.0.0.1:6379> SET key1 12345 OK 127.0.0.1:6379> OBJECT ENCODING key1 "int" 127.0.0.1:6379> 127.0.0.1:6379> SET key2 "abcdefg" OK 127.0.0.1:6379> OBJECT ENCODING key2 "embstr" 127.0.0.1:6379> 127.0.0.1:6379> SET key3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" OK 127.0.0.1:6379> OBJECT ENCODING key3 "raw"