当前位置: 首页 > news >正文

从入门到精通:redis-cli命令行实战全解析

1. Redis-cli基础连接与运维实战

第一次接触redis-cli时,我盯着黑乎乎的终端窗口有点发怵。这玩意儿真的比图形界面好用吗?直到有次服务器内存告急,我用三行命令批量清理了20GB缓存数据,才明白命令行才是运维的真爱。让我们从最基础的连接开始,逐步解锁redis-cli的真正威力。

1.1 本地无密码连接

最简单的连接方式莫过于直接敲入redis-cli,这相当于对本地6379端口的Redis发起"你好"的问候。我习惯先敲个PING测试连通性,看到PONG回应就像听到老朋友的应答。不过实际生产环境几乎不会这么简单,就像我家大门从不装锁一样危险。

$ redis-cli 127.0.0.1:6379> PING PONG

1.2 远程认证连接

当Redis住在另一台服务器时,我们需要带上"门禁卡":-h指定IP就像输入地址,-p是门牌号(默认6379),-a则是密码钥匙。有次我忘了加-a参数,反复连接十几次都失败,最后发现终端里赫然显示着"(error) NOAUTH Authentication required"——这感觉就像刷卡时机器不断提示"请重试"。

redis-cli -h 192.168.1.100 -p 6379 -a your_strong_password

1.3 带缓存的原子操作

组合命令才是redis-cli的精华所在。比如要清理缓存并立即检查剩余key数量,可以用管道符一气呵成。曾经有个电商大促前,我用这个组合拳5秒内清空了商品缓存:

redis-cli -h redis.prod.com -a $REDIS_PWD flushall && redis-cli -h redis.prod.com -a $REDIS_PWD dbsize

1.4 多数据库切换

Redis默认有16个数据库(0-15),就像写字楼的楼层。用-n参数直达目标楼层,配合select命令随时切换。有次我误操作把测试数据写进了生产库,就是忘了这个关键参数。现在我的终端提示符永远显示着当前库编号:

redis-cli -n 1 127.0.0.1:6379[1]> SELECT 0 OK 127.0.0.1:6379>

2. 键值操作的黑科技

2.1 批量操作秘籍

mget/mset批量操作键值对时,记得控制每次操作的数量。我曾在线上环境一次性获取10万个key,直接导致Redis短暂阻塞。后来学乖了,用这个shell脚本分批次处理:

for i in {0..9}; do redis-cli --eval batch_ops.lua $i , 10000 done

配套的Lua脚本能精准控制每次操作的key范围。这种方案比单纯用keys *安全得多,毕竟keys命令会引发全库扫描——相当于让Redis停下所有工作来陪你玩寻宝游戏。

2.2 过期时间的魔法

给热key设置过期时间是个技术活。有次我设置了expire user:123 3600,结果用户投诉每到整点就掉线。原来key在恰好满1小时时消失,应该用expireat指定具体过期时刻:

# 设置明天凌晨2点过期 redis-cli expireat user:123 $(date -d "tomorrow 02:00" +%s)

2.3 非阻塞删除技巧

直接del大key可能导致服务卡顿,就像突然搬走整面书柜会堵住走廊。unlink命令就聪明多了,它先标记要删除的key,等Redis闲下来再慢慢清理。实测删除1GB的hash结构,用unlink能减少80%的延迟波动。

3. 数据类型实战宝典

3.1 字符串的隐藏玩法

除了基本的set/get,字符串类型还能玩出花样。比如用INCR做秒杀计数器,配合EXPIRE自动清零;用SETNX实现分布式锁时,一定要设置超时——有次我忘了设,导致系统死锁两小时。更安全的做法是:

redis-cli setnx lock:order "1" && redis-cli expire lock:order 30

3.2 列表消息队列

LPUSH/RPOP实现简易消息队列时,记得加个BRPOP做阻塞读取。我早期用轮询检查新消息,把CPU利用率拉高了30%。后来改成这样,既省资源又实时:

