数据持久化

Redis持久化存储详解

半世苍凉 提交于 2019-12-06 12:32:44
为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失。 持久化存储分类 在 Redis 中,持久化存储分为两种。一种是 aof 日志追加的方式,另外一种是 rdb 数据快照的方式。 RDB持久化存储 什么是RDB持久化存储 RDB持久化存储即是将redis存在内存中的数据以快照的形式保存在本地磁盘中。 .RDB持久化存储分为自动备份和手动备份 1.手动备份通过 save 命令和 bgsave 命令。save是同步阻塞,而 bgsave 是非阻塞(阻塞实际发生在 fork 的子进程中)。因此,在我们实际过程中大多是使用bgsave命令实现备份. redis> SAVE OK redis> BGSAVE Background saving started 2.自动备份 a.修改配置项 save m n即表示在 m 秒内执行了 n 次命令则进行备份. b.当Redis 从服务器项主服务器发送复制请求时,主服务器则会使用 bgsave命令生成 rbd 文件,然后传输给从服务器. c.当执行 debug reload 命令时也会使用 save 命令生成rdb文件. d.当使用

18 模型部署上线的几种服务发布方式

寵の児 提交于 2019-12-06 10:23:05
在前面所有的模型训练和预测中,我们训练好的模型都是直接通过控制台或者 Jupyter Notebook 来进行预测和交互的,在一个系统或者项目中使用这种方式显然不可能,那在 Web 应用中如何使用我们训练好的模型呢?本文将通过以下四个方面对该问题进行讲解: 微服务架构简介; 模型的持久化与加载方式; Flask 和 Bottle 微服务框架; Tensorflow Serving 模型部署和服务。 微服务架构简介 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。微服务也指一种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个有上下文边界的服务,这个定义来自 DDD 领域驱动设计。 相对于单体架构和 SOA,它的主要特点是组件化、松耦合、自治、去中心化,体现在以下几个方面: 一组小的服务:服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情; 独立部署运行和扩展:每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。 独立开发和演化:技术选型灵活,不受遗留系统技术约束

Redis持久化(三)

限于喜欢 提交于 2019-12-06 10:00:58
Redis持久化 Redis提供了哪些持久化机制 1. RDB持久化: 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化: 该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。 3. 无持久化: 我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。 4. 一般情况下,项目中是同时应用AOF和RDB。 RDB机制的优势和劣势 Redis DataBase RDB存在哪些优势呢? 1. 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。 2. 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。 3. 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。 4. 相比于AOF机制,如果数据集很大,RDB的启动效率会更高

redis持久化的问题

扶醉桌前 提交于 2019-12-06 08:25:18
redis持久化的两种策略 RDB(redis database):在指定时间将内存中的快照(snapshot)写入到磁盘中进行持久化,恢复的时候直接将其读入到内存中。 怎么实现的: redis单独fork一个线程出来,进行持久化,不会打扰主线程的高速运行,如果进行大规模的数据的恢复,同时对数据的丢失的敏感性不高的话,可以是使用该方法,不过只能恢复最新的备份的数据,会把最新备份之后的数据全部丢失 fork:复制一个完全一摸一样的线程,什么内存空间啥的都一样的线程,可能拖慢主线程的运行 dump.rdb: 什么时候触发保存: 1、900s内出现1次key的改动 2、300s内出现10次key的改动 3、60s内出现10000次key的改动 什么时候会触发dump shatdown redis的时候,默认会去dump当前redis中的keys 禁用备份 在conf中写一个 save "" 如果要即时生效配置 set key value save命令,即时生成dump.rdb 一些配置 stop-writes-on-bgsave-error:如果设置为yes,那么如果备份错误的时候,会拒绝写入的,如果设置为no,那么不会拒绝这些东西 rdbacompression:yes(设置为yes,redis会压缩整个dump文件,会耗cpu的资源) rdbcchecknum:验证这个数据的准确性

Redis进阶:Redis的持久化机制

爱⌒轻易说出口 提交于 2019-12-06 04:59:32
Redis进阶:Redis的持久化机制 Redis的持久化机制目前包括RBD和AOF两种方式。 RDB持久化 RDB持久化方式是在指定的时间间隔对数据进行快照存储。过期的键值不会被存储到快照中。如果恢复数据时数据已过期,会通过主动或被动清理策略进行删除。 优点:性能影响小,恢复速度快。与AOF相比,在回复大数据量时,速度更快。 缺点:save是阻塞式创建快照,如果数据大会影响其他命令的响应。 强行关闭或者出现故障的情况下 ,会存在数据丢失的情况。 //创建子线程异步将快照写入磁盘 bgsave //阻塞式存储快照,执行该命令时,不在响应其他指令 save // Redis.Config 可以对save配置进行调整。两个条件满足一个都会触发生成快照。 save 900 1 //900S内 至少1次写操作 触发 快照 save 300 10 //300S内 至少10次写操作 触发 快照 save 60 10000 //60S内 至少10000次写操作 触发 快照 AOF持久化 记录每次对服务器写的操作。服务器重启时会重新执行命令来恢复数据。AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大. 优点:安全 容灾 备份文件易读可修改。 缺点:备份文件占用空间大,恢复速度比RDB较慢。 开启: redis

Spark性能优化

