以下配置为实际线上应用参数,根据实际情况调整,仅供参考
bind 0.0.0.0
port 6379
cluster-enabled yes
cluster-config-file "/opt/redis-cluster/6379/nodes.conf"
#15毫秒,集群节点不可用的最长时间,超过此时间它将由其副本进行故障转移
cluster-node-timeout 15000
maxclients 10000
maxmemory 7G
maxmemory-policy volatile-lru
# 随机5个keys最少使用的key清理
maxmemory-samples 5
dbfilename 6379_dump.rdb
dir ./
loglevel notice
logfile "/opt/redis-cluster/6379/redis_6379.log"
# 开启线程进行写操作 例如,如果你有一个四核的机器,尝试使用2个 I/O ,设置为 1 将照常使用主线程。
# 当开启多线程时默认只使用线程进行写操作 ,系统调用并将客户端数据写入到缓冲区
io-threads 2
# 也可以开启线程读操作,IO 线程负责读取命令、解析命令、返回结果。开启后可以有效提升 IO 性能。
io-threads-do-reads yes
#单位秒
save 3600 1
save 300 100
save 60 10000
#如果后台save出错,前台要停止操作,保证数据一致性
stop-writes-on-bgsave-error yes
# rdb 文件压缩
rdbcompression yes
# rdb 文件检查
rdbchecksum yes
# 副本只读
replica-read-only yes
replica-ignore-maxmemory yes
# 保证副本始终可以进行故障转移
cluster-replica-validity-factor 0
# 慢日志10ms
slowlog-log-slower-than 10000
# 128 bytes
slowlog-max-len 128
# 关闭保护模式
protected-mode no
# 当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用
cluster-require-full-coverage no
# normal -> normal clients including MONITOR clients
# replica -> replica clients
# pubsub -> 订阅了至少一个 pubsub 通道或模式的客户端
# client -output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 32mb 8mb 60
#副本backlog大小
repl-backlog-size 500m
#启动内存碎片整理
activedefrag yes
#表示内存碎片的字节数达到100MB时,开始清理
active-defrag-ignore-bytes 100mb
#表示内存碎片空间占操作系统分配给Redis的总空间比例达到10%时,开始清理
active-defrag-threshold-lower 10
#最后,控制清理操作占用CPU时间比例的上、下限
#表示自动清理过程所用CPU时间的比例不低于25%,保证清理能正常开展
active-defrag-cycle-min 25
#表示自动清理过程所用CPU时间的比例不高于75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞Redis,导致响应延迟升高。
active-defrag-cycle-max 75
key回收策略:
在达到内存上限(maxmemory)时DCS将如何选择要删除的内容。有8个取值供选择:
volatile-lru:根据LRU算法删除设置了过期时间的键值。
allkeys-lru:根据LRU算法删除任一键值。
volatile-random:删除设置了过期时间的随机键值。
allkeys-random:删除一个随机键值。
volatile-ttl:删除即将过期的键值,即TTL值最小的键值。
noeviction:不删除任何键值,只是返回一个写错误。
volatile-lfu: 根据LFU算法删除设置了过期时间的键值。
allkeys-lfu: 根据LFU算法删除任一键值。
save和bgsave的区别:
Redis Save: 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
BGSAVE :命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功
1.内存碎片率:redis有命令可以清理,也有配置开启自动清理,不过4.0以后才有,参考:
什么是Redis内存碎片率?碎片如何清理?_姜秀丽的博客-CSDN博客_redis 内存碎片
2.内存不够,被驱逐的key,应该没有办法看到具体是哪个key,