字符串类型是最常用的数据类型。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"