Redis 作为一款高性能的键值存储数据库,广泛应用于缓存、消息队列和数据持久化等场景,是后端开发和系统架构中不可或缺的工具。对于初学者来说,掌握其基本命令与操作是入门的第一步。本文ZHANID工具网将详细介绍 Redis 常用命令,结合实际示例帮助你快速上手,为后续深入学习和实战应用打下坚实基础。
一、Redis 基础入门
Redis 是基于内存的高性能键值数据库,支持多种数据结构(String、Hash、List、Set、Zset),每秒可处理超11万次写入和8.1万次读取操作。其核心优势包括:
-
原子性操作:所有命令天然支持原子性,适合计数器、分布式锁等场景
-
持久化机制:支持RDB快照和AOF日志两种持久化方式
-
高可用架构:通过主从复制和哨兵模式实现故障自动转移
-
集群扩展:支持水平扩展至1000+节点,理论容量无上限
典型应用场景涵盖:
-
缓存系统:存储热点数据,减轻数据库压力
-
会话管理:保存用户登录状态和临时数据
-
消息队列:利用List结构实现轻量级消息队列
-
排行榜系统:通过Zset实现实时排名计算
-
分布式锁:基于SETNX命令实现跨进程同步
二、环境搭建与连接管理
2.1 服务启动与配置
Windows系统:
-
下载Redis-x64-3.2.100.msi安装包
-
安装时勾选"Add to PATH"选项
-
修改配置文件
redis.windows-service.conf:requirepass 000000 # 设置访问密码 maxmemory 500mb # 限制内存使用
-
通过服务管理器重启Redis服务
Linux系统:
wget https://download.redis.io/releases/redis-7.0.5.tar.gz tar xzf redis-7.0.5.tar.gz cd redis-7.0.5 make && make install redis-server --requirepass 000000 # 启动时设置密码
2.2 客户端连接
redis-cli -h 127.0.0.1 -p 6379 -a 000000 # 完整连接参数 127.0.0.1:6379> AUTH 000000 # 密码验证 OK 127.0.0.1:6379> SELECT 1 # 切换到1号数据库 OK
关键参数说明:
-
-h:指定服务器IP(默认127.0.0.1) -
-p:指定端口号(默认6379) -
-n:直接选择数据库编号(0-15)
三、核心数据结构操作
3.1 String(字符串)
基础操作:
SET username "alice" EX 3600 # 设置带过期时间的键 GET username # 获取值 GETSET username "bob" # 获取并设置新值 MSET user:1001:name "张三" user:1001:age 25 # 批量设置 MGET user:1001:name user:1001:age # 批量获取
数值操作:
SET counter 0 INCR counter # 原子递增(结果1) INCRBY counter 5 # 增加指定值(结果6) DECR counter # 原子递减(结果5)
典型应用:
-
存储用户会话:
SET session:token "user_data" EX 3600 -
实现计数器:
INCR page:views:home -
限流控制:
INCR rate:ip:192.168.1.1 EX 60
3.2 Hash(哈希)
字段操作:
HSET user:1001 name "张三" age 25 city "北京" # 设置多个字段 HGET user:1001 name # 获取单个字段 HMGET user:1001 name age # 批量获取字段 HGETALL user:1001 # 获取所有字段
数值计算:
HINCRBY user:1001 login_count 1 # 登录次数+1 HINCRBYFLOAT product:1001 price 0.5 # 价格增加0.5
典型应用:
-
存储用户信息:
HSET user:1002 email "test@example.com" phone "13800138000"
-
商品规格管理:
HSET goods:2001 stock 100 price 299.99
3.3 List(列表)
队列操作:
LPUSH msg_queue "消息1" "消息2" # 头部插入 RPUSH msg_queue "消息3" # 尾部插入 LPOP msg_queue # 头部弹出 RPOP msg_queue # 尾部弹出
范围查询:
LRANGE msg_queue 0 -1 # 获取全部元素 LRANGE msg_queue 1 2 # 获取索引1-2的元素 LLEN msg_queue # 获取列表长度
典型应用:
-
消息队列实现:
# 生产者 RPUSH order_queue '{"order_id":1001,"amount":99.9}' # 消费者 BLPOP order_queue 10 # 阻塞式获取消息 -
最近访问记录:
LPUSH user:1001:history "page1" "page2" "page3" LTRIM user:1001:history 0 4 # 保留最近5条记录
3.4 Set(集合)
基础操作:
SADD tags "java" "redis" "mysql" # 添加元素 SMEMBERS tags # 获取所有成员 SISMEMBER tags "java" # 检查元素存在 SCARD tags # 获取集合大小
集合运算:
SADD dev_tags "java" "spring" "mysql" SADD ops_tags "redis" "linux" "mysql" SINTER dev_tags ops_tags # 交集(返回mysql) SUNION dev_tags ops_tags # 并集 SDIFF dev_tags ops_tags # 差集(返回java,spring)
典型应用:
-
用户标签系统:
SADD user:1001:tags "vip" "tech" "young"
-
文章去重处理:
SADD article:md5 "a1b2c3d4" "e5f6g7h8"
3.5 Zset(有序集合)
基础操作:
ZADD rankings 100 "张三" 200 "李四" 150 "王五" # 添加带分数的成员 ZRANGE rankings 0 -1 WITHSCORES # 获取全部成员(带分数) ZREVRANGE rankings 0 2 # 获取分数最高的3个成员 ZSCORE rankings "李四" # 获取成员分数
排名操作:
ZINCRBY rankings 50 "张三" # 张三分数增加50 ZRANK rankings "王五" # 获取王五的排名(升序) ZREVRANK rankings "李四" # 获取李四的排名(降序)
典型应用:
-
实时排行榜:
ZADD game:score 1500 "player1" 1200 "player2" 1800 "player3"
-
热度排序:
ZINCRBY hot:articles 1 "article:1001" # 文章点击量+1

