redis操作 AOF RDB 主从复制 集群

Redis操作

1.Redis的持久化
Redis提供了2个不同方式的持久化方式
RDB
RDB是指在指定的时间间隔将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时将快照文件直接读到内存中
备份是如何进行的?
Redis会单独创建一个子进程来进行持久化,同时先将数据写入到一个临时文件中,等待持久化过程都结束了,再用临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,对于数据的恢复不是非常敏感,那RDB方式比AOF方式更加的高效,RDB的缺点是最后一次持久化的数据可能会丢失。
关于fork
在Linux中,fork()会产生一个和父进程完全相同的子进程,但子进程此后会有一个exec系统调用,出于效率考虑,Linux中引入“写时复制技术”,一般情况下父进程跟子进程会公用共同的一段物理内存,只有进程空间的各段发生变化时候,才会将父进程内容复制给子进程。
关于redis.conf配置 贴图
默认为dump.rdb
在这里插入图片描述
rdb文件的保存路径,也可以修改。默认Redis启动的命令在所在的目录下
在这里插入图片描述
RDB的保存策略 重点 默认 15分钟 1次、6分钟 10次、1分钟 10000次
在这里插入图片描述
进行rdb保存时,将文件压缩,默认是开启的
在这里插入图片描述
rdbchecksum yes
在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
在这里插入图片描述
stop-writes-on-bgsave-error yes 当Redis无法写入磁盘的话,直接关掉Redis的写操作
在这里插入图片描述
rdb如果想备份的话,只需要将rdb文件拷贝到某一个地方,等到恢复的时候自动加载它即可。
rdb的优点:
恢复速度快 单独开fork线程
节省磁盘空间 进行压缩了
rdb的缺点:
虽然使用了fork技术,但当数据量特别大时候,还是会消耗性能。同时它是周期备份,当Redis意外down掉时候,就会丢失最后一次快照的
AOF
以日志的形式来记录每个写操作,将redis的指令记录下来(不记录读操作),只许追加文件但不可以修改文件,Redis启动的时候会将文件构建数据。
AOF默认是不开启的,需要手动配置。
在这里插入图片描述
如果AOF跟RDB同时开启是听AOF的。
同时,如果AOF文件损坏,可以通过 redis-check-aof --fix appendonly.aof 进行恢复
AOF同步的频率设置分为3中
在这里插入图片描述
1、始终同步,每次将Redis的写入都立刻记录日志
2、每秒同步,每秒记录,本秒的数据可能会丢失
3、不主动进行同步,将同步时机交给操作系统
AOF采用的是文件追加的方式,文件会越来越大,为了避免这种情况,增加了AOF重写机制
这么做肯定是为了提高读写效率,减少磁盘IO,通常通过3个手段、
1)进程内已经超时的数据不再写文件。
2)旧的AOF文件含有无效命令,如del key1、 hdel key2、srem keys、set a 111、set a 222等。重写使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令。
3) 多条写命令可以合并为一个,如lpush list a、lpush list b、 lpush list c 可以转化为:lpush list a b c。为了防止但挑明了过大造成客户端缓冲区溢出,对于list、set、hash、zset等类型曹组,以64个元素为界拆分为多条。
触发AOF合并的条件有两个,都要满足
在这里插入图片描述
简单来说就是大于64M后,是原来阈值的一倍就可。
AOF的优点
备份机制更稳健,丢失数据概率更低
可读的日志文本,通过操作AOF稳健,可以处理误操
AOF的缺点
比起RDB占用更多的磁盘空间。
恢复备份速度要慢
每次读写都同步的话,有一定的性能压力
存在个别Bug,造成恢复不能
项目中如何使用?
官网是两个都推荐
如果数据不敏感,单独用RDB
不建议单独用AOF,可能会出现BUG
就缓存数据的话,都不开也行
Redis主从复制
主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
在这里插入图片描述
好处是读写分离,性能扩展 容灾快速恢复
拷贝多个redis.conf文件include
开启daemonize yes
Pid文件名字pidfile
指定端口port
Log文件名字
Dump.rdb名字dbfilename
Appendonly 关掉或者换名字
这个就不详细介绍了,因为现在用的更多的是Redis集群
Redis集群主要解决的是第一个是容量不足,redis进行扩容,第二个并发写操作,redis难分探。
Redis集群的安装
1、安装ruby环境
执行yum install ruby
执行yum install rubygems
2、执行redis-3.2.0.gem 执行命令 gem install --local redis-3.2.0.gem
3、创建至少6个实例 测试的话 在用一台服务器 不同端口,正常的话至少6台服务器
拷贝多个redis.conf文件
开启daemonize yes
Pid文件名字
指定端口
Log文件名字
Dump.rdb名字
Appendonly 关掉或者换名字
安装redis cluster配置修改
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换
最后进行合体
下面是IP地址
./redis-trib.rb create --replicas 1 202.204.124.134:6379 202.204.124.134:6380 202.204.124.134:6381 202.204.124.134:6389 202.204.124.134:6390 202.204.124.134:6391
登录进来之后,可以通过cluster nodes命令来查询集群信息
在这里插入图片描述
Redis集群中一个很重要的概念是slots
一个Redis集群一个有16384个插槽(hash slot),数据库中的每一个键都属于16384个插槽的其中一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
有几个常见的Redis集群问题
1、如果主节点下线?从节点能否自动升为主节点?
自动的
2、主节点恢复后,主从关系会如何?
down掉后,自动变成从机了
3、如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?
如果数据很重要,全覆盖都用不了,如果数据无所谓,可以用
cluster-require-full-coverage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值