while true; do redis-cli brpop task_queue 0 # 处理消息... done

3.3 集合的社交应用

用户关注关系用集合再合适不过。SINTER计算共同好友,SUNION合并兴趣标签,SDIFF推荐可能认识的人。有个千万用户的应用,用下面这条命令3毫秒算出两人的共同群组:

redis-cli sinter user:1000:groups user:2000:groups

4. 运维监控高阶技巧

4.1 性能诊断三板斧

INFO命令是我的急救包。INFO memory看内存碎片率,超过1.5就该重启了;INFO persistence检查RDB/AOF状态;INFO stats里的instantaneous_ops_per_sec是实时QPS。有次大促,我就是靠这个发现有个客户端在疯狂执行keys *

4.2 管道加速批处理

当需要插入10万条测试数据时,单条发送要半小时。用管道技术能提速50倍,原理是把多个命令打包发送。这是我常用的模板:

echo -e "SET k1 v1\nSET k2 v2" | redis-cli --pipe

4.3 Lua脚本原子操作

用EVAL执行Lua脚本就像在Redis内部运行小程序。有次要实现先检查再扣库存的逻辑,用Lua脚本完美避免竞态条件:

local stock = tonumber(redis.call('GET', KEYS[1])) if stock > 0 then redis.call('DECR', KEYS[1]) return 1 end return 0

调用时只需:redis-cli --eval decr_stock.lua item:123

http://www.jsqmd.com/news/1085671/

相关文章:

  • Go语言国密全栈方案gmsm实战:从算法到TLS的完整指南
  • 开源音乐聚合终极方案:MusicFreePlugins完整指南
  • 致创协与黑客松组织者:让每一个想法,都有机会被看见!
  • 【信息科学与工程学】信息科学领域——第八十八篇 云数据中心解决方案的关键技术01
  • PostgreSQL JOIN 优化指南
  • 分频器实战:从秒脉冲到任意分频的Verilog实现与仿真
  • 国内大模型与国外大模型的差距在哪里
  • 基于LLM的知识图谱自动构建系统:从非结构化数据到结构化知识的智能转换
  • 华为MSTP、Eth-Trunk、VRRP融合组网:从原理到高可用企业网实战
  • 从质点、刚体到机械臂:一文读懂自由度的物理本质与工程应用
  • CNSH 中文原生脚本实战(一):为什么中国人需要自己的脚本语言
  • 解码Android相机架构:从App到HAL的请求流转全景
  • Python高效访问B站API的终极指南:构建专业级数据采集与分析系统
  • 终极指南:如何用智能激活脚本一键搞定Windows和Office?
  • 终极Windows安卓应用安装器:告别模拟器,原生运行APK的完整指南
  • 数据库工程:Explain对比与慢查询优化实战‌
  • 基于SM4国密算法实现.NET Core大文件安全分片上传
  • PiliPlus:你的终极B站第三方客户端,打造个性化视频体验
  • 文件上传漏洞实战:从原理到防御,剖析企业应用安全风险
  • QMCDecode技术实践:三步完成QQ音乐加密格式转换的开源方案
  • JRC全球地表水动态制图:从30米像素洞察35年水资源变迁
  • 从零到一:K8S滚动更新与探针配置实战优化
  • 照着教程搭了电商AI批量出图工作流,500张图全废了
  • 技术深度解析:OpenSpeedy游戏加速工具的时间函数Hook实现方案
  • 从NOIP方格取数到双线程DP:解析经典棋盘路径问题的动态规划核心
  • 3个颠覆性技巧:如何让网盘下载体验效率翻倍?
  • 【Docker】无缝升级至Docker-CE:实战指南与数据零丢失迁移策略
  • UE特效实战:打造动态武器附魔光效
  • 终极指南:如何用开源工具获取网盘直链下载地址,突破下载限制
  • 华为网络设备ARP安全防护实战:从基础限速到高级检测