基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计

文章目录

    • 知识点18:数据存储设计
    • 知识点19:Redis持久化:RDB设计
    • 知识点20:Redis持久化:RDB测试
    • 后记

知识点18:数据存储设计

  • 目标掌握常见数据存储的设计

  • 实施

    • 问题
      • 数据存储如何保证数据安全?
      • HDFS的数据怎么保证安全性?
      • HDFS的元数据怎么保证安全性?
      • Spark的RDD数据怎么保证安全性?
    • 解决
      • 磁盘存储:数据存储在硬盘上
        • 特点:容量大、安全性高、读写速度上相对不如内存
        • 解决:副本备份
      • 内存存储:数据存储在内存中
        • 特点:容量小、安全性低、读写性能高
        • 解决:副本、持久化到磁盘
      • HDFS的数据怎么保证安全性?
        • 磁盘:副本机制
      • HDFS的元数据怎么保证安全性?
        • 磁盘:fsimage + edits
          • 副本机制:可以配置fsimage存储在多个目录中,每个目录存储一份
        • 内存:启动时加载到内存,在内存进行读写
          • edits:操作日志,NameNode会将内存中元数据的变化记录在edits文件中
      • Spark的RDD数据怎么保证安全性?
        • 方式一:血缘机制:每个RDD保存与父RDD之间的依赖关系
        • 方式二:persist/unpersist:缓存,将RDD缓存在内存或者磁盘中,缓存有副本机制
        • 方式三:checkpoint:检查点持久化,将RDD的数据持久在磁盘【HDFS】中
  • 小结

  • 掌握常见数据存储的设计

知识点19:Redis持久化:RDB设计

  • 目标:掌握Redis的RDB持久化机制

  • 路径

    • step1:问题
    • step2:RDB方案
    • step3:优缺点
  • 实施

    • 问题

      Redis中的数据都存储在内存中,由内存对外提供读写,Redis一旦重启,内存中的数据就会丢失,Redis如何实现持久化?
      
      • 写:set/hset/lpush/sadd/zadd
      • 写入内存直接返回
      • 读:get/hget/lrange/smembers/zrange
        • 直接读取内存
      • 每次Redis写入内存,将数据同步到磁盘
      • 如果重启,就将磁盘中的数据重新加载到磁盘,提供读取
    • RDB方案

      • Redis默认的持久化方案

      • 思想

        • 按照一定的时间内,如果Redis内存中的数据产生了一定次数的更新,就将整个Redis内存中的所有数据拍摄一个全量快照文件存储在硬盘上
        • 新的快照会覆盖老的快照文件,快照是全量快照,包含了内存中所有的内容,基本与内存一致
        • 如果Redis故障重启,从硬盘的快照文件进行恢复
      • 举例

        • 配置:save 30 2
        • 解释:如果30s内,redis内存中的数据发生了2条更新【插入、删除、修改】,就将整个Redis内存数据保存到磁盘文件中,作为快照
      • 过程

        image-20210521162946231

      • 触发

        • 手动触发:当执行某些命令时,会自动拍摄快照【一般不用】

          • save:手动触发拍摄RDB快照的,将内存的所有数据拍摄最新的快照
            • 前端运行
            • 阻塞所有的客户端请求,等待快照拍摄完成后,再继续处理客户端请求
            • 特点:快照与内存是一致的,数据不会丢失,用户的请求会被阻塞
          • bgsave:手动触发拍摄RDB快照的,将内存的所有数据拍摄最新的快照
            • 后台运行
            • 主进程会fork一个子进程负责拍摄快照,客户端可以正常请求,不会被阻塞
            • 特点:用户请求继续执行,用户的新增的更新数据不在快照中
          • shutdown:执行关闭服务端命令
          • flushall:清空,没有意义
        • 自动触发:按照一定的时间内发生的更新的次数,拍摄快照

          • 配置文件中有对应的配置,决定什么时候做快照

            #Redis可以设置多组rdb条件,默认设置了三组,这三组共同交叉作用,满足任何一个都会拍摄快照
            save 900 1
            save 300 10
            save 60 10000
            
            • 为什么默认设置3组?
    • 原因:如果只有一组策略,面向不同的写的场景,会导致数据丢失
      - 针对不同读写速度,设置不同策略,进行交叉保存快照,满足各种情况下数据的保存策略

    • 优缺点

      • 优点
        • rdb方式实现的是全量快照,快照文件中的数据与内存中的数据是一致的
        • 快照是二进制文件,生成快照加载快照都比较快,体积更小
        • Fork进程实现,性能更好
        • 总结:更快、更小、性能更好
      • 缺点
        • 存在一定概率导致部分数据丢失
    • 应用:希望有一个高性能的读写,不影响业务,允许一部分的数据存在一定概率的丢失**【做缓存】**,大规模的数据备份和恢复

  • 小结

    • 什么是RDB机制,优缺点分别是什么?

      • 思想:在一定时间内如果Redis发生一定次数的更新,就拍摄一个全量快照二进制文件存储在磁盘中
    • 如果重启,直接加载二进制文件恢复到内存

      • 触发
        • 手动:bgsave,shutdown
        • 自动:save 时间 次数
      • 特点
        • 优点:更小、更快、全量、性能更好
        • 缺点:存在一定概率数据丢失
      • 场景:大规模数据缓存或者数据备份和恢复

