Redis运维和开发学习笔记(2) redis持久化

Redis运维和开发学习笔记(2) redis持久化

文章目录

  • Redis运维和开发学习笔记(2) redis持久化
    • 持久化
    • 持久化方式一:RDB
      • 触发~~的三种~~方式
        • 1. save命令
        • 2. bgsave
        • 配置
        • 触发机制
    • RDB 总结
  • 持久化方式二:AOF
    • AOF的三种策略
    • 三种策略的优缺点
    • AOF重写机制

持久化

  • redis将所有数据保存在内存中,对数据的更新异步地保存在磁盘上

    • 快照
      • MySQL Dump
      • Redis RDB
    • 写日志
      • MySQL Binlog
      • Hbase HLog
      • Redis AOF
  • RDB存在的问题

    • 耗时,耗性能
    • 丢失数据

持久化方式一:RDB

RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。
调用forks 生成一个子进程 子进程复制数据集到一个临时的rdb文件中 当子进程完成对数据集的复制后,redis会用新的rdb文件,并删除旧得rdb文件

触发的三种方式

1. save命令

  • 过程
    client->redis->创建RDB文件(二进制)
redis> save
ok

2. bgsave

  • 过程
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEl1FSOy-1572053410723)(media/15637201103316/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202019-07-21%2022.56.06.png)]

  • 两者对比
    save与sbgsave

     | 命令 | save | bgsave |
    

| — | — | — |
| IO类型 | 同步 | 异步 |
| 阻塞? | 是 | 是(阻塞发生在fork) |
| 复杂度 | O(n) | O(n) |
| 优点 | 不消耗额外的内存 | 不阻塞客户端命令 |
| 缺点 | 阻塞客户端命令 | fork消耗内存 |

配置

save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./ (设置路径)
stop-writes-on-bgsave-error yes(如果bgsave发生错误就停止写入)
rdbcompression yes(采用压缩格式)
rdbchecksum yes(采用校验和)

触发机制

  1. 全量复制(主会自动生成rdb文件)
  2. debug reload 不讲内存清空的重启,触发rdb文件生成
  3. shutdown触发rdb生成

RDB 总结

  1. RDB是 Redisp内存到硬盘的快照,用于持久化
  2. save通常会阻 ARedis塞
  3. bgsaveTZRedis,但是会fork新进程
  4. save自动配置满足任一就会被执行。
  5. 有些触发机制不容忽视

持久化方式二:AOF

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tz5XGcNh-1572053410724)(media/15637201103316/%E5%9B%BE%E7%89%87%201.png)]

| 时间戳 | save |
| — | — |
| T1 | 执行多条命令 |
| T2 | 满足RDB条件自动创建 |
| T3 | 再次执行多条写命令 |
| T4 | 宕机 |
| | 数据丢失 |

写一条命令,就在AOF增加一条命令。当redis宕机,就是用AOF对数据进行完整恢复。

AOF的三种策略

  • always
    redis执行写命令,是将命令卸载缓冲区,每条命令fsycn到硬盘。
  • everysec
    redis执行写命令,是将命令卸载缓冲区,每秒把命令fsycn到硬盘。
  • no
    redis执行写命令,是将命令卸载缓冲区,由操作系统判断把命令fsycn到硬盘。

三种策略的优缺点

命令alwayseverysecno
优点不丢失数据每秒一次Sync丢1秒数据不用管
缺点1O开销较大,一般的sata盘只有几百TPS丢1秒数据不可控

AOF重写机制

原生AOFAOF 重写
set hello worldset hello hehe
set hello jave
set hello hehe

减少磁盘占用量,加快恢复速度

  • 两种方式
    bgrewriteaof(fork子进程,完成重写)
    AOF重写配置

  • 配置

    | 配置名 | 含义 |
    | — | — |
    | Auto-aof-rewrite-min-size | AOF文件重写需要的尺寸 |
    | Auto-aof-rewrite-percentage | AOF增长率 |

  • 统计

    | 统计名 | 含义 |
    | — | — |
    | aof_current_size | AOF 当前尺寸 |
    | aof_base_size | AOF上次启动和重写的尺寸 |

  • 自动触发机制
    aof_current_size > Auto-aof-rewrite-min-size
    (aof_current_size - aof_base_size)/aof_base_size > Auto-aof-rewrite-percentage

  • AOF重写流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Effective C++学习第六天

条款18:让接口更容易被正确使用,不易被误用设计接口的原则:正确性、高效性、封装性、维护性、延展性以及协议的一致性;设计原则:1)导入新类型来预防很多客户端的错误,多使用系统类型&#xff08…

Redis运维和开发学习笔记(4) Redis参数意义

Redis运维和开发学习笔记(4) Redis参数意义 文章目录Redis运维和开发学习笔记(4) Redis参数意义参数意义参数意义 Client连接 问题 id567800790 addr10.18.17.217:37310 fd1572 name age2039114 idle2034860 flagsN db0 sub0 psub0 multi-1 qbuf0 qbuf-free0 obl0 oll0 omem0 …

Effective C++学习第七天

