单线程,线上不要用 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文件网络传输
开发运维中的问题
- 读写分离
- 复制数据延迟
- 读到过期数据
- 从节点故障
- 主从配置不一致
- maxmemory不一致 丢失数据
- 规避全量复制
- 第一次不可避免
- 复制挤压缓存区不足
- 节点运行id不匹配
- 规避复制风暴
- 单节点复制风暴:更换复制拓扑
- 单机复制风暴:主节点宕机后,大量全量复制。解决办法:主从分布均衡
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