数据持久化

Redis缓存,持久化,高可用

与世无争的帅哥 提交于 2019-11-28 12:43:15
一,Redis作缓存服务器 ​ 本篇博客是接着 上一篇 博客未分享完的技术点。 ​ redis作为缓存服务器是众多企业中的选择之一,虽然该技术很成熟但也是存在一定的问题。就是缓存带来的缓存穿透,缓存击穿,缓存失效问题,继而引用分布式锁。 1.1,缓存穿透 ​ 在如今的项目中大多采用垂直的MVC架构,由service层去调用DAO层,然后DAO层再去查询数据库。而redis作为缓存服务器就是在service层去调用DAO层去查询时先去缓存服务器查询,如果存在则直接返回该数据,否则再去查询数据库。由此可知,这么做大量减少了对磁盘I/O的操作,减轻了数据库的压力。 ​ 现在我们假设一种情况,在数据库中存在有id为1到1000的数据。现在如果有人手动去模拟一个id为1001的请求,那么该数据在缓存服务器中是不存在的,因而便会去查询数据库。那么问题来了,如果是一个大量无效的请求去查询数据库。则势必会对数据库造成难以承受的压力,这种情况就是所谓的缓存穿透。 ​ 那如何解决呢? ​ 1,将查询到的null值直接保存到缓存服务器中,但是这种做法并不推荐,因为如果是大量不同的请求id同样会去查询数据库。 ​ 2,接口的限流,降级与熔断 ​ 在项目中对于重要的接口一定要做限流,对于以上恶意攻击的请求除了要限流,还要做好降级准备,并且进行熔断,这种做法可以有效控制大量无效请求。 ​ 3,布隆过滤器 ​

【Scrapy框架持久化存储】

我的未来我决定 提交于 2019-11-28 10:32:59
原文: http://blog.gqylpy.com/gqy/363 基于终端指令的持久化存储 前提:保证爬虫文件中的 parse 方法的返回值为可迭代数据类型(通常为list/dict)。 该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化存储。 执行如下命令进行持久化存储: scrapy crawl 应用名称 -o xx.文件格式 其支持的文件格式有: 'json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle' 基于管道的持久化存储 Scrapy框架为我们提供了高效、便捷的持久化操作功能,我们直接使用即可。 在使用之前,我们先来认识下这两个文件: items.py : 数据结构模板文件,用于定义数据属性。 pipelines.py : 管道文件,接收数据(items),进行持久化操作。 ---------------------------↓ 持久化流程: 应用文件爬取到数据后,将数据封装到 items 对象中。 使用 yield 关键字将 items 对象提交给 pipelines 管道进行持久化操作。 在管道文件中的类中的 process_item 方法接收爬虫文件提交过来的 item 对象, 然后编写持久化存储的代码将 item 对象中存储的数据进行持久化存储。 注意: 在 settings.py

Redis持久化——AOF(Append Only File)

坚强是说给别人听的谎言 提交于 2019-11-28 10:07:35
一、是什么? 以日志的形式来记录每个写操作 ,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。 优势 每次修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 ,性能较差但数据完整性比较好。 每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失。 不同步:appendfsync no 从不同步。 劣势 相同数据集的数据而言AOF文件要远大于RDB文件,恢复速度慢于RDB。 AOF运行效率要慢于RDB,每秒同步策略效率较好,不同步效率和RDB相同。 二、AOF介绍 可以同时启用AOF和RDB持久化,不会出现任何问题。 在启动Redis服务时, 如果启用了AOF,则Redis将加载AOF文件进行数据恢复,这是是具有更好持久性保证的文件。 三、AOF启动配置 # 开启AOF持久化,默认:no,开启改为 yes appendonly no # AOF文件的名字,建议使用默认值。 appendfilename "appendonly.aof" # Redis支持三种不同的备份模式: # always:同步持久化

Redis持久化——RDB(Redis DataBase)

浪尽此生 提交于 2019-11-28 10:07:05
一、是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的快照(Snapshot),它恢复时是将快照文件直接读到内存里。 Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。 优势 适合进行大规模数据的恢复,且对数据恢复的完整性和一致性要求不高,那么RDB方式要比AOF方式更加的高效。 劣势 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。 fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑 二、Fork定义 fork的作用是复制一个与当前进程一样的进程。新进程的所有数据( 变量、环境变量、程序计数器等 )数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。 三、RDB触发配置 自动触发(配置文件中的默认配置): RDB持久化是以dump.rdb文件的形式保存在磁盘中的。这是整个内存经过压缩的快照(Snapshot)文件。可以配置复合的快照触发条件: save 900 1 # 或15分钟内改了1次。 save 300 10 # 或5分钟内改了10次, save 60 10000 # 是1分钟内改了1万次, 手动触发(执行命令

Redis入门:第八章 Redis持久化-第九章 课程总结

