书接上回,在上一篇中我们梳理了 redis-py 客户端针对 String 类型的基础读写操作。本篇继续深入讲解 String 类型剩余的核心方法,覆盖批量写入、数值原子增减、字符串追加、字节长度统计等高频场景,帮助大家完整掌握 redis-py 的字符串操作体系。
3. mset (mapping) 批量设置键值对
对应原生命令
MSET
核心功能
原子性地批量设置多个键值对,通过一次网络请求完成多组数据写入,有效降低网络往返开销,显著提升批量写入场景的性能。
参数说明
mapping:传入一个字典对象,格式为{key1: value1, key2: value2, ...},键和值均支持字符串等可序列化类型。
返回值与注意事项
- 该方法始终返回 True
- 操作属于无条件覆盖:若 key 已存在,会直接覆盖其原有值,全程不包含任何存在性判断逻辑
代码示例

python
import redis
# 初始化Redis连接,decode_responses=True自动解码字节为字符串
redis_client = redis.Redis(host="127.0.0.1", port=6379, db=0, decode_responses=True)
# 批量写入用户信息
user_info = {
"user:1001:username": "admin",
"user:1001:role": "super_admin",
"user:1001:status": "active"
}
# 执行批量设置
result = redis_client.mset(user_info)
print("mset执行结果:", result) # 输出: mset执行结果: True
4. incr (name, amount=1) 数值原子自增
对应原生命令
INCR(默认步长 1) / INCRBY(自定义步长)
核心功能
对指定 key 中存储的整数值执行原子加法自增操作,是实现计数器、接口限流、库存统计等业务场景的核心方法。
参数说明
name:需要执行自增操作的目标 key 名称amount:自增的步长数值,默认值为 1,支持传入自定义整数
返回值与使用规则
- 返回值:自增操作完成后,key 对应的最新整数值
- 使用规则:
- 目标 key 存储的值必须可以被转换为整数类型
- 若 key 不存在,会自动将其值初始化为 0,再执行自增操作
代码示例
# 场景1:页面访问计数器,key不存在时自动从0开始
redis_client.delete("page:view:home")
count1 = redis_client.incr("page:view:home")
print("第一次自增后:", count1) # 输出: 第一次自增后: 1
# 场景2:自定义步长,一次增加10
count2 = redis_client.incr("page:view:home", amount=10)
print("步长10自增后:", count2) # 输出: 步长10自增后: 11
5. decr (name, amount=1) 数值原子自减
对应原生命令
DECR(默认步长 1) / DECRBY(自定义步长)
核心功能
对指定 key 中存储的整数值执行原子减法自减操作,常应用于库存扣减、额度扣减等业务场景。
参数说明
name:需要执行自减操作的目标 key 名称amount:自减的步长数值,默认值为 1,支持传入自定义整数
返回值与使用规则
- 返回值:自减操作完成后,key 对应的最新整数值
- 使用规则:与 incr 一致,若 key 不存在,会自动将其值视作 0,再执行减法操作
代码示例
# 初始化商品库存
redis_client.set("stock:sku:2001", "100")
# 默认步长扣减1
stock1 = redis_client.decr("stock:sku:2001")
print("扣减1后库存:", stock1) # 输出: 扣减1后库存: 99
# 批量扣减5件
stock2 = redis_client.decr("stock:sku:2001", amount=5)
print("扣减5后库存:", stock2) # 输出: 扣减5后库存: 94
# key不存在时,从0开始递减
redis_client.delete("test:decr:empty")
print("空key自减结果:", redis_client.decr("test:decr:empty")) # 输出: 空key自减结果: -1
6. append (name, value) 字符串追加
对应原生命令
APPEND
核心功能
向指定 key 已有的字符串值末尾追加新的字符串内容,无需先读取再写入,全程为原子操作。
参数说明
name:目标 key 的名称value:需要追加的字符串内容
返回值与特性
- 返回值:追加操作完成后,整个字符串的总字节长度
- 特殊说明:如果目标 key 不存在,该操作等价于新建一个 key,并将其值设置为传入的 value
代码示例
# 初始化文章标题
redis_client.set("article:3001:title", "Redis基础入门")
# 追加副标题
total_len = redis_client.append("article:3001:title", " ------ 数据结构详解")
print("追加后总字节长度:", total_len)
print("完整标题:", redis_client.get("article:3001:title"))
# 输出: 完整标题: Redis基础入门 ------ 数据结构详解
# key不存在时等价于SET
redis_client.delete("test:append:new")
redis_client.append("test:append:new", "hello redis")
print("新key值:", redis_client.get("test:append:new")) # 输出: 新key值: hello redis
7. strlen (name) 获取字符串字节长度
对应原生命令
STRLEN
核心功能
获取指定 key 对应字符串值的字节长度。
⚠️ 重要提醒:该方法返回的是字节数,而非字符个数,在处理多字节编码字符时需要特别注意。
参数说明
name:目标 key 的名称
返回值与注意事项
- 返回值:字符串的总字节数;如果 key 不存在,则返回 0
- 编码注意:在 UTF-8 编码下,1 个中文字符通常占用 3 个字节,因此 strlen 的返回值会大于直观的汉字数量,计算长度时需要根据编码做对应转换。
代码示例
# 英文字符串:1个字符=1字节
redis_client.set("str:en", "hello world")
print("英文字符串字节长度:", redis_client.strlen("str:en")) # 输出: 11
# 中文字符串:UTF-8下1个中文占3字节
redis_client.set("str:cn", "你好世界")
print("中文字符串字节长度:", redis_client.strlen("str:cn")) # 输出: 12
# 不存在的key返回0
print("不存在key的长度:", redis_client.strlen("str:not:exist")) # 输出: 0
总结
以上就是 redis-py 中 String 类型的全部核心操作方法。作为 Redis 最基础、应用最广泛的数据结构,String 类型的 API 覆盖了单值读写、批量操作、数值计算、字符串处理四大类场景,是缓存、计数器、限流、分布式锁等经典方案的实现基础。
建议大家在本地环境动手实操每个方法,重点关注原子性、默认行为、字节长度等容易踩坑的细节,扎实掌握 String 类型的使用要点。