精华内容
下载资源
问答
  • 数据持久化
    千次阅读
    2021-08-27 16:03:04

    一、概念
    一)redis提供了不同级别的持久化方式:

    1. RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
    2. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
    3. 如果你只希望你的数据在服务器运行的时候存在,你也可以不适用任何持久化方式。
    4. 也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会有限载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整

    二)RDB的优缺点
    优点:

    1. RDB是一个非常紧凑的文件,它保存了某个时间点的数据集,非常适用于数据集的备份,这样即使出了问题你也可以根据需求恢复到不同版本的数据集。
    2. RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复。
    3. RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。
    4. 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。

    缺点:

    1. 如果希望在redis意外停止工作的情况下丢失的数据最少的话,那么RDB不适合
    2. RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致redis在一些毫秒级内不能相应客户端的请求。

    三)AOF的优缺点
    优点:

    1. 使用AOF会让你的redis更加耐久
    2. AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等)未执行完整的写入命令,你也可使用redis-check-aof工具修复这些问题。
    3. redis可以在aof文件体积变得过大时,自动的在后台对aof进行重写。
    4. aof文件有序地保存了对数据库执行的所有写入操作,这些写入操作以redis协议的格式保存,因此aof文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。

    缺点:

    1. 对于相同的数据集来说,aof文件的体积通常要大于rdb文件的体积。
    2. 根据所使用的fsync策略,aof的速度可能会慢于rdb

    四)如何选择使用哪种持久化方式:

    1. 一般来说,如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。
    2. 如果非常关心你的数据,但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。
    3. 不推荐只是用AOF持久化,因为定时生成RDB快照(snapshot)非常便于进行数据库备份,并且RDB恢复数据集的速度也要比AOF恢复的速度要快。

    五)更多RDB细节:

    1. 在默认情况下,redis将数据库快照保存在名字为dump.rdb的二进制文件中。
    2. 这种持久化方式被称为快照snapshotting
    3. 当redis需要保存dump.rdb文件时,服务器执行以下操作:
      • redis调用forks,同时拥有父进程和子进程。
      • 子进程将数据集写入到一个临时RDB文件中。
      • 当子进程完成对新RDB文件的写入是,redis用新RDB文件替换原来的RDB文件,并删除旧的RDB文件


    二、redis数据持久化相关配置以及命令
    一)RDB的配置:
    1、在配置文件中已经预设三个条件

    • save 900 1 #15分钟内至少有一个键被更改
    • save 300 10 #5分钟内至少有10个键被更改
    • save 60 10000 #1分钟内至少有10000个键被更改

    2、默认的rdb文件路径是当前目录,文件名是:dump.rdb,可以在配置文件中修改路径和文件名,分别是dir和dbfilename

    • dir ./ #rdb文件存储路径
    • dbfilename dump.rdb #rdb文件名

    3、RDB文件的压缩:

    • RDB文件是通过压缩的,可以通过配置rdbcompression参数来禁用压缩,redis默认是开启压缩的。

    4、RDB相关命令:

    • 如果没有触发自动快照,需要对redis执行手动快照操作,save和bgsave都是执行手动快照,但是两者有区别:可以通过save和bgsave命令来手动快照,两个命令的区别是前者是由主进程进行快照,会阻塞其他请求,后者是通过fork子进程进行快照。

    二)AOF(Append-Only File)
    1、快照功能并不是非常耐久(dura ble):如果redis因为某些原因而造成故障停机,那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。从1.1版本开始,redis增加了一种完全耐久的持久化方式:AOF持久化。
    2、可以在配置文件中打开AOF方式:

    • appendonly yes

    3、从现在开始,每当redis执行一个改变数据集的命令时(比如set),这个命令就会被追加到AOF文件的末尾。

    4、AOF工作原理:
    1)redis执行fork(),现在同时拥有父进程和子进程
    2)子进程开始将新AOF文件的内容写入到临时文件
    3)对于所有新执行的写入命令,父进程一边将他们累积到一个内存缓存中,一边将这些改动追加到现有AOF文件的末尾,这样即使在重写的中途发生停机,现有的AOF文件也还是安全的
    4)当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新AOF文件的末尾

    5、日志重写
    1)AOF文件的体积会变得越来越大
    2)重建(rebuild)
    3)bgrewriteaof命令
    4)自动触发AOF重写

    6、AOF相关配置
    1)AOF文件的位置和RDB的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改
    2)重写策略的参数设置

    • auto-aof-rewrite-percentage 100
    • 当前的AOF文件大小超过上一次重写的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF大小为依据
    • auto-aof-rewrite-min-size 64mb
    • 限制了允许重写的最小AOF文件

    3)文件同步策略

    • 文件写入默认情况下会先写入到系统的缓存中,系统每个30秒同步一次,才是真正的写入到磁盘,如果在这30秒服务器宕机那数据也会丢失
    • appendfsync always每次都同步(最安全但是最慢)
    • appendfsync everysec每秒同步(默认的同步策略)
    • appendfsync no 不主动同步,由操作系统来决定(最快但是不安全)

    7、优化AOF文件:

    • 可以使用BGREWRITEAOF命令来重写AOF文件。目的是去除数据的中间执行过程,保存最终数据命令即可。

    8、AOF文件损坏
    1)为现有的AOF文件创建一个备份
    2)使用redis-check-aof修复

    • redis-check-aof --fix
    • (可选)使用diff -u对比修复后的AOF文件和原始AOF文件的额备份,查看两个文件之间的不同之处。
    • 重启redis服务器,等待服务器载入修复后的AOF文件,并进行数据恢复。

    9、怎样从RDB方式切换为AOF方式:
    1)为最新的dump.rdb文件创建一个备份
    2)将备份放到一个安全的地方
    3)执行以下两条命令

    • redis-cli config set appendonly yes
    • redis-cli config set save ""

    4)确保写命令会被正确的追加到AOF文件的末尾

    三、redis数据备份
    一)数据备份
    1、确保你的数据由完整的备份(磁盘故障,节点失效,诸如此类的问题都可能使数据丢失,不进行备份是非常危险的)
    2、无论何时,赋值RDB文件都是绝对安全的。

    二)备份步骤
    1)创建一个定期任务,每小时将一个RDB文件备份到一个文件夹,并且每天将一个RDB文件备份到另一个文件夹。
    2)确保快照的备份都带有相应的日期和时间信息,每次执行定期任务脚本是,使用find命令来删除过期的快照:比如说,可以保留最近48小时内的每小时快照,还可以保留最近一两个月的每日快照。
    3)至少每天一次,将RDB备份到你的数据中心之外,或者至少是备份到你运行redis服务器的屋里机器之外

    三)容灾备份:
    1)对数据进行备份,并将这些备份传送到多个不同的外部数据中心。
    2)容灾备份可以在redis运行并产生快照的主数据中心发生严重的问题是,仍然让数据处于安全状态。

    四)容灾备份方法:
    1)Amazon S3
    2)传送快照可以使用SCP来完成(ssh的组件)
    3)在文件传送完毕之后,检查所传送备份文件的体积和原始文件的体积是否相同。

    更多相关内容
  • 数据持久化

    千次阅读 2021-11-25 10:04:21
    数据持久化企业数据架构存储技术存储架构 企业数据架构 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。 数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL...

    企业数据架构

    企业数据架构
    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。

    数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL数据库、图片和视频等文件的对象存储数据库等。

    其中缓存数据库是应用内存存储数据,其余的存储类型都是持久化的存储。

    1. 联机交易区,即需要进行OLTP(On-line Transaction Processing,联机事务处理)的数据区域,与统计分析区相比,数据为近期产生的,热度较高,数据量相对较小,并发较高,要求实时处理。

    2. 统计分析区,即需要进行OLAP(On-line Analytical Processing,联机分析处理)的数据区域,单个数据的查询频率较OLTP更低,但数据量大,通常会涉及较复杂的聚合计算。

    联机交易区和统计分析区之间使用ETL工具如Kattle或其他数据复制技术来实现数据的导入。

    存储技术

    RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,通常简称为磁盘阵列。

    RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,能提供比单个磁盘更高的存储性能和数据冗余的技术。当单块磁盘出现故障时,RAID会根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在RAID中的多个磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合I/O带宽。磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。

    RAID中主要有三个关键概念和技术
    1)镜像(Mirroring)

    镜像是将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。镜像的写性能要稍低,确保数据正确地写到多个磁盘需要消耗更多的时间。

    2)数据条带(DataStripping)

    数据条带是将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上的数据进行读写操作,从而获得非常可观的I/O性能提升。

    2)数据校验(Data Parity)

    数据校验是利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以在很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。

    通过组合运用这三种技术,可以把RAID分为不同的等级,以满足不同数据应用的需求。实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID3、RAID5、RAID6和RAID10。

    (1)RAID0

    RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并发读访问。由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的。

    RAID0具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。因此,RAID0一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

    (2)RAID1

    RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统会自动从镜像磁盘读取数据,不会影响用户工作。

    RAID1与RAID0刚好相反,是为了增强数据安全性而使两块磁盘数据呈现完全镜像。RAID1拥有完全容错的能力,但实现成本高。RAID1应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

    (3)RAID3

    RAID3采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘。RAID3完好时读性能与RAID0完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。向RAID3写入数据时,必须计算所有同条带的校验值,性能较低。

    RAID3只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用于大容量数据的顺序访问应用,如影像处理、流媒体服务等。目前,RAID5算法不断改进,在大数据量读取时能够模拟RAID3,而且RAID3在出现坏盘时性能会大幅下降,因此常使用RAID5替代RAID3来运行具有持续性、高带宽、大量读写特征的应用。

    (4)RAID5

    RAID5和RAID3类似,但校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。

    RAID5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID5这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。是目前综合性能最佳的数据保护解决方案。RAID5基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

    (5)RAID6

    RAID6引入双重校验的概念,可以保证阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。RAID6思想最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解二元方程来重建两个磁盘上的数据。RAID6具有快速的读取性能、更高的容错能力。但是,它的成本要高出RAID5许多,写性能也较差,并且设计和实施非常复杂。因此,RAID6很少得到实际应用,主要用于对数据安全等级要求非常高的场合。

    (6)RAID10

    RAID10也称为RAID1+0,实际是将RAID1和RAID0标准结合的产物。RAID10技术需要至少4块硬盘来组建,先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1按阵列实施RAID0技术。RAID10方案造成了50%的磁盘浪费,但是它提供了200%的速度和防止单磁盘损坏的数据安全性。

    存储架构

    存储架构

    扇区是磁盘的最小存储单位,多个连续的扇区组成一个块,也叫物理块。

    文件由多个不连续的物理块组成,文件系统使用块来读取设备,块是文件系统的最小单位。使用块存储信息的设备叫作块设备,块设备是I/O设备中的一类,每个块都有自己的地址。

    文件系统是操作系统在存储设备上组织文件的方法,是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

    1. DAS(Direct-attached Storage)

    直连存储存储通过SAS、iSCSI或FC等接口与服务器直接连接,中间没有任何转换交换设备,作为服务器内置硬盘容量的扩充,具有一定的灵活性和限制性。RAID通常在服务器端进行设置,通常将单一存储与服务器直连也称为DAS。

    1. NAS(Network Attached Storage)

    网络附加存储存储设备通过标准的网络拓扑结构(以太网)添加到一群计算机上,可以理解为服务器+硬盘+文件系统软件的组合。存储可配置网络IP地址,直接接入IP局域网络,RAID在存储器端进行设置并配置文件共享功能。NAS利用现有以太网网络,因此部署灵活,成本非常低,基于TCP/IP协议的特性可以提供丰富的网络服务,基于文件的形式提供数据的存储及备份,但是TCP/IP协议决定了数据传输的数据打包及解包,会占用系统资源,传输速率受限于以太网的速率。

    在存储功能上面有一个文件系统,NAS是文件存储,聚焦在应用、用户和文件以及它们共享的数据上,NAS通过网络共享协议使用一个文件系统,应用服务器和NAS之间使用的协议有SMB、NFS以及AFS等网络文件系统协议。对于应用服务器来说,NAS就是一个网络上的文件服务器,可以上传、下载文件。

    1. SAN(Storage Area Network)存储区域网络

    SAN通过光纤通道交换机连接存储阵列和服务器主机,成为一个专用存储网络。RAID在存储器端进行设置。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据放在哪里,服务器都可直接存取所需的数据。

    SAN存储使用光纤网络进行传输,并且独立于应用网络,可以提供非常高的带宽,数据的传输基于块协议,无需对数据进行处理,直接进行传送,因此性能最好。另外光纤线路可以提供远距离的高带宽链路,可以实现数据中心的异地灾备应用。但是SAN部署复杂,成本较高。NAS和SAN又叫网络存储,都是使用RAID技术提供冗余和并发读写,两者最本质的区别在于文件管理系统位置。在SAN存储架构中,文件系统是部署在每个应用服务器上,SAN是块存储,聚焦在磁盘、磁带以及连接它们的基础结构,而把文件系统的抽象交由应用服务器负责。

    SAN的客户端和服务器端之间的协议有Fibre Channel、iSCSI、ATA overEthernet(AoE)和HyperSCSI。对于应用服务器来说,SAN就是一块磁盘,可以对其格式化、创建文件系统并挂载。

    1. OSS(Object Storage Service)对象存储

    传统的网络存储价格较贵,扩展数量有限,互联网生态下的云存储则用数量弥补质量,以大量低成本的普通PC服务器组成网络集群来提供服务。相比传统的高端服务器,同样价格下分布式存储提供的服务更好、性价比更高,且新节点的扩展以及坏旧节点的替换更为方便。

    对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠性的云存储技术,适合存放任意类型的文件。对象和存储空间是对象存储的核心概念,围绕对象和存储空间需要建立访问控制、数据管理、数据加密、容灾备份机制。

    (1)对象存储的概念

    对象是OSS存储数据的基本单元,也称为OSS的文件。对象由元信息(ObjectMeta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键-值对,表示了对象的一些属性,如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。其中地域表示OSS的数据中心所在物理位置,一般来说,距离用户更近的地域访问速度更快。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。每个用户可以拥有多个存储空间。存储空间的名称在OSS范围内必须是全局唯一的,一旦创建就无法修改名称。存储空间内部的对象数目没有限制。

    (2)对象存储的实现机制

    OSS,依赖于文件系统提供了从“对象”到“块”的映射,采用key-value的扁平化存储架构设计,调用API就能进行数据存储和读取。对象存储最常用的方案就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外配置几台服务器作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。

    数据冗余存储机制,OSS将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上。OSS周期性地通过校验等方式验证数据的完整性,及时发现因硬件失效等原因造成的数据损坏。当检测到数据有部分损坏或丢失时,会利用冗余的数据进行重建并修复损坏数据,确保硬件失效时的数据可靠性和可用性。

    (3)OSS与传统存储的区别

    与传统存储相比,OSS使用方便,价格低,扩展方便,可以存储海量数据。网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件。块存储的客户端通过数据块的地址访问SAN上的数据块。对象存储则通过REST网络服务访问对象。对象存储提升了存储系统的扩展性。当一个存储系统中保存的数据越来越多时,存储系统也需要同步扩展,然而由于存储架构的硬性限制,传统网络存储系统的管理开销会呈指数上升。而对象存储架构的扩展只需要添加新的存储节点就可以。它解决了存储海量大数据的问题。

    (4)对象存储的开源实现

    对象存储的实现方案包括Swift、Ceph、Minio、HBase MOB、Hadoop Ozone等。

    展开全文
  • vuex数据持久化处理

    千次阅读 2021-06-01 09:56:32
    如果我们想要持久化保存数据可以使用 localStorage 或者sessionStorage 存储在本地,保证刷新后数据不会丢失。 但我们也可以使用插件实现刷新后数据不丢失 在这里我推荐使用这两个插件vuex-pers

    大家都知道在使用vuex时有一个弊端就是,就是一旦页面刷新,所有之前存储的状态就全部没了,这是因为js代码运行在内存中,代码运行时所有的变量和函数都是保存在内存中的,刷新的时候以前申请的内存将会被释放,并且js脚本会被重新加载,变量重新赋值。所以在我们使用vuex的时候只要一刷新数据就没了。如果我们想要持久化保存数据可以使用 localStorage 或者sessionStorage 存储在本地,保证刷新后数据不会丢失。
    但我们也可以使用插件实现刷新后数据不丢失
    在这里我推荐使用这两个插件vuex-persistedstatevuex-persist

    第一种,安装vuex-persistedstate

    npm install vuex-persistedstate -S
    

    详情可见github:https://github.com/robinvdvleuten/vuex-persistedstate

    1.vuex-persistedstate默认存储到localStorage,使用如下:
    store文件夹下面的index.js中引入

    import Vue from 'vue'
    import Vuex from 'vuex'
    import createPersistedState from "vuex-persistedstate"
    Vue.use(Vuex)
    const store = new Vuex.Store({
    	plugins: [createPersistedState()],
    	modules: {}
    })
    

    2.使用vuex-persistedstate存储到sessionStorage,如下:

    import Vue from 'vue'
    import Vuex from 'vuex'
    import createPersistedState from "vuex-persistedstate"
    Vue.use(Vuex)
    const store = new Vuex.Store({
    	plugins: [createPersistedState({
    		storage: window.sessionStorage
    	})],
    	modules: {}
    })
    

    3.使用vuex-persistedstate指定需要持久化的state数据,如下:

    import Vue from 'vue'
    import Vuex from 'vuex'
    import createPersistedState from "vuex-persistedstate"
    Vue.use(Vuex)
    const store = new Vuex.Store({
    	modules: {},
        plugins: [createPersistedState({
            storage: window.sessionStorage,
    		// 方法1:用reducer,这里的val是由store里面的所有state,不加reducer为储存所有,reducer为指定存储
            reducer(val)  {
                return {
                    // 只储存state中的name
                    keyName: val.name
                }
            }
    		// 方法2:用paths,数组里面填模块名,存储指定模块
    		// paths: ['Home', 'Order']
        })]
    })
    

    第二种 引入vuex-persist 插件,它是为 Vuex 持久化存储而生的一个插件。不需要你手动存取数据 ,而是直接将状态保存至 cookie 或者 localStorage
    首先安装vuex-persist
    详情见这里:https://github.com/championswimmer/vuex-persist

    npm install vuex-persist -S
    

    store文件夹下面的index.js中引入

    import Vue from 'vue'
    import Vuex from 'vuex'
    import VuexPersistence from 'vuex-persist'
    Vue.use(Vuex)
    
    const dataPersistence = new VuexPersistence({
        storage: window.localStorage
    })
    const store = new Vuex.Store({
    	modules: {},
        plugins: [dataPersistence.plugin]
    })
    

    通过以上设置,在各个页面之间跳转,如果刷新某个页面,数据并不会丢失,依然存在,并且不需要在每个 mutations 中手动存取数据

    展开全文
  • Docker从入门到精通——MySQL数据持久化

    千次阅读 热门讨论 2022-04-12 20:15:53
    MySQL数据持久化前言实战MySQL数据持久化 前言 再上一篇博客总结了Docker的容器数据卷感兴趣可以访docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag问容器数据卷 实战MySQL数据持久...

    MySQL数据持久化

    前言

    再上一篇博客总结了Docker的容器数据卷感兴趣可以访问容器数据卷

    实战MySQL数据持久化

    前提Docker中已经下载了mysql的镜像,没有下载可以通过 docker pull mysql进行下载。

    1. 设置mysql密码
      安装了mysql之后我们需要需要给mysql设置密码,最好我们是参考docker hub 官方的mysql安装使用介绍,对于mysql的使用很全面,适合全面的对mysql进行学习。
    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag #其中,some mysql是要分配给容器的名称,my secret pw是要为mysql root用户设置的密码,tag是指定所需mysql版本的标记.
    
    docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    
    
    1. 连接mysql
      启动了容器并设置了连接密码之后我们进行一下测试。我这儿使用的Navicat进行连接mysql。正常来说是没有问题的,我这儿也可以连接上。
      在这里插入图片描述

    2. 挂载数据卷实现数据持久化

    使用-v命令,在上一篇博客容器数据卷中已经讲过了。也可以在一条命令中多次使用-v命令进行多次挂载数据卷。

    我们先将刚才的容器删除掉,docker rm -f mysql01

    然后运行容器并进行挂载

    docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql	#在复习一下 -d后台启动,-p端口映射(服务器和容器)-v卷挂载 -e环境配置,--name容器名,conf主要是配置问卷,data是我们mysql的数据。
    

    使用docker ps查看,可以看到容器创建成功。
    在这里插入图片描述
    在使用Navicat进行mysql连接。

    1. 测试mysql数据持久化
      我们在mysql01中创建一个数据库
      在这里插入图片描述
      然后在容器中进行查看,首先通过docker exec -it 容器id /bin/bash进入到容器内容。在通过cd命令,切换到之前我们挂载的目录下可以看到在容器内部有名为test的数据库。
      在这里插入图片描述
      同样的我们在本地进行查看,进入到我们之前挂载到本地的路径下 cd home/mysql/data,可以看到test。同理我们将容器删除,在本地也能够找到test
      在这里插入图片描述
    展开全文
  • vuex实现数据持久化

    千次阅读 2022-05-06 14:02:35
    Vue项目中使用Vuex作为状态管理,其本质上类似于全局的变量存储,方便在所有Vue组件...持久化原理:结合本地存储做到数据状态持久化,使页面刷新后数据不会初始化为默认状态。 1、安装插件 vuex-persistedstate np
  • Flutter数据持久化

    千次阅读 2021-12-02 10:27:48
    欢迎阅读Flutter系列教程,本文讲解Flutter的数据持久化。主要分三块内容: 1.使用Sqlite 2.读写文件 3.存储键值对 Sqlite的使用 如果你的APP需要经常在本地存储查询大量数据,就选择数据库。通常使用数据库来进行...
  • pinia 实现数据持久化

    千次阅读 2022-04-24 15:06:11
    pinia 实现数据持久化
  • 基于vuex的数据持久化处理

    千次阅读 2022-04-18 21:43:18
    一、基于vuex的数据持久化 存在问题: 前端在使用vuex存储数据的时候,一旦页面刷新,所有之前存储的数据就会丢失。这是因为js代码运行在内存中,代码在运行时,所有的变量和函数都是保存在内存中的,因此在刷新时,...
  • K8S数据持久化

    千次阅读 2022-02-11 16:39:35
    K8S实现pod数据持久化 前言 K8S启动的pod属于容器,当pod删除或者重建,原容器中的数据将丢失,这将是严重的安全事故,本文将讲述K8S数据持久化实现的方法。 1.实现方式 采用nfs、pv与pvc组合的方式实现数据持久...
  • docker 挂载MySQL实现数据持久化

    千次阅读 2022-01-21 10:10:38
    文章目录环境配置MySQL数据持久化注意事项 环境配置 本地操作系统:Win10 虚拟机的操作系统:CentOS Stream 8 已安装docker,可以参考详细安装教程 MySQL数据持久化 在上一节中我们已实现docker启动多个MySQL服务,...
  • Jetpack Compose 中优雅完成数据持久化

    千次阅读 2022-01-25 21:00:48
    基于此,我写出了开源库:ComposeDataSaver: 在Jetpack Compose中优雅完成数据持久化 简单一瞥: // booleanExample 初始化值为false // 之后会自动读取本地数据 var booleanExample by rememberDataSaverState(KEY_...
  • docker rabbitmq数据持久化

    千次阅读 2022-03-31 13:03:10
    1,docker volume 或者本地数据目录映射到/var/lib/rabbitmq; 2,设定hostname docker run -d --hostname=rabbitmq --restart=always --network=orbbec --name=rabbitmq -p5672:5672 -p15672:15672 -v rabbitmq:/var/...
  • uniapp中Vuex数据持久化

    千次阅读 2022-07-19 17:06:06
    解决H5应用中存在Vuex中的数据在刷新页面后丢失
  • Unity之数据持久化——PlayerPrefs

    千次阅读 2022-04-05 22:08:06
    什么是数据持久化数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内从中的数据模型的统称 即:游戏数据存储到硬盘,硬盘中的数据读取到游戏中 游戏运行时—(变量数据)—内存<——...
  • pinia 数据持久化处理

    千次阅读 2022-03-24 15:05:19
    //pinia 持久化插件 import piniaPluginPersist from 'pinia-plugin-persist' const store = createPinia() store.use(piniaPluginPersist) export default store 在写的store.js文件下增加配置项 默认为
  • 大数据 | HDFS 元数据持久化笔记

    千次阅读 2021-11-29 18:44:58
    四、HDFS 元数据持久化 五、Secondary NameNode 的引入 六、总结 一、HDFS 架构简单介绍 HDFS 是一个主从(Master/Slaves)的架构,它由一个 NameNode 和一些 DataNode 组成。其中,NameNode 是主,...
  • 如何让vuex数据持久化

    千次阅读 2021-07-19 00:14:05
    1.为什么要让vuex数据持久化 在使用vuex的时候,会发现刷新页面之后state中存储的数据会被重置,因为刷新浏览器的时候会导致整个页面重新加载,vuex的state也会全部重新加载,所以为了防止这类情况的发生,我们会将...
  • pinia数据持久化插件

    千次阅读 2022-02-21 15:06:04
    最近新开的项目,尝试使用pinia做状态管理 pinia,没有发现官方提供的持久化插件,就先按照文档的插件模块,就自己先写一个凑合用 .../*需要持久化数据*/ const dataPath = { main: [], user: ['token', 'userIn
  • Java 数据持久化系列之JDBC

    千次阅读 多人点赞 2019-11-26 20:39:56
    前段时间小冰在工作中遇到了一系列关于数据持久化的问题,在排查问题时发现自己对 Java 后端的数据持久化框架的原理都不太了解,只有不断试错,因此走了很多弯路。于是下定决心,集中精力学习了持久化相关框架的原理...
  • Vuex数据持久化存储

    千次阅读 2021-12-15 19:10:29
    解决:把数据持久化存储(state中的数据做一个持久化存储) 1、我们可以使用localStorage进行存储 存在localStorage的话,数据不会因为页面或浏览器的关闭而丢失,只有我们手动在浏览器中进行清除 在Vuex初始化的...
  • C# 数据持久化

    千次阅读 2019-11-01 18:56:48
    当我们需要储存一些数据而不想下次重启被修改的话,就要持久化一些数据,我这里是在设置的时候,把一些设置的数据储蓄下来 用到的技术:BinaryFormatter 原理:使用序列化类把数据存放到文本中,下次使用的时候...
  • Flink的数据持久化-CheckPoint机制

    千次阅读 2020-10-02 01:39:20
    Flink内存易失,利用CheckPoint机制数据持久化,偏于出现异常,应用挂掉时,做数据恢复。所谓CheckPoint(可以理解为CheckPoint是把State数据持久化存储了)则表示了一个FlinkJob在一个特定时刻的一份全局状态快照,...
  • k8s grafana数据持久化

    千次阅读 2019-05-10 15:59:55
    问题:k8s搭建的grafana容器只要一重启,配置的dashboard,添加的用户等就会重置,从而得出,grafana没有数据持久化。 解决: 1.先在集群建立持久花存储pvc 然后挂在到容器/var目录 volumeMounts: - mountPath:...
  • vue中的vuex的数据持久化

    千次阅读 2021-05-30 17:10:39
    首先,什么是vuex?vuex就是一个集中式的状态管理工具,在许多...使用插件 vuex-persistedstate 对数据进行数据持久化处理 1.安装 npm install vuex-persistedstate --save 在store下的index.js下引入 import creat.
  • Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化,可以单独使用其中一种或将二者...
  • EMQX数据持久化到mysql

    千次阅读 2021-12-10 09:33:51
    EMQX企业版支持将mqtt数据持久化mysql数据库,没License最多支持10个设备接入 1、连接mysql数据库 2、添加规则 提取MQTT消息主题 将mqtt消息保存到mysql数据表格的SQL示例 INSERT INTO data(dev_id,voltage,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 688,100
精华内容 275,240
关键字:

数据持久化