落爺英雄遲暮 提交于 2019-11-28 08:32:42
第八章 Redis持久化 Redis的高性能体现在所有的数据都存储在了内存中,为了使 redis在重启之后保证数据不丢失。要将redis的数据从内存当中同步到硬盘,这个过程称之为持久化操作。 两种方式:RDB和AOF方式 持久化使用方式: 1.单独RDB持久化(默认) 在指定的时间间隔里,将内存中的数据集快照写入到磁盘。比如指定30s,将数据写入磁盘一次 2.AOF方式 以日志的方式记录服务器的每一个操作,在redis服务器启动之初,会读取该文件,然后来重新构建数据库,这样保证启动后的数据是完整的。 3.无持久化 通过配置,禁用持redis服务器的持久化功能,当作缓存机制 4.同时使用RDB和AOF RDB持久化方式: 优势: 1.所有数据库只包含一个文件,对于文件备份很完美。比如每个小时归档一次最近24小时的数据,同时每天归档最近30天的数据。这样的备份策略,一旦系统出现灾难性的故障,可以非常容易地进行恢复; 2.同时对于灾难恢复而言,可以非常轻松的将一个单独的文件压缩后再转移到其他存储介质中; 3.性能最大化,对于redis的服务进程,再开始持久化时唯一需要做的是分叉出一些进程,之后再由子进程完成持久化工作,这样就可以极大地避免服务器执行I/O操作,相比AOF机制,如果数据集很大,启动效率很高。 缺点:1.如果向保证数据的高可用性,最大限度避免数据的丢失

Redis持久化RDB和AOF

扶醉桌前 提交于 2019-11-28 08:06:08
RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。 fork: Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程 Rdb 保存的是dump.rdb文件 如何触发RDB快照 如何恢复 优势劣势 实验: 1,先将快照哪里修改为120,表示在两分钟之内如果进行10次写操作,会将写的内容保存到dump.rdb 修改 2.启动redis, 3.进行写操作 4,对dump.rdb进行备份,以防数据丢失(如删库,断电等) 5,对数据库进行破坏(删库,断电) 6,恢复数据(首先找到备份的rdb文件,然后删除本地的dump.rdb,在删除数据库以后断电了,redis迅速将数据写入rdb,但是已经删除了,所以写入的为空,读出来也为空) 7.恢复成功 总结 AOF

web技术第五式---Django的ORM

浪子不回头ぞ 提交于 2019-11-28 07:22:40
ORM对应的关系 类------------->表 类属性------->表字段 类对象------->表记录 1、ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 这种方案存在以下不足: 1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口 2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。 ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 ORM的方法论基于三个核心原则:   · 简单:以最基本的形式建模数据。   · 传达性:数据库结构被任何人都能理解的语言文档化。   · 精确性:基于数据模型创建正确标准化了的结构。 2、ORM的概念 让我们从O/R开始。字母O起源于"对象"

redis相关

荒凉一梦 提交于 2019-11-28 05:35:54
安装 源码安装 按照redis官网进行安装。 yum安装 yum -y install redis 多实体 备份redis.conf cp redis.conf redis.conf.bak 修改redis.conf # 写入时去掉注释 port 6379 daemonize no #后台运行redis pidfile /data/6379/redis.pid #将redis进程的id写入到redis.pid这个文件 loglevel notice #日志级别 logfile "/data/6379/redis.log" dir /data/6379 #配置redis数据存放点 protected-mode yes #redis3.0之后的安全模式 requirepass qiangdademima #给redis添加密码 redis的安全模式,可能会阻挡你远程连接,为了解决这个安全模式,给redis设置一个密码 查看redis密码 127.0.0.1:6379>CONFIG get requirepass 设置密码 127.0.0.1:6379> CONFIG set requirepass "password" 发布订阅 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE channel [channel ...

1、kafka概述

有些话、适合烂在心里 提交于 2019-11-28 05:32:50
一、关于消息队列 消息队列是一种应用间的通信方式,消息就是是指在应用之间传送的数据,它也是进程通信的一种重要的方式。 1.消息队列的基本架构 producer:消息生产者。 broker:消息处理中心。 consumer:消息消费者 2.消息队列常用场景 系统之间的解耦。 高并发下的流量消峰(电商抢购活动)。 异步通信(串行变并行)。 3.消息队列的特点 基本上都基于生产者消费者模式。 必须保证数据的可靠性传输。 4、点对点消息系统 在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从 该队列中消失。 5、发布 - 订阅消息系统 在发布 - 订阅系统中,消息被保留在主题中。 与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。 6、为什么需要消息队列 1、解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2、冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前, 需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 3、扩展性 因为消息队列解耦了你的处理过程

面试题: redis面试题 有用 redis详细

南笙酒味 提交于 2019-11-28 05:19:01
redis面试题目总结 2017-08-25 09:31:02 0 个评论 来源: Java仗剑走天涯 收藏 我要投稿 (1)什么是redis? Redis 是一个基于内存的高性能key-value 数据库 。 (2)Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作, 定期通过异步操作把数据库数据flush到硬盘上进行保存 。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外 单个value的最大限制是1GB , 不像 memcached只能保存1MB的数据 ,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag 系统 等等。另外Redis也可以对存入的Key-Value设置 expire到期时间 ,因此也可以被当作一 个功能加强版的memcached来用。 Redis的 主要缺点是数据库容量受到物理内存的限制 ,不能用作海量数据的高性能读写, 因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 (3)Redis支持的数据类型