热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

4.redis持久化

1.持久化的作用2.什么是持久化:redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上3.持久化的实现方式方式一:快照实现方式一:mysqldump实现方式二:redi

1.持久化的作用
2.什么是持久化:redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上
3.持久化的实现方式
方式一:快照
实现方式一:mysql dump
实现方式二:redis RDB
方式二:写日志
实现方式一:mysql binlog
实现方式二:hbase hlog
实现方式三:redis AOF
4.RDB
(1)什么是RDB
技术图片

(2)触发机制-主要三种方式
第一种:save(同步)

技术图片

 


文件策略--->如存在老的RDB文件,新替换老
复杂度--->O(N)
IO类型同步,阻塞,复杂度O(n),优点不会消耗额外内存,缺点,阻塞客户端命令
命令:

127.0.0.1:6379> save
OK

第二种:bgsave(异步)
技术图片
文件策略--->如存在老的RDB文件,新替换老
复杂度--->O(N)
IO类型异步,阻塞发生在fork(子进程),复杂度O(n),优点不阻塞客户端命令,缺点,需要fork(子进程),消耗内存
命令:

127.0.0.1:6379> bgsave
Background saving started

第三种:自动生成RDB
(3)配置:

#如果在9000秒中改变了1条数据自动生成RDB
save 900 1
#如果在300秒中改变了10条数据自动生成RDB
save 300 10
#如果在60秒中改变了10000条数据自动生成RDB
save 60 10000
#rdb文件名字
dbfilename dump.rdb
#rdb文件的路径(默认当前目录)
dir ./
#是否停止写入默认是yes
stop-writes-on-bgsave-error yes
#是否采用压缩格式
rdbcompression yes
#是否对rdb文件检验
rdbchecksum yes

(4)触发机制-不容忽略方式
1)全量复制
2)debug reload:不将内存清空的重启,触发rdb文件生成
3)shutdown:
(5)RDB总结
1)RDB是Redis内存到硬盘的快照,用于持久化
2)save通常会阻塞Redis
3)bgsave不会阻塞Redis,但是会fork新进程
4)save自动配置满足任一就会被执行
5)有些触发机制不容忽视
5.AOF
(1)RDB现存问题
耗时,耗性能
不可控,丢失数据
(2)什么是AOF
客户端每执行一条写命令,redis就在AOF文件里追加一条写命令,当redis宕机后,从AOF文件中把命令从新写入到redis
(3)AOF三种策略
策略一:always
redis写命令刷新到缓冲区,缓冲区根据always策略每条命令刷新到AOF文件
优点:不会丢失数据
缺点:IO开销较大,一般的sata盘只有几百TPS
策略二:everysec
redis写命令刷新到缓冲区,缓冲区根据everysec策略每一秒都刷新到AOF文件
优点:每秒一次fsync丢1秒数据
缺点:丢1秒数据
策略三:no
redis写命令刷新到缓冲区,缓冲区根据操作系统来决定什么时候刷到AOF文件
优点:不用管
缺点:不可控
(4)AOF重写:把过期的,没有用,重复,以及可以优化的命令化简,减少磁盘占用量,加速恢复速度
AOF重写的两种方式
方式一:bgrewriteaof
命令:bgrewriteaof
Background append only file rewriting started
方式二:AOF重写配置
(5)配置:

#打开AOF功能默认为no
appendonly yes
#AOF文件名
appendfilename "AOF文件名"
#AOF目录
dir /bigdiskpath
#AOF重写的时候是否做AOF的append操作
no-appendfsync-on-rewrite yes
#AOF文件重写需要的尺寸
auto-aof-rewrite-min-size
#AOF文件增长率
auto-aof-rewrite-percentage
RDB和AOF的抉择

(6)统计:

#AOF当前尺寸(单位:字节)
aof_current_size
#AOF上次重启和重写的尺寸(单位:字节)
aof_base_size

(7)AOF重写流程图
1.bgrewriteaof对父进程执行之后
2.父进程会fork一个子进程
4.子进程完成AOF重写的过程(将redis内存数据进行一次回溯成写到新的AOF文件中),
3.1主进程正常进行客户端写命令写到aof_buf当中去写到AOF文件当中
3.2过程redis会将这段时间的写命令写到aof_rewrite_buf文件
5.2当新文件生成之后,会将新文件补充道新AOF文件
5.3用新的AOF文件替换旧的AOF文件
技术图片
6.Redis持久化的取舍和选择
(1)RDB和AOF的抉择

启动优先级:RDB低     AOF高
体积      :RDB小    AOF大
恢复速度  :RDB快     AOF慢
数据安全性:RDB丢数据  AOF根据策略决定
轻重     :RDB重     AOF轻

(2)RDB最佳策略
集中管理
主从,从开
(3)AOF最佳策略
开缓存和存储
AOF重写集中管理
everysec每秒去刷
(4)最佳策略
小分片
缓存或者存储
监控(硬盘,内存,负载,网络)
7.开发运维常见问题
(1)fork操作
<1>同步操作
<2>与内存量信息相关:内存越大,耗时越长(与机器类型有关)
<3>info:latest_fork_usec 查看fork执行时间
(2)改善fork
<1>优化使用物理机或高效支持fork操作的虚拟化技术
<2>控制Redis实例最大可用内存:maxmemory
<3>合理配置liunx内存分配策略:vm.overcommit_memory=1
<4>降低fork频率:列如放宽AOF重写自动触发时机,不必要的全量复制
(3)进程外开销
<1>CPU:
开销:RDB和AOF文件生成,属于CPU密集型
优化:不做CPU绑定,不和CPU密集型部署
<2>内存:
开销:fork内存开销,copy-on-write
优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
<3>硬盘
开销:AOF和RDB文件写入,可以结合iostat,iotop分析
硬盘优化:
不要和高硬盘服务部署一起:存储服务,消息队列等
no-appendfsync-on-rewrite = yes
根据写入量决定磁盘类型:列如ssd
单机多实例持久化文件目录可以考虑分盘
(4)AOF追加阻塞
主线程负责写入AOF缓冲区,同时它还有一个同步线程进行每秒刷盘动作,同时还记录最近一次同步时间,主线程负责对比上一次同步时间,如果距离上次同步时间大于两秒阻塞,小于两秒通过
技术图片
(5)AOF阻塞定位
<1>redis日志
<2>单机多实例部署

4.redis-持久化


推荐阅读
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
author-avatar
坏坏纯1990_440
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有