
Redis是最流行的内存数据库,广泛用于缓存、会话管理、消息队列等场景。本文介绍Redis的核心数据类型和实际应用场景。
一、Redis五大基础数据类型
1. String(字符串)— 最基本的类型
# 设置和获取 SET name "hello" GET name # 设置过期时间(秒) SET token "abc123" EX 3600 # 不存在时才设置(分布式锁常用) SET lock "1" NX EX 10 # 自增(计数器) INCR view_count INCRBY user:1001:score 10 # 批量操作 MSET k1 v1 k2 v2 k3 v3 MGET k1 k2 k3
2. Hash(哈希)— 存储对象
# 存储用户信息HSET user:1001 name "张三" age 25 email "zhangsan@test.com"
获取单个字段
HGET user:1001 name
获取所有字段
HGETALL user:1001
只获取需要的字段
HMGET user:1001 name email
字段自增
HINCRBY user:1001 age 1
判断字段是否存在
HEXISTS user:1001 phone
3. List(列表)— 消息队列、最新动态
# 从左边插入
LPUSH recent_posts "post:1003" "post:1002" "post:1001"从右边插入
RPUSH queue "task1" "task2" "task3"
弹出元素
LPOP recent_posts # 左边弹出
RPOP queue # 右边弹出
BLPOP queue 30 # 阻塞弹出(等待30秒)获取列表范围
LRANGE recent_posts 0 9 # 获取前10条
获取列表长度
LLEN recent_posts
4. Set(集合)— 去重、交集并集
# 添加成员
SADD user:1001:tags "python" "linux" "docker"
SADD user:1002:tags "python" "java" "k8s"获取所有成员
SMEMBERS user:1001:tags
判断是否是成员
SISMEMBER user:1001:tags "python"
交集(共同标签)
SINTER user:1001:tags user:1002:tags
并集(所有标签)
SUNION user:1001:tags user:1002:tags
差集
SDIFF user:1001:tags user:1002:tags
5. Sorted Set(有序集合)— 排行榜
# 添加带分数的成员
ZADD leaderboard 100 "player:1"
ZADD leaderboard 85 "player:2"
ZADD leaderboard 92 "player:3"获取排名(从高到低)
ZREVRANGE leaderboard 0 9 WITHSCORES
获取分数
ZSCORE leaderboard "player:1"
自增分数
ZINCRBY leaderboard 10 "player:1"
获取排名
ZREVRANK leaderboard "player:1"
范围查询
ZRANGEBYSCORE leaderboard 80 100
二、缓存策略
# 设置过期时间
EXPIRE key 3600 # 秒
PEXPIRE key 3600000 # 毫秒查看剩余时间
TTL key
持久化(取消过期)
PERSIST key
缓存穿透:查询不存在的数据
方案:缓存空值,设置较短过期时间
SET user:99999 "" EX 60
缓存击穿:热点key过期
方案:互斥锁
SET lock:key "1" NX EX 10
获取到锁才查数据库
缓存雪崩:大量key同时过期
方案:过期时间加随机值
EXPIRE key $((3600 + RANDOM % 300))
三、常见应用场景
# 1. 会话存储
SET session:abc123 "{"user_id":1001,"role":"admin"}" EX 18002. 接口限流
INCR rate:user:1001
EXPIRE rate:user:1001 60检查是否超过限制
GET rate:user:1001
3. 分布式锁
SET lock:order:1001 "1" NX EX 10
处理完删除
DEL lock:order:1001
4. 最新消息列表
LPUSH messages "msg:1003"
LTRIM messages 0 99 # 只保留100条
LRANGE messages 0 19 # 获取最新20条5. 计数器
INCR article:1001:views
INCRBY user:1001:coins 100
四、运维常用命令
# 连接Redis
redis-cli -h 127.0.0.1 -p 6379 -a password查看信息
INFO
INFO memory
INFO clients查看key数量
DBSIZE
查看慢查询
SLOWLOG GET 10
持久化
BGSAVE # 后台保存RDB
BGREWRITEAOF # 重写AOF监控实时命令
MONITOR
查看内存使用
INFO memory | grep used_memory_human
五、性能优化建议
使用批量操作:MSET/MGET代替多次SET/GET
避免大key:单个key的value不要超过10KB
合理设置过期时间:避免内存泄漏
使用连接池:避免频繁建立连接
监控慢查询:定期检查SLOWLOG
Redis的命令非常丰富,以上是最常用的场景。建议结合实际业务需求,选择合适的数据类型和策略。
评论