知识点20:Redis持久化:RDB测试

  • 目标实现RDB持久化的测试

  • 实施

    • 查看当前快照

      ll /export/server/redis/datas/
      

      image-20210522101037218

    • 配置修改

      cd /export/server/redis
      vim redis.conf
      #202行
      save 900 1
      save 300 10
      save 60 10000
      save 20 2
      
    • 重启redis服务,配置才会生效

      shutdown
      redis-start.sh
      
  • 插入数据

      set s1 "laoda"set s2 "laoliu"set s3 "laoliu"
    
  • 查看dump的rdb快照

      ll /export/server/redis/datas/
    

    image-20210522101331161

  • 小结

    • 实现RDB持久化的测试

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12394313.html

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

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

相关文章

QT实现凸凹边形等距缩放

参考:https://blog.csdn.net/weixin_39383896/article/details/99615371和https://blog.csdn.net/qq_15821883/article/details/117421400 代码逻辑思路: 1、获取向量AB、BC的坐标。 2、计算向量AB、BC的长度。 3、根据点乘获取cosθ大小。 4、根据cosθ…

数据结构之手撕顺序表(讲解➕源代码)

0.引言 在本章之后,就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握,如果有小伙伴对上面相关的知识还不是很清晰,要先弄明白再过来接着学习哦! 那进入正题,在讲解顺序表之前,我们先来介绍…

代码随想录算法训练营第23期day25| 216.组合总和III 、17.电话号码的字母组合

目录 一、(leetcode 216)组合总和III 剪枝 二、(leetcode 17)电话号码的字母组合 思路 一、(leetcode 216)组合总和III 力扣题目链接 状态:已AC,就是在77题的前提下&#xff0c…

Unity3D 程序员常用的核心类及方法详解

Unity3D是一款强大的游戏引擎,广泛应用于游戏开发领域。作为Unity3D程序员,掌握常用的核心类及方法是非常重要的。本文将详细介绍Unity3D中程序员常用的核心类及方法,并给出代码实现。 对惹,这里有一个游戏开发交流小组&#xff…

基于ssm的旅游管理系统

功能如下图所示 摘要 基于SSM框架的旅游管理系统代表了信息技术在旅行业中的崭新机遇,为旅行企业提供了强大的工具,以应对现代旅游市场的复杂挑战。这个系统的研发和实施具有广泛的研究意义,它深刻影响了旅游业的发展,具体表现如下…

简单测试一下 展锐的 UDX710 性能

最近在接触 联通5G CPE VN007 ,发现使用的是 展锐的Unisoc UDX710 CPU,正好简单的测试一下这颗CPU CPU信息 UDX710 是一颗 双核 ARM Cortex-A55 处理器,主频高达 1.35GHz processor : 0 BogoMIPS : 52.00 Features : fp…

QT最小化到托盘显示

一、效果: 程序关闭后,程序并没有退出,而是放入了托盘中;点击恢复原始大小,或者双击托盘图标,可以恢复程序原来的窗口。如下图。 那qt是如何实现这样的办法呢,其实就是用到了 QSystemTrayIcon类…

