# Redis字符串(String)

概念

Redis字符串(String)是Redis最基础的数据结构,它以二进制安全的方式存储数据,最大支持512MB的内容。

# 作用

虽然名称中带有"字符串",但它能存储任何二进制格式的数据,包括:

  • 普通文本(如用户昵称)。

  • 序列化对象(JSON/Protobuf等格式)。

  • 数字(整数或浮点数)。

  • 二进制数据(小图片、加密内容等)。

# 特性

核心特性包括:

  • 原子性操作:所有字符串命令都是原子执行的。

  • 数值计算:支持对数字类型进行自增、自减等操作。

  • 灵活过期:可设置毫秒/秒级自动过期时间。

  • 位级操作:支持按位读写和位运算。

# 场景

  • 高速缓存层:作为数据库查询的缓冲,减轻后端压力。

  • 分布式计数器:实现跨服务的原子计数功能。

  • 临时数据存储:存储会话令牌、验证码等短期数据。

  • 轻量级消息传递:通过字符串值实现简单状态通信。

  • 位图运算基础:支撑签到记录、特征标记等场景。

# 示例

在 《Redis键(key)》一节中,已经用字符串举了多个例子,包括创建和读取、覆盖、设置和查询过期时间、删除以及重命名等,这里不再赘述。直接介绍未提及的其它常见命令:

# 1. 向键的值追加内容

APPEND 命令用于向一个已存在的字符串值尾部追加内容,追加成功后返回新字符串的长度值。若键不存在,则会自动创建该键并赋值,此时效果类似于 SET 命令,但返回值不同。

127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> APPEND name feixiang     # 第一次:键不存在时创建并赋值“feixiang”
(integer) 8     # 键 name 的值变为 "feixiang",总长度 8 字符
127.0.0.1:6379> GET name
"feixiang"
127.0.0.1:6379> APPEND name .net     # 第二次:在现有值尾部追加内容“.net”
(integer) 12     # 最终值变为 "feixiang.net",总长度 12 字符
127.0.0.1:6379> GET name
"feixiang.net"

# 2.加减运算

对数字型字符串可以进行加减运算:

127.0.0.1:6379> SET number 2320
OK
127.0.0.1:6379> DECR number     # number - 1
(integer) 2319
127.0.0.1:6379> DECRBY number 9     # number - 9
(integer) 2310
127.0.0.1:6379> INCR number     # number + 1
(integer) 2311
127.0.0.1:6379> INCRBY number 9     # number + 9
(integer) 2320
127.0.0.1:6379> SET number 2320.5
OK
127.0.0.1:6379> DECR number
(error) ERR value is not an integer or out of range     # 非整数型会报错
127.0.0.1:6379> INCRBYFLOAT number 0.5      # 浮点型要用INCRBYFLOAT
"2321"
127.0.0.1:6379> SET number abc
OK
127.0.0.1:6379> DECR number
(error) ERR value is not an integer or out of range     # 非整数型会报错
127.0.0.1:6379>

# 3.获取或覆盖子字符串

可以按指定下标获取子字符串:

127.0.0.1:6379> SET name feixiang
OK
127.0.0.1:6379> GETRANGE name 0 2		# 根据下标获取前3个字符
"fei"
127.0.0.1:6379> SET web www.feixiang.net
OK
127.0.0.1:6379> SETRANGE web 0 aaa		# 从下标0开始覆盖,新内容为aaa
(integer) 16
127.0.0.1:6379> GET web
"aaa.feixiang.net"

# 4.同时获取多个值

命令格式为:MGET 键1 [键2 …]

127.0.0.1:6379> SET name feixiang
OK
127.0.0.1:6379> SET web feixiang.net
OK
127.0.0.1:6379> MGET name web
1) "feixiang"
2) "feixiang.net"

# 5.同时设置多个值

命令格式为:MSET 键1 值1 [键2 值2 …]

127.0.0.1:6379> MSET name feixiang web feixiang.net
OK
127.0.0.1:6379> MGET name web
1) "feixiang"
2) "feixiang.net"

# 命令集

在 Redis 客户端(如 redis-cli )可以通过help @string命令查找所有与字符串相关的命令,效果如下:

127.0.0.1:6379> help @string

  APPEND key value
  summary: Append a value to a key
  since: 2.0.0

  BITCOUNT key [start] [end]
  summary: Count set bits in a string
  since: 2.6.0

  BITOP operation destkey key [key ...]
  summary: Perform bitwise operations between strings
  since: 2.6.0

  ……

以下是 Redis-x64-3.0.504 版本的字符串命令集:

命令 说明 版本
APPEND key value 向键追加一个值 2.0.0+
BITCOUNT key [start] [end] 统计字符串中二进制位为1的数量 2.6.0+
BITOP operation destkey key 对多个字符串执行位运算(AND/OR/XOR/NOT) 2.6.0+
BITPOS key bit [start] [end] 查找字符串中第一个被设置为1或0的二进制位 2.8.7+
DECR key 将键的整数值减一 1.0.0+
DECRBY key decrement 将键的整数值减去指定数值 1.0.0+
GET key 获取键的值 1.0.0+
GETBIT key offset 返回键存储的字符串在指定偏移量处的二进制位值 2.2.0+
GETRANGE key start end 获取键存储的字符串的子串 2.4.0+
GETSET key value 设置键的新值并返回旧值 1.0.0+
INCR key 将键的整数值加一 1.0.0+
INCRBY key increment 将键的整数值增加指定数值 1.0.0+
INCRBYFLOAT key increment 将键的浮点数值增加指定数值 2.6.0+
MGET key [key ...] 获取多个键的值 1.0.0+
MSET key value [key value ...] 设置多个键为多个值 1.0.1+
MSETNX key value [...] 仅当所有键不存在时设置多个键为多个值 1.0.1+
PSETEX key milliseconds value 设置键的值并以毫秒为单位设置过期时间 2.6.0+
SET key value [EX...] 设置键的字符串值(支持过期时间和条件选项) 1.0.0+
SETBIT key offset value 设置或清除键存储的字符串在指定偏移量处的二进制位 2.2.0+
SETEX key seconds value 设置键的值并以秒为单位设置过期时间 2.0.0+
SETNX key value 仅当键不存在时设置其值 1.0.0+
SETRANGE key offset value 从指定偏移量开始覆盖键存储的字符串内容 2.2.0+
STRLEN key 获取键存储的字符串值的长度 2.2.0+



微信公众号

QQ交流群
原创网站开发,偏差难以避免。

如若发现错误,诚心感谢反馈。

愿你倾心相念,愿你学有所成。

愿你朝华相顾,愿你前程似锦。