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
:当前QPSused_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官方文档保持技术更新。
本文由@战地网 原创发布。
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/5162.html