四、高级功能与技巧
4.1 事务处理
MULTI # 开启事务 SET key1 "value1" INCR counter EXEC # 执行事务
使用场景:
-
银行转账:
MULTI DECR account:from 100 INCR account:to 100 EXEC
4.2 发布订阅
订阅端:
SUBSCRIBE channel1 channel2 # 订阅多个频道
发布端:
PUBLISH channel1 "Hello Redis" # 向频道发送消息
典型应用:
-
实时通知系统:
# 订单服务 PUBLISH order:notify '{"order_id":1001,"status":"paid"}' # 通知服务 SUBSCRIBE order:notify
4.3 持久化配置
RDB配置(redis.conf):
save 900 1 # 15分钟内至少1次修改 save 300 10 # 5分钟内至少10次修改 rdbcompression yes # 启用压缩 dbfilename dump.rdb # 快照文件名
AOF配置:
appendonly yes # 启用AOF appendfsync everysec # 每秒同步一次 no-appendfsync-on-rewrite yes # 重写期间不阻塞
五、性能优化与监控
5.1 性能优化技巧
-
避免大键:单个键值对不超过512KB
-
使用Pipeline:批量执行命令减少网络往返
# 使用管道发送1000个SET命令 echo -e "SET key1 value1\nSET key2 value2\n...1000条命令..." | redis-cli --pipe
-
合理选择数据结构:
-
计数器用String
-
对象存储用Hash
-
排行榜用Zset
5.2 监控命令
INFO # 查看服务器统计信息 INFO memory # 内存使用详情 INFO commandstats # 命令执行统计 CLIENT LIST # 查看所有客户端连接 SLOWLOG GET 10 # 获取最近10条慢查询
监控指标解读:
-
instantaneous_ops_per_sec:当前QPS -
used_memory_rss:系统总内存占用 -
keyspace_hits:缓存命中次数 -
keyspace_misses:缓存未命中次数
六、常见问题解决方案
6.1 连接问题排查
错误现象:
Could not connect to Redis at 127.0.0.1:6379: Connection refused
解决方案:
-
检查Redis服务是否运行:
systemctl status redis
-
检查防火墙设置:
sudo ufw allow 6379
-
检查配置文件绑定地址:
bind 0.0.0.0 # 允许所有IP连接
6.2 内存不足处理
错误现象:
OOM command not allowed when used memory > 'maxmemory'
解决方案:
-
增加内存限制:
maxmemory 2gb # 修改为2GB
-
设置淘汰策略:
maxmemory-policy allkeys-lru # 使用LRU算法淘汰数据
-
优化数据结构:
-
使用Hash存储对象减少内存占用
-
对大集合使用分片存储
6.3 键管理最佳实践
-
命名规范:
-
使用冒号分隔命名空间:
user:1001:profile -
避免使用
*等特殊字符 -
过期策略:
-
为临时数据设置合理过期时间
-
使用
EXPIREAT设置绝对过期时间 -
批量删除:
# 删除所有以"temp:"开头的键 redis-cli --scan --pattern "temp:*" | xargs redis-cli del
七、综合应用案例
7.1 分布式锁实现
-- 获取锁(Lua脚本保证原子性)
if redis.call("SETNX", KEYS[1], ARGV[1]) == 1 then
redis.call("EXPIRE", KEYS[1], ARGV[2])
return 1
else
return 0
end
使用方式:
# 获取锁(锁键为lock:resource,值为UUID,过期时间10秒)
EVAL "if redis.call('SETNX', KEYS[1], ARGV[1]) == 1 then redis.call('EXPIRE', KEYS[1], ARGV[2]) return 1 else return 0 end" 1 lock:resource $(uuidgen) 10
# 释放锁(仅当锁值匹配时删除)
if redis.call("GET", KEYS[1]) == ARGV[1] then
return redis.call("DEL", KEYS[1])
else
return 0
end
7.2 限流器实现
# 初始化计数器(设置过期时间60秒) SET rate:ip:192.168.1.1 0 EX 60 # 请求处理(使用WATCH实现乐观锁) WATCH rate:ip:192.168.1.1 current = GET rate:ip:192.168.1.1 if current < 100 then MULTI INCR rate:ip:192.168.1.1 EXEC # 执行成功则允许请求 else # 超过限流阈值 UNWATCH fi
7.3 购物车实现
# 添加商品到购物车(Hash存储)
HSET cart:user:1001 1001 2 1002 1 # 商品ID:1001 数量:2
# 获取购物车商品列表
HKEYS cart:user:1001
# 更新商品数量
HINCRBY cart:user:1001 1001 1 # 商品1001数量+1
# 计算总价(使用Lua脚本)
local total = 0
local items = redis.call("HGETALL", KEYS[1])
for i=1,#items,2 do
local price = redis.call("HGET", "product:"..items[i], "price")
total = total + (tonumber(items[i+1]) * tonumber(price))
end
return total
八、学习资源推荐
-
官方文档:
-
实践平台:
-
进阶书籍:
-
《Redis设计与实现》
-
《Redis实战》
-
监控工具:
-
RedisInsight(官方可视化工具)
-
Prometheus + Grafana监控方案
通过系统学习本文涵盖的200+个核心命令和典型应用场景,初学者可以在3-5天内掌握Redis的基础操作,并为后续学习分布式缓存、消息队列等高级主题打下坚实基础。建议通过实际项目(如电商购物车、排行榜系统)巩固所学知识,并定期参考Redis官方文档保持技术更新。

王子主页


















