String 字符串
是最基本的 redis 数据类型,比如常见的 set key value
就是 String 类型。
底层实现
String 内部是基于动态字符串 SDS 实现的,这和 C 语言的字符串不一样。
- SDS 不仅可以保存文本信息也可以保存二进制数据,所以视频、音频、图片都可以用 SDS 保存。
为啥可以存储二进制数据,其底层不也是 char 数组吗,而且还有
\0
,存二进制不是会造成误判吗?
因为 SDS 底层在对象头里加了一个字段,记录当前字符串的长度,忽略了 C 语言字符串的\0
,所以可以直接用来获取字符串长度。但是不建议用 redis 存储,因为一般这些数据的体积很大,而 String 的 value 最大限制为
512M
- SDS 自带 len 变量记录数据长度,可以很快获得数据长度。
- SDS 拼接字符串不会造成缓冲区溢出,因为在拼接字符串之前会检测并会自动扩容(预分配机制)。
常用命令 (包含应用场景)
列举一些常用的:
- 设置 key 的值:
set key value
获取 key 的值:get key
(可用于 Session 存储和读取) - 分布式锁的应用(一种互斥锁):
SETNX key value
存在就不能创建,不存在则可以创建。 - 指定多个 key - value :
MSET key1 value1 key2 value2
MSET 命令后每一对就是一个键值对。 - 获取 key 对应的数据长度:
STRLEN key
- 删除键值对:
DEL key
(通用)