条款23:宁以non-memeber、non-friend替换member函数non-member/non-friend可以给对象带来更大的封装性,从两个方面来考虑:1)考虑封装,越多东西被封装,它们就越不可见,就越少人看到它&#xff0c…

Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式

Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式 主从复制 将主节点的数据改变同步给从节点 作用 备份数据读写分离 存在的问题: 手动干预切主等操作主节点的写能力受到单机限制主节点的存储能力受到单机限制 主从模式的故障恢复 当主节点发生故障时&am…

Effective C++学习第八天

条款26:尽可能延后变量定义式的出现时间当你定义了一个变量,如果在使用变量之前出现异常,那么你得承受一次构造成本和析构成本,而且你没有使用该变量;本条款给出的建议是延迟变量的定义,直到非得使用该变量…

Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令

Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 文章目录Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令info serverinfo clientinfo memoryinfo persistenceinfo statsinfo commandstatsinfo cpuinfo clusterinfo keyspaceinfo server Redis服务器相关的通用…

Effective C++学习第九天

条款32:确定你的public继承塑模出is-a模型class D(derived)以public形式继承class B(base),则每一个类型为D的对象同时也是一个类型为B的对象,反之不成立,因此B比D表现出更加一般化的…

Effective C++学习第十天

条款36:绝不重新定义继承而来的non-virtual函数non-virtual函数执行的是静态绑定,在编译器就已经决定,因此对象对用的函数只和指针的类型有关,而与指针所指的对象无关;记住non-virtual函数的性质:不变性凌驾…

Redis运维和开发学习笔记(7) 内存管理和过期策略

Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录Redis运维和开发学习笔记(7) 内存管理和过期策略内存回收策略惰性删除定时任务删除maxmemory过期策略allkeys-lru主从搭建测试搭建完毕主从测试结果volatile-lru测试结果volatile-ttl测试结果allkeys-lru内存回收策略 …

Effective C++学习第十一天

条款41:了解隐式接口和编译期多态面向对象编程世界总是以显式接口(源码可见的接口)和运行期多态(virtual)解决问题;对于templates及泛型编程的世界,隐式接口和编译期多态显得更加重要&#xff1…

Redis源码分析(零)学习路径笔记

文章目录第一阶段第二阶段 熟悉Redis的内存编码结构第三阶段 熟悉Redis数据类型的实现第四阶段 熟悉Redis数据库的实现第五阶段 熟悉客户端和服务器端的代码实现第六阶段 这一阶段主要是熟悉Redis多机部分的代码实现关于测试方面的文件有一些工具类的文件如下SORT命令的实现一些…

Effective C++学习第十二天

条款47:请使用traits classes表现类型信息STL有五类迭代器分类,input迭代器(只读,一次,向前)、output迭代器(可写,一次,向前)、forward迭代器(读/…

Redis源码分析(一)redis.c //redis-server.c

Redis源码分析(一)redis.c //redis-server.c 入口函数 int main() 4450 int main(int argc, char **argv) {4451 initServerConfig();4452 if (argc 2) {4453 ResetServerSaveParams();4454 loadServerConfig(argv[1]);4455 …

Linux 学习

1.linux文本命令行语言环境设置命令 查看当前语言环境: echo ¥LANG 修改: LANG选择的语言环境’ 引申:https://blog.csdn.net/huoyunshen88/article/details/41113633 2.linux中的硬链接和软连接 linux中文件的储存方式&#xf…

vivo C/C++工程师视频面试总结 20180802

1.自我介绍:有点儿紧张了,直接把自己简历上的一些信息信息说了一遍,说完之后在介绍了一下自己的平时的爱好和兴趣,感觉面试官没有理我,直接进入下一环节了。 2.项目详情:主要是自己最近的一个项目和自己负…

Redis源码分析(二)redis-cli.c

文章目录1. int main()2. parseOptions(int argc, char **argv) 进行ip和port的改变3. lookupCommand(char *name) 查找命令,判断命令合法3.2 strcasecmp(name,cmdTable[j].name)3.1 redisCommand cmdTable[]4. cliSendCommand(int argc, char **argv)4.1 cliConnec…

C语言中有bool变量吗?

1.C/C中定义的数据类型: C语言中定义了6种基本数据类型:short,int,long,float,double,char 4种构造类型:数组,结构体(struct),共用类型(union),枚举类型(enum) 指针类型和空类型 C语…

redis源码剖析(三)——基础数据结构

文章目录SDS链表字典这篇文章关于 Redis 的基础数据:SDS SDS (Simple Dynamic String)是 Redis 最基础的数据结构。直译过来就是”简单的动态字符串“。Redis 自己实现了一个动态的字符串,而不是直接使用了 C 语言中的字符串。 sds 的数据结…

C++迭代器使用错误总结

指针和迭代器的区别: 迭代器: (1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*, --等封装了指针,是一…

redis源码剖析(四)跳表

文章目录整数集合跳跃表压缩列表总结整数集合 当一个集合只包含整数,且这个集合的元素不多的时候,Redis 就会使用整数集合 intset 。首先看 intset 的数据结构: typedef struct intset {// 编码方式uint32_t encoding;// 集合包含的元素数量…