单线程,线上不要用 flush all keys *

占用内存info memory

RDB是持久化 save会阻塞Redis bgsave 不会阻塞,但会fork新进程 copyonwrite

AOF append 策略 always 每条命令fsync到disk everysec 可能丢1s数据

AOF阻塞定位 info persistence 查看阻塞条数 aof_delayed_fsync: 100

单机多实例

单机故障,容量瓶颈 性能

全量复制

复制开销

1、bgsavetime 2、RDB文件网络传输

开发运维中的问题

  1. 读写分离
    • 复制数据延迟
    • 读到过期数据
    • 从节点故障
  2. 主从配置不一致
    • maxmemory不一致 丢失数据
  3. 规避全量复制
    • 第一次不可避免
    • 复制挤压缓存区不足
    • 节点运行id不匹配
  4. 规避复制风暴
    • 单节点复制风暴:更换复制拓扑
    • 单机复制风暴:主节点宕机后,大量全量复制。解决办法:主从分布均衡

Redis噩梦阻塞

redis超时,挂了:单线程的设计,持久化的影响

  • cpu饱和:redis-cli –stat, info cpu(查看内核,用户,子进程的消耗),拒绝复杂和危险命令
  • fork阻塞

Redission

太重了

Redis Sentinel

  • redis sentinel通过三个定时任务实现了sentinel节点对主节点、从节点、其余Sentinel节点的监控

缓冲区

1、client-output-buffer-limit normal 0 0 0 没有限制客户端缓冲,防止大的命令 2、client-output-buffer-limit slave 256mb 64mb 60 3、client-output-buffer-limit pubsub 32mb 8mb 60

client list redis-benchmark -n 100000 -q get,set

string,embstr,

redisObject jemalloc 整理大对象时,会进行拆分

内存管理

  • 设置内存上限
  • config set maxmemory 6GB
  • config set maxmemory-policy allkeys-lru
  • config rewrite