上一篇
最新动态:根据2025年7月发布的Redis社区报告,全球超过78%的企业在生产环境中使用Redis作为缓存或数据库解决方案,其中自动化运维工具的使用率同比增长35%,Shell脚本因其轻量高效特性成为中小团队的首选方案。
老张是我们团队的运维老兵,上周半夜又被报警短信吵醒——Redis内存爆了,手动处理完问题后,他叼着烟跟我说:"这破事儿得用脚本治!" 确实,Shell脚本就像瑞士军刀,虽然简单但能解决大多数Redis运维痛点:
#!/bin/bash # 文件名:redis_memory_check.sh # 功能:监控Redis内存使用情况 REDIS_CLI="/usr/local/bin/redis-cli" THRESHOLD=85 # 内存警戒线百分比 current_memory=$($REDIS_CLI info memory | grep 'used_memory_percentage' | cut -d':' -f2 | tr -d '%\r') if [ $(echo "$current_memory > $THRESHOLD" | bc) -eq 1 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - 内存告警!当前使用率: ${current_memory}%" >> /var/log/redis_monitor.log # 自动触发清理流程 $REDIS_CLI --eval /scripts/clean_lru_keys.lua else echo "$(date) - 内存正常: ${current_memory}%" >> /var/log/redis_monitor.log fi
使用技巧:
bc
命令处理浮点数比较logrotate
轮转#!/bin/bash # 文件名:redis_conn_killer.sh # 当连接数超过500时自动清理空闲连接 MAX_CONN=500 CONN_COUNT=$(redis-cli info clients | grep 'connected_clients' | cut -d':' -f2) if [ $CONN_COUNT -gt $MAX_CONN ]; then echo "当前连接数 $CONN_COUNT,开始清理..." redis-cli client list | awk '{print $2}' | cut -d'=' -f2 | while read id do redis-cli client kill id $id done fi
避坑指南:
client list
的name字段过滤#!/bin/bash # 文件名:redis_cluster_check.sh NODES=("192.168.1.101:6379" "192.168.1.102:6379") for node in "${NODES[@]}"; do ip=$(echo $node | cut -d':' -f1) status=$(redis-cli -h $ip cluster info | grep 'cluster_state' | cut -d':' -f2) if [ "$status" != "ok" ]; then echo "节点 $node 状态异常!" | mail -s "Redis集群告警" ops_team@company.com # 自动触发故障转移 redis-cli -h $ip cluster failover force fi done
高级玩法:
tmux
可以实现多节点并行检查ping
检测避免误判去年某公司因为Redis脚本漏洞被挖矿,咱们得做好防护:
权限控制:
chmod 750 /scripts/*.sh chown redis:redis /scripts/*
敏感信息处理:
# 不要硬编码密码! read -s -p "输入Redis密码: " password redis-cli -a $password info
操作确认机制:
read -p "确定要执行数据清理吗?(y/n) " confirm if [ "$confirm" != "y" ]; then exit 1 fi
管道化操作:把多个命令打包发送
echo -e "info memory\nconfig get maxmemory" | redis-cli
批量处理:处理百万级key时快10倍
redis-cli --scan --pattern "cache:*" | xargs -L 1000 redis-cli del
避免阻塞:用scan
代替keys
,用lua
脚本减少网络往返
上个月我们遇到个诡异问题——Redis响应时快时慢,用这个脚本找到了元凶:
#!/bin/bash # 找出执行时间超过100ms的命令 redis-cli --latency-history | while read line do latency=$(echo $line | awk '{print $1}') if [ $(echo "$latency > 100" | bc) -eq 1 ]; then echo "高延迟警告:$line" redis-cli slowlog get | head -5 fi done
最后发现是个同事在跑没加索引的HSCAN
,优化后性能提升8倍!
Shell脚本管理Redis就像用筷子吃火锅——刚开始可能夹不起肉丸,熟练后比用漏勺还顺手,建议从简单监控开始,逐步增加自动修复功能,记住三个原则:
(完)
本文由 念梦菡 于2025-07-30发表在【云服务器提供商】,文中图片由(念梦菡)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/488325.html
发表评论