ACL
1 | 127.0.0.1:9736> ACL WHOAMI |
读写特定的键
1 | 127.0.0.1:6379> ACL SETUSER cs +@read +@write on mykey |
1 | 127.0.0.1:9736> ACL SETUSER test +@read +@write ~db:1 on allkeys >mypassword |
保存规则
如果使用 config 模式,将 ACL 权限持久化到 redis.conf 文件中使用下面的命令
1 | 127.0.0.1:9736> CONFIG REWRITE |
如果使用 aclfile 模式,将 ACL 权限持久化到 users.acl 文件中使用下面的命令
acl save
backup
RDB
将 Redis 数据库的快照保存到磁盘文件中来实现
1 | save 900 1 # 900秒内至少有1个键被改变则进行快照保存 |
AOF
每个写操作追加到一个文件中。通过重放这些写操作,可以完全恢复数据集的状态
混合备份
同时使用 RDB 和 AOF 备份
定时备份+实时备份
1 |
|
init
1 | #!/bin/sh |
====echo ${arr[@]}|tr -s ‘ ‘|cut -d’ ‘ -f2
==tr
-s 即将重复出现字符串,只保留第一个
==cut
-d 以什么为分割符
-f 第几个
组合等于 awk ‘{print $2}’=====jsonpath=’{range.items[:3]}{.status.podIP}:6379 ‘
items[:3] 取前3
=====jsonpath=”{range.items[$i,0]}{.status.podIP}:6379 “
双引号传变量
故障
内存问题
设置合理的maxmemory
参数
配置合适的数据淘汰策略 LRU(Least Recently Used,最近最少使用)
网络问题
设置超时时间
大key问题
主备切换
业务重试机制
某些慢查询导致time out。执行slowlog查看慢查询语句
连接数 tcp连接:netstat -nat|grep -i “6379”|wc -l
无法获取连接 设置config 参数 timeout
和tcp-keepalive
来清理失效的连接
优化策略
内存管理:
maxmemory
: 设置 Redis 使用的最大内存量。maxmemory-policy
: 定义达到内存上限时的处理策略,如allkeys-lru
、volatile-lru
、allkeys-random
等。
持久化:
appendonly
: 是否使用追加文件(AOF)持久化。appendfsync
: AOF 持久化的同步频率,可以是everysec
、always
或no
。
网络连接:
tcp-backlog
: 设置 TCP 连接的 backlog,影响并发连接数。timeout
: 客户端空闲连接的超时时间。
性能调优:
databases
: 设置数据库的数量,默认为 16。rdbcompression
: 是否对 RDB 快照文件进行压缩。hash-max-ziplist-entries
、list-max-ziplist-size
等:调整数据结构的内存优化配置。
日志记录:
loglevel
: 日志级别,如debug
、verbose
、notice
、warning
。logfile
: 日志文件的路径。
安全性:
protected-mode
: 是否启用保护模式,防止未授权访问。requirepass
: 设置密码保护。
客户端输出缓冲区限制:
client-output-buffer-limit
: 设置不同类别客户端的输出缓冲区限制。
LRU 缓存淘汰:
active-expire-cycles
: 设置 LRU 缓存淘汰的周期。
超时和Keepalive:
tcp-keepalive
: 设置 TCP 保活参数。
主从复制:
slave-read-only
: 设置从服务器是否只读。min-slaves-to-write
: 设置至少需要多少个从服务器在线,主服务器才接受写入。
集群配置(如果使用 Redis 集群):
cluster-enabled
: 是否启用集群模式。cluster-config-file
: 集群配置文件的位置。
solt槽位
方案一: 直接在集群内执行rebalance
1 | redis-cli -a <password> --cluster rebalance 192.168.33.147:6379 |
方案二: 手动进行Reshared
1 | redis-cli -a <password> --cluster reshard 192.168.33.151:6379 --cluster-from fd9d994b67b91xasdff293b363dadcfe617a19gs1 --cluster-to 01981f970cfe668e1bfedfasb35175f85axde --cluster-slots 50 --cluster-yes |
方案三: 单个槽位迁移
登录后复制
1 | redis-cli -h 192.168.33.34 -p 6379 -a <password> CLUSTER SETSLOT 2209 IMPORTING fd9d994b67b9193ba9f293b363dadcfe617a191d 某个槽位归属于某个节点 |
1 | #!/bin/bash |
reshard_move_slots.sh
reshard
#!/bin/bash
for i in `seq 0 10`;do
mapfile -t ips < "node.txt"
for node in "${ips[@]}"; do
redis-cli -a '' --cluster reshard 192.168.33.98:6379 --cluster-from fd9d994b67b9193ba9f293b363dadcfe617a191d --cluster-to $node --cluster-slots 50 --cluster-yes
#这里的from是填那个槽位最多的节点ID
echo "上次迁移的返回值为:$?"
if [ $? -eq 1 ]; then
echo "上一个命令返回值为1,中断脚本执行。"
exit 1
else
echo "上一个命令返回值不为1,继续执行脚本。"
fi
echo "节点$node执行迁移完毕,正在迁移下一个节点,3s后开始,。。。。"
echo "当前是第$i个循环!"
sleep 3
done
echo "第$i遍执行完毕,,正在sleep 3s。。。。。。"
sleep 3
done