基础数据结构
字符串
list
hash
set
有序set
备份的方式
RDB:

备份bgsave,fork一个子进程,子进程copy了父进程的进程上下文快照,进程制作rdb文件。
rdb文件会压缩,比内存文件小,适合主从节点传输。
rdb文件恢复快。
rdb的方式不适合实时备份,适合定时做全量备份。
AOF

-
保存修改log,启动时从log恢复。恢复启动较慢,但是可以实时备份。
-
日志太大会进行重写,将redis进程内的数据转化为写命令日志。
image.png
-
日式是文本格式的,重启是翻译log,加快速度
-
写log会先写缓存,策略满足时写磁盘。
重启

复制
建立主从辅助关系
- 配置文件加入: slaveof ip port
2.redis-server启动命令后加入 --salveof server port
3.redis-cli中执行 slaveof server port
断开复制
执行 slaveof no one
- 断开与主节点复制关系
- 从节点晋升为主节点
切换主节点
执行一遍 slaveof ip port
- 断开与旧的主节点的复制关系
- 与新主节点简历复制关系
- 删除从节点当前所有数据
- 对新主节点进行复制操作
注意事项
从节点太多会导致主节点给从节点发送数据太多,过滤消耗网络带宽,影响主库负载。可以通过多层树形拓扑结构降低主库的压力,但是会影响主从延迟。
复制的过程
1.保存主节点信息
2.主从建立socket连接
3.发送ping
4.权限验证
5.同步数据集
6.命令持续复制
数据分布
1.hash和顺序
redis使用hash算法,一致性hash。

问题
1、加节点会导致hash环中部分数据无法命中,需要手动处理或者忽略。
2、节点少的时候影响范围比较大
3、普通的一致性哈希分区在增减节点时需要需要增加一倍或减一半节点才能保证数据和负载均衡
虚拟槽分区
单节点负责成百上千的slot
- 解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
- 节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据。
- 支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。
路由
请求重定向

smart客户端
本地维护一台slot-node映射
事物
以multi开始,exec结束,将命令缓存到执行队列。
集群状态下只保证单节点的事务特征。
内存回收
过期key
惰性删除和定时任务
内存溢出控制策略

网友评论