[亡魂溺海] 提交于 2019-12-06 03:09:44
Spark性能优化 1)避免创建重复RDD 2)尽可能复用同一个RDD 3)对多次使用的RDD进行持久化 4)尽量避免使用shuffle类算子 5)使用map-side预聚合的shuffle操作 6)使用高性能的算子 7)广播大变量 8)使用Kryo优化序列化性能 9)优化数据结构 10)资源参数调优 1)避免创建重复RDD ​ 对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。 2)尽可能复用同一个RDD ​ 除了要避免在开发过程中对一份完全相同的数据创建多个RDD之外,在对不同的数据执行算子 操作时还要尽可能地复用一个RDD。比如说,有一个RDD的数据格式是key-value类型的,另 一个是单value类型的,这两个RDD的value数据是完全一样的。那么此时我们可以只使用key-value类型的那个RDD,因为其中已经包含了另一个的数据。对于类似这种多个RDD的数据有重叠或者包含的情况,我们应该尽量复用一个RDD,这样可以尽可能地减少RDD的数量,从而尽可能减少算子执行的次数。 3)对多次使用的RDD进行持久化 Spark中对于一个RDD执行多次算子的默认原理是这样的:每次你对一个RDD执行一个算子操作时,都会重新从源头处计算一遍,计算出那个RDD来,然后再对这个RDD执行你的算子操作。因此对于这种情况,建议是:对多次使用的RDD进行持久化

《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化

旧城冷巷雨未停 提交于 2019-12-05 22:14:15
欢迎关注文章这一系列,一起学习 《提升能力,涨薪可待篇》 《面试知识,工作可待篇》 《实战演练,拒绝996篇》 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 1.持久化 1.1 持久化简介 持久化(Persistence),持久化是将程序数据在持久状态和瞬时状态间转换的机制,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。 1.2 redis持久化 redis为内存数据库,为了防止服务器宕机以及服务器进程退出后,服务器数据丢失,Redis提供了持久化功能,即将Redis中内存数据持久化到磁盘中。Redis 提供了不同级别的持久化方式: RDB持久化方式:可以在指定的时间间隔能对数据进行快照存储. AOF持久化方式:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大. 如果服务器开启了AOF持久化功能。服务器会优先使用AOF文件还原数据。只有关闭了AOF持久化功能,服务器才会使用RDB文件还原数据 2. RDB持久化 2.1 RDB文件格式 RDB文件是一个经过压缩的二进制文件(默认的文件名:dump.rdb),由多个部分组成,RDB格式: 2.2 RDB文件持久化创建与载入 在 Redis持久化时

Redis持久化

[亡魂溺海] 提交于 2019-12-05 20:15:18
为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失。 持久化存储分类 在 Redis 中,持久化存储分为两种。一种是 aof 日志追加的方式,另外一种是 rdb 数据快照的方式。 RDB 持久化存储 什么是RDB持久化存储 RDB 持久化存储即是将 redis 存在内存中的数据以快照的形式保存在本地磁盘中。 .RDB持久化存储分为自动备份和手动备份 1.手动备份通过 save 命令和 bgsave 命令。save 是同步阻塞,而 bgsave 是非阻塞(阻塞实际发生在 fork 的子进程中)。因此,在我们实际过程中大多是使用 bgsave 命令实现备份. redis> SAVE OK redis> BGSAVE Background saving started 2.自动备份 a.修改配置项 save m n 即表示在 m 秒内执行了 n 次命令则进行备份. b.当 Redis 从服务器项主服务器发送复制请求时,主服务器则会使用 bgsave 命令生成 rbd 文件,然后传输给从服务器. c.当执行 debug reload 命令时也会使用 save 命令生成 rdb 文件. d

redis常见问题(转)

感情迁移 提交于 2019-12-05 19:14:28
常见问题: 1、为什么使用redis (一)性能 我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 (二)并发 在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。 2.使用redis有什么缺点 (一)缓存和数据库双写一致性问题 (二)缓存雪崩问题 (三)缓存击穿问题 (四)缓存的并发竞争问题 3、单线程的redis为什么这么快 (一)纯内存操作 (二)单线程操作,避免了频繁的上下文切换 (三)采用了非阻塞I/O多路复用机制     参照上图,简单来说,就是。我们的redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中。 4、redis的数据类型,以及每种数据类型的使用场景 回答:一共五种 (一)String 这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。 (二)hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候

[Redis持久化存储与主从复制](https://www.cnblogs.com/zyyhxbs/p/11831037.html)

折月煮酒 提交于 2019-12-05 18:10:19
4. redis持久化 Redis 是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题, Redis 提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。 4.1 RDB持久化 redis 提供了 RDB持久化 的功能,这个功能可以将 redis 在内存中的的状态保存到硬盘中,它可以 手动执行。 也可以再 redis.conf 中配置, 定期执行 。 RDB持久化产生的RDB文件是一个 经过压缩 的 二进制文件 ,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。 优点: 速度快,适合做备份,主从复制就是基于RDB持久化功能实现 配置参数: touch redis-rdb.conf 加入如下的内容 daemonize yes #后台运行redis port 6379 #指定redis的端口 logfile /data/6379/redis.log #redis日志文件 dir /data/6379/ #定义持久化文件存储位置,需要手动创建文件夹 dbfilename redis-rdb.rdb #rdb持久化文件 bind 0.0.0.0 #redis启动地址 save 10 5 #10秒内,超过5个修改类的操作,就触发持久化 手动触发 127.0.0.1:6379> save OK 4.2 AOF持久化 AOF