一、Redis
Redis 是什么?
-
类型: 基于内存的 Key-Value 数据库
-
特点: 快、支持多种数据结构、支持持久化、支持高可用
-
典型用途:
-
缓存(数据库前面加一层)
-
Session 存储
-
分布式锁
-
限流
-
消息队列 / 延迟队列
-
排行榜
-
二、基础语法:命令行快速上手
2.1 连接与基础操作
# 连接
redis-cli -h 127.0.0.1 -p 6379
# 查看所有 key(生产环境慎用)
KEYS *
# 判断 key 是否存在
EXISTS user:1
# 删除 key
DEL user:1
# 设置过期时间(秒)
EXPIRE user:1 60
# 查看剩余 TTL
TTL user:1
开发习惯:所有 key 建议加前缀,如:
user:1:name、order:123:status
三、数据结构 + 使用场景 + 代码示例
我用 Python(redis-py)演示,安装:
pip install redis
连接代码:
import redis
r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
3.1 String:最常用类型
使用场景
-
缓存单个值(如用户昵称)
-
计数器(浏览量、点赞数)
-
分布式锁(SET NX EX)
基础命令
SET user:1:name "doudou"
GET user:1:name
INCR article:1001:views
INCRBY article:1001:views 10
SET session:token "user_1" EX 3600 # 带过期时间
1. 设置字符串值(String)
SET user:1:name "doudou" # 设置 key=user:1:name 的值为 "doudou",如果 key 不存在则创建,存在则覆盖
说明
-
SET是 Redis 最基础的写入命令 -
适合存储简单字符串:用户名、token、配置项等
-
覆盖写入,不需要提前判断 key 是否存在
使用场景
-
缓存用户昵称
-
存储临时数据
-
存储 session 信息
2. 获取字符串值
GET user:1:name # 获取 key=user:1:name 的值
说明
-
如果 key 不存在,返回
(nil) -
GET 是非常快的 O(1) 操作
使用场景
-
缓存读取
-
配置读取
-
Session 读取
3. 自增(计数器)
INCR article:1001:views # 将 key=article:1001:views 的值 +1,如果不存在则从 0 开始变成 1
说明
-
原子操作:并发环境下不会出现竞争问题
-
如果 key 不存在,会自动初始化为 0 再 +1
-
只能对数字字符串操作,否则报错
使用场景
-
浏览量计数
-
点赞数计数
-
接口调用次数统计
-
限流计数器
4. 自增指定数值
INCRBY article:1001:views 10 # 将 key 的值增加 10
说明
-
和
INCR一样是原子操作 -
可以一次性增加任意整数
使用场景
-
批量增加积分
-
批量增加库存
-
批量增加访问量
5. 设置带过期时间的 key
SET session:token "user_1" EX 3600 # 设置 token,过期时间为 3600 秒(1 小时)
说明
-
EX 3600表示 过期时间(秒) -
过期后 key 会自动删除
-
常用于 Session、验证码、临时缓存
使用场景
-
登录 token(1 小时过期)
-
验证码(60 秒过期)
-
缓存数据(5 分钟过期)
注意事项
-
强烈建议所有缓存 key 都设置过期时间,避免内存爆炸
-
如果你需要毫秒级过期,可以用
PX
同样命令的 Python 示例(开发者最常用)
import redis
r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True)
# SET
r.set("user:1:name", "doudou")
# GET
print(r.get("user:1:name"))
# INCR
r.incr("article:1001:views")
# INCRBY
r.incrby("article:1001:views", 10)
# SET with expire
r.set("session:token", "user_1", ex=3600)
Python 示例:计数器
# 文章浏览量 +1
def incr_article_view(article_id: int):
key = f"article:{article_id}:views"
new_value = r.incr(key)
return new_value
print(incr_article_view(1001))
解析:
-
INCR是原子操作,多线程/多进程下不会出现并发问题 -
非常适合做:点赞数、浏览量、库存计数
3.2 Hash:适合存对象
使用场景
-
用户信息:
user:1 -> {name, age, email} -
配置项:
config:system -> {key1, key2}

219

被折叠的 条评论
为什么被折叠?



