字符串

最后更新于:2022-04-01 03:14:28

# 字符串 [TOC=2,3] `REDIS_STRING` (字符串)是 Redis 使用得最为广泛的数据类型,它除了是 `SET` 、 `GET` 等命令的操作对象之外,数据库中的所有键,以及执行命令时提供给 Redis 的参数,都是用这种类型保存的。 ### 字符串编码 字符串类型分别使用 `REDIS_ENCODING_INT` 和 `REDIS_ENCODING_RAW` 两种编码: - `REDIS_ENCODING_INT` 使用 `long` 类型来保存 `long` 类型值。 - `REDIS_ENCODING_RAW` 则使用 `sdshdr` 结构来保存 `sds` (也即是 `char*` )、 `long long` 、 `double` 和 `long double` 类型值。 换句话来说,在 Redis 中,只有能表示为 `long` 类型的值,才会以整数的形式保存,其他类型的整数、小数和字符串,都是用 `sdshdr` 结构来保存。 ![digraph redis_string { node[shape=plaintext, style = filled]; edge [style = bold]; // type REDIS_STRING [label="字符串\nREDIS_STRING", fillcolor = "#95BBE3"]; // encoding REDIS_ENCODING_RAW [label="字符串\nREDIS_ENCODING_RAW", fillcolor = "#FADCAD"]; REDIS_ENCODING_INT [label="整数\nREDIS_ENCODING_INT", fillcolor = "#FADCAD"]; // edge REDIS_STRING -> REDIS_ENCODING_RAW; REDIS_STRING -> REDIS_ENCODING_INT; REDIS_ENCODING_RAW -> sdshdr; REDIS_ENCODING_INT -> long; // datastruct 1 sdshdr [label="sdshdr"]; sds [label="sds/char*"]; long_long [label="long long"]; double [label="double"]; long_double [label="long double"]; sdshdr -> sds; sdshdr -> long_long; sdshdr -> double; sdshdr -> long_double; // datastruct 2 long [label="long"]; long_type [label="long"]; long -> long_type;}](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f4effc6a210.svg) ### 编码的选择 新创建的字符串默认使用 `REDIS_ENCODING_RAW` 编码,在将字符串作为键或者值保存进数据库时,程序会尝试将字符串转为 `REDIS_ENCODING_INT` 编码。 ### 字符串命令的实现 Redis 的字符串类型命令,基本上是通过包装 `sds` 数据结构的操作函数来实现的,没有什么需要说明的地方。
';