2023.10.17 关于 wait 和 notify 的使用

目录 引言 方法的使用 引入实例(wait 不带参数版本) wait 方法执行流程 wait 和 notify 组合实例 wait 带参数版本 notify 和 notifyAll 的区别 经典例题 总结 引言 线程最大的问题是抢占式执行,随机调度虽然线程在内核里的调度是随…

【前端学习】—JS判断数据类型的方式有哪些(八)

【前端学习】—JS判断数据类型的方式有哪些(八) 一、JS中判断数据类型的场景 二、JS中有哪些数据类型 三、JS判断数据类型的方式有哪些 const arr[]; const object{};const number1; const stringstring;//typeofconst typetypeof arr; console.log(type…

从头开始机器学习:神经网络

一、说明 如果你还没有做过逻辑回归,你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。 二、神经网络简介 神经网络是一个神经元网络。这些神经元是逻辑回归函数,它们被链接在一起形成一个网络…

只会Python,怎么用PC控制无人机自动飞行?

PC-SDK是阿木实验室 (AMOVLAB) 为了简化开源飞控的控制协议MAVLink,优化和维护的一个基于PC电脑运行MAVSDK(支持Windows和Ubuntu)的Python SDK库。 相对于传统的无人机控制开发,开发者无需掌握C/C语言和ROS等相关知识,只要学会Python编程及懂…

leetcode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…

wsl使用vscode连接,远程安装C/C++ 拓展时,报错

报错内容: EACCES: permission denied, rename /home/wen/.vscode-server/extensions/.b61b1c7c-f703-4dfd-bdc5-d9a00681c4b7 -> /home/wen/.vscode-server/extensions/ms-vscode.cpptools-1.17.5-linux-x64 解决办法: 升级wsl到wsl2就好了。 &a…

Vue-router快速入门 是什么 如何跳转 如何传值的问题

3.1 Vue-router是什么 Vue-router:Vue.js 的官方路由为 Vue.js 提供富有表现力、可配置的、方便的路由 官网:https://router.vuejs.org/zh/ 作用: 1.实现vue页面(组件)的跳转 2.可以在跳转的时候携带参数 3.2 Vue3使用Vue-router(静态路由) 基于Vu…

C# CodeFormer Inpainting 人脸填充

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace CodeFormer_D…

UnitTesting 单元测试

1. 测试分为两种及详细介绍测试书籍: 1.1 Unit Test : 单元测试 - test the business logic in your app : 测试应用中的业务逻辑 1.2 UI Test : 界面测试 - test the UI of your app : 测试应用中的界面 1.3 测试书籍网址:《Testing Swift》 https://www.hackingwithswift.c…

MySQL——六、库表操作(下篇)

MySQL 一、INSERT语句二、REPLACE语句三、UPDATE语句四、delete和TRUNCATE语句五、MySQL用户授权1、密码策略2、用户授权和撤销授权 一、INSERT语句 #在表里面插入数据:默认情况下,一次插入操作只插入一行 方式1: INSERT [INTO] 表名 [(colu…

uni-app小程序使用DCloud(插件市场)流程

一、DCloud(插件市场) DCloud 是uni-app官方插件市场,里面有官方、团队、个人发布的众多插件,包括uni-ui、uni-pay 等。而像uni-ui这种大型组件库都有官方文档可参考,但一些团队或个人发布的小型插件没有文档&#xf…

垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程

文章目录 🍊 垃圾回收器、垃圾回收算法、空间分配担保🎉 Serial🎉 ParNew🎉 Parallel scavenge🎉 复制算法🎉 分代收集算法🎉 进入老年代的几种情况📝 空间分配担保 🎉 S…

超火的双臂烹饪机器人Project YORI,分分钟成为你的专属大厨!

原创 | 文 BFT机器人 当前行业内有两种通用的烹饪自动化方法:一种是“制造一个可以在普通厨房中运作的烹饪机器人,因为每个人都有厨房”,这听起来很不错,但接下来你就必须使你的烹饪机器人能够在厨房环境中正常运行,这…