# 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交流群
原创网站开发,偏差难以避免。
如若发现错误,诚心感谢反馈。
愿你倾心相念,愿你学有所成。
愿你朝华相顾,愿你前程似锦。
如若发现错误,诚心感谢反馈。
愿你倾心相念,愿你学有所成。
愿你朝华相顾,愿你前程似锦。