8.1.3 String类型与常用命令
String类型概述#
String 是 Redis 最基础的数据类型,适合存储文本、数字计数、二进制数据等。单个 value 最大 512MB,常用于缓存对象、计数器、分布式锁、会话标识等场景。String 支持原子加减与过期控制,适合高并发访问。
原理草图(String读写与过期)#
快速安装与启动(用于本节示例)#
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y redis-server
sudo systemctl enable --now redis-server
# 验证
redis-cli ping
# 预期输出:PONG
常用命令与用法(含示例与解释)#
设值与取值#
# 设置与读取
redis-cli SET user:name "tom"
# 预期:OK
redis-cli GET user:name
# 预期:"tom"
# 批量设置与获取
redis-cli MSET k1 v1 k2 v2
redis-cli MGET k1 k2
# 预期:"v1" "v2"
# 仅当 key 不存在时设置(常用于互斥)
redis-cli SETNX lock:job 1
# 预期:1 (成功) 或 0 (已存在)
# 设置新值并返回旧值
redis-cli GETSET user:name "jerry"
# 预期:旧值 "tom"
过期与时效#
# 设置值并指定过期时间(秒)
redis-cli SETEX session:1001 60 "token-abc"
redis-cli TTL session:1001
# 预期:剩余秒数
# SET 中携带过期参数(推荐)
redis-cli SET cache:page "<html>...</html>" EX 120
redis-cli PTL cache:page
# 若命令拼写错误将返回 (error) ERR unknown command
数值操作(计数器场景)#
# 自增/自减
redis-cli SET page:view 0
redis-cli INCR page:view
redis-cli INCRBY page:view 10
redis-cli DECRBY page:view 3
redis-cli GET page:view
# 预期:数值字符串 "8"
位级操作(适合签到/特征标记)#
# 第3位设为1并读取
redis-cli SETBIT user:sign:1001 3 1
redis-cli GETBIT user:sign:1001 3
# 预期:1
# 统计为1的位数
redis-cli BITCOUNT user:sign:1001
实战示例(可直接执行)#
# 1) 缓存对象(JSON 字符串)
redis-cli SET user:1001 '{"name":"tom","age":18}' EX 600
redis-cli GET user:1001
# 2) 访问计数
redis-cli INCR page:view:home
# 3) 简单分布式锁(10秒过期)
redis-cli SET lock:job "host-01" NX EX 10
# 成功:OK;失败:nil
# 4) 限流标记(1分钟内只允许一次)
redis-cli SET req:ip:1.1.1.1 1 EX 60 NX
排错与注意事项#
- (error) WRONGTYPE:对非 String 类型执行 String 命令。
bash redis-cli TYPE keyname # 若返回 hash/list/set/zset,应使用对应命令或删除后重建 - 数值操作失败:
INCR/DECR只能用于可解析为数字的字符串。
bash redis-cli SET counter "abc" redis-cli INCR counter # 预期:(error) ERR value is not an integer or out of range - 过期未生效:确认是否设置了 EX/PX 或 TTL。
bash redis-cli TTL keyname # -1 表示无过期时间;-2 表示 key 不存在 - 命令不存在:检查 redis-cli 是否连接到正确实例与版本。
bash redis-cli INFO server | grep redis_version
练习#
- 使用
SET和EX实现 5 分钟的页面缓存,并验证 TTL 递减。 - 用
INCRBY实现库存扣减(从 100 扣到 0),观察是否出现负数并思考防护方案。 - 使用
SETNX实现互斥锁,模拟两个终端同时加锁的效果。 - 用
SETBIT实现 7 天签到,统计已签到天数。