Redis 的 String 类型内部使用了一种叫做 SDS(Simple Dynamic String)的结构。SDS 的设计比传统的 C 语言字符串更加高效和安全,主要特点如下:
头部信息:SDS 的头部包含了一些元数据,比如字符串的长度、剩余可用空间的长度以及一个标志位,这允许 Redis 快速获取字符串的长度,避免频繁的遍历操作。
二进制安全:SDS 保证二进制安全,即字符串可以包含任何数据,包括空字符(\0),这对于存储如图片、视频等二进制数据至关重要。
空间预分配和惰性空间释放:当 SDS 需要增长时,Redis 会预分配比实际需要更多的空间,减少连续增长操作时的内存重新分配次数。当 SDS 缩短时,Redis 不会立即释放多余的空间,而是标记为可用,以便未来的扩展操作可以直接使用。
常用命令
Redis 为字符串类型提供了一系列命令,以下是一些常用的命令及其功能:
- SET:设置一个键的值。如果这个键之前已经存在,那么它的旧值会被新值覆盖。
- GET:获取一个键的值。
- MGET:获取多个键的值。
- MSET:同时设置多个键的值。
- SETNX:只有在键不存在时才进行设置。
- APPEND:Redis 中的一个字符串操作命令,用于将指定的值追加到键所关联的字符串的末尾。
- STRLEN:一个用于获取字符串类型键的长度的命令。
- 计数命令:如 INCR、DECR、INCRBY、DECRBY 等,用于对存储在字符串中的数字值进行原子增减操作 。
- DEL: 删除键。
SET设置值,GET获取值:
使用MSET获取多个键,并用MGET获取这些键的值,如图:
使用SETNX设置之前不存在的键,如果键存在设置失败返回0,如果成功返回1:
使用APPEND添加内容,如果键不存在,那么 APPEND 命令将创建一个新的键,并设置其值为指定的值。APPEND 命令执行后返回的是追加操作后字符串的总长度。如果键不存在,则返回的是新字符串的长度,如下图所示:
STRLEN(如果没有值则返回0):
使用INCR命令增加计数,当myincr键不存在时执行INCR,它将被创建,初始为零,然后增加1,返回1:
使用DECR命令减少计数,当myincr键不存在时执行DECR,它将被创建,初始为零,然后减少1,返回-1,下图为减少示例:
INCRBY 是 Redis 中用于对存储在指定键中的整数值执行增加操作的命令。INCRBY 允许您指定一个整数值,该值将加到键的当前值上。如果键不存在,那么 INCRBY 将会创建一个键,并将其初始值设置为 0,然后再执行增加操作。
DECRBY则相反,用于减少操作,如下图所示:
DEL:
过期时间操作
在 Redis 中,你可以为键设置过期时间,这样键在指定的时间后会自动被删除。
设置键在指定秒数后过期,EXPIRE key seconds,如果键设置成功,命令返回 1;如果键不存在或无法设置过期时间,命令返回 0,
用TTL key命令获取剩余过期时间:
*TTL key命令后如果键不存在,返回 -2。
如果键存在但没有设置过期时间,返回 -1。
如果键设置了过期时间,返回键剩余的秒数。
使用 SET命令与过期时间
在设置键值的同时设置过期时间:
使用PERSIST key命令将其设置为永不过期:
PEXPIRE命令
与 EXPIRE类似,但设置的时间单位是毫秒:
PTTL 命令
与 TTL类似,但返回的时间单位是毫秒,如图:
Redis 的 String 类型在实际应用中有着广泛的用途,从简单的键值对存储,到复杂的实时系统,都离不开 String 类型的支持。常见的应用场景包括缓存、计数器、分布式锁等 。