数据持久化

Redis来啦~~

独自空忆成欢 提交于 2019-11-27 18:30:31
一. 先聊点别的   1. sql & nosql    sql指关系型数据库,如Oracle,MySQL等,nosql泛指非关系型数据库,如MongoDB,Redis等;SQL数据存在特定结构的表中,而NoSQL则更加灵活和可扩展,存储方式可以是JSON文档,哈希表或其他方式;在sql中必须定义好表和字段结构后才能添加数据,如主键,索引,触发器,存储过程等,表结构虽然可以在定义之后被更新,但是如果有比较大的结构变更的化就会变得比较复杂,在nosql中,数据可以在任何时候任何地方添加,不需要先定义表,nosql也可以在数据集中船舰索引;综上:nosql更加适合初始化数据还不明确或者未定的项目中。   2. ACID & CAP & BASE   ACID是指在数据库管理系统中,事务所具有的四个特性:原子性,一致性,隔离性,持久性;   CAP是指一致性,可用性和分区容错性,CAP理论指这三个要素最多只能实现两个;   BASE接受最终一致性的理论支持,BasicallyAvalable基本可用,Soft-state软状态/柔性事务,EventuallyConsistency最终一致性; 二. Redis:REmote DIctionary Server(远程字典服务器) 1. 什么是Redis?有什么优点?   Redis是存储kv数据结构的分布式数据库;   a. 读写速度快

爬虫数据持久化的几种常用方法

主宰稳场 提交于 2019-11-27 18:29:58
1、txt 用普通的磁盘IO操作即可 2、csv 1 import csv 2 with open('xxx.csv','w') as f: 3   writer = csv.writer(f) 4   writer.writerow([]) 5   writer.writerows([(),(),()]) 需注意单条数据写入的参数格式是列表,多条数据写入的参数格式是列表嵌套元组,推荐使用多条数据一次性写入,效率高。 3、json:使用json模块中的dump函数 1 import json 2 data = {'xxx':'yyy'} 3 with open('zzz.json','w') as f: 4 json.dump(ob_data,f,ensure_ascii=False) 4、数据库:MySQL、MongoDB、Redis 存入MySQL: 1 import pymysql 2 # __init__(self): 3 self.db = pymysql.connect('IP',... ...) 4 self.cursor = self.db.cursor() 5 # write_data(self): 6 self.cursor.execute('sql',[data1]) 7 self.cursor.executemany('sql',[(data1),

redis学习

[亡魂溺海] 提交于 2019-11-27 16:51:58
1.什么是redis? Redis的的是完全开源免费的,遵守BSD协议,是一个高性能的键值数据库。是当前最热门的的的NoSql数据库之一,也被人们称为数据结构服务器。 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。 2.Redis支持的数据类型? String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希) 格式: hmset name key1 value1 key2 value2 Redis hash 是一个键值(key=>value)对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边

ENode 2.0 - 整体架构介绍

天涯浪子 提交于 2019-11-27 12:38:18
前言 今天是个开心的日子,又是周末,可以轻轻松松的写写文章了。去年,我写了ENode 1.0版本,那时我也写了一个 分析系列 。经过了大半年的时间,我对第一个版本做了很多架构上的改进,最重要的就是让ENode实现了分布式,通过新增一个分布式消息队列 EQueue 来实现。之所以要设计一个分布式的消息队列是因为在enode 1.0版本中,某个特定的消息队列只能被某个特定的消费者消费。这样就会导致一个问题,就是如果这个消费者挂了,那这个消费者对应的消息队列就不能自动被其他消费者消费了。这个问题会直接导致系统不可用。而ENode 2.0中,就不会有这个问题了,因为消息队列被设计为独立的,被消费者所共享的;一个消息队列可以被多个消费者集群消费或广播消费,如果一个消费者挂了,那其他的消费者会自动顶上。这里具体的细节,我会在后面详细介绍。 ENode框架简介 框架名称:ENode 框架特色: DDD+CQRS + EDA + Event Sourcing + In Memory 设计目标:让程序员只关注业务代码、高性能、分布式、可水平扩展 开源地址: https://github.com/tangxuehua/enode 基于enode实现的一个完成案例,一个论坛: https://github.com/tangxuehua/forum nuget包Id:ENode

Redis持久化方式-AOF与RDB

时间秒杀一切 提交于 2019-11-27 12:13:15
目录 目标 概述 AOF 概述 rewrite 优点 缺点 RDB 概述 流程 优点 缺点 场景选型 备份 AOF rewrite和RDB fork过程会同时执行吗? 目标 讲述redis两种持久化方式,即aof和rdb,内容包括各自流程与优缺点、场景选型、备份方式。 概述 Redis提供AOF和RDB两种持久化方式。 AOF是把操作指令追加到log文件,也会按照规则整理文件。AOF文件是相对最完整的数据,所以每次server启动都会读取AOF日志文件,已重建数据集合。 RDB是依据周期频率对数据集合制作快照。 可以同时关闭两种方式,仅提供运行时数据集合,也可以配合使用。 AOF rewrite和RDB均由 子进程 执行,一般 不会影响 redis处理client请求。 AOF 概述 对指令以log形式持久化,可 较好 减少数据丢失。当log文件很大时,会自动在后台进行rewrite过程,以便用最小操作集合来表示当前数据集合,即缩小log文件大小,但不影响redis请求。 配置为appendonly yes。 rewrite 由图可见,rewrite是由子进程执行,不会阻塞redis server处理client请求。 优点 AOF提供3种文件同步 fsync 方式 不进行fsync 每秒fsync 每次查询同步 每秒同步是默认方式,而且表现的很好,灾难时只会丢失最近一秒的数据

scrapy框架简介和基础应用

青春壹個敷衍的年華 提交于 2019-11-27 10:49:32
scrapy框架介绍 定义   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。 安装方式   Linux:      pip3 install scrapy   Windows:     1. pip3 install wheel     2. 下载twisted, http: / / www.lfd.uci.edu / ~gohlke / pythonlibs / #twisted     3. 进入下载目录,执行pip3 install Twisted -17.1.0 -cp35 -cp35m -win_amd64.whl     4. pip3 install pywin32     5. pip3 install scrapy     6. 重新打开cmd界面,输入scrapy命令,出现代码即可 基础使用方式   1.创建项目:scrapy startproject 项目名称     项目结构: project_name        scrapy.cfg:        project_name/           __init__.py         

Redis初识

我怕爱的太早我们不能终老 提交于 2019-11-27 10:36:01
什么是Redis? 首先,对于这个问题需要补充一点,数据库从大的方向分为两大类(关系型和非关系型)这两种数据库对于前者并不陌生,后者是第一次接触 关系型:MySQL、SQL server、Oracle等。 非关系型:Redis、MongoDB 当然,对于这些如果细分的话还有很多, Redis和MySQL对比 现在知道了Redis是一个数据库,那么为什么会出现它,和以往接触的MySQL比较一下: 数据库类型:MySQL(mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。) Redis(redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限) 运行机制:MySQL作为持久化存储的关系型数据库,相对薄弱的是在每次访问数据库时都存在IO操作,而IO操作是非常耗费资源的,如果出现频繁访问数据库,第一:将在反复连接数据库上花费大量时间,从而导致数据库效率低下,第二:反复的访问数据库会使数据库的负载过高 Redis为了弥补传统的关系型数据库的缺点,他不在使用IO读写,而是直接利用缓存,将数据放入缓存中,这样提高访问数据的速率,并且在这种情况下,直接可以在缓存中获取数据,降低了数据库的负载,提高访问效率,但是需要选择性的把一些数据放入磁盘中,这个时候就会存在一些可能的风险

MQ消息队列

纵然是瞬间 提交于 2019-11-27 09:52:40
大家平时也有用到一些消息中间件(MQ),但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。 对MQ更加深入的问题,可能很多人没怎么思考过。 比如,你跳槽面试时,如果面试官看到你简历上写了,熟练掌握消息中间件,那么很可能给你发起如下 4 个面试连环炮! 为什么要使用MQ? 使用了MQ之后有什么优缺点? 怎么保证MQ消息不丢失? 怎么保证MQ的高可用性? 本文将通过一些场景,配合着通俗易懂的语言和多张手绘彩图,讨论一下这些问题。 为什么要使用MQ? 相信大家也听过这样的一句话:好的架构不是设计出来的,是演进出来的。 这句话在引入MQ的场景同样适用,使用MQ必定有其道理,是用来解决实际问题的。而不是看见别人用了,我也用着玩儿一下。 其实使用MQ的场景有挺多的,但是比较核心的有3个: 异步、解耦、削峰填谷 异步 我们通过实际案例说明:假设A系统接收一个请求,需要在自己本地写库执行SQL,然后需要调用BCD三个系统的接口。 假设自己本地写库要3ms,调用BCD三个系统分别要300ms、450ms、200ms。 那么最终请求总延时是3 + 300 + 450 + 200 = 953ms,接近1s,可能用户会感觉太慢了。 此时整个系统大概是这样的: 但是一旦使用了MQ之后,系统A只需要发送3条消息到MQ中的3个消息队列,然后就返回给用户了。 假设发送消息到MQ中耗时20ms

[转载]Redis 持久化之RDB和AOF

自闭症网瘾萝莉.ら 提交于 2019-11-27 09:38:08
原文链接:https://www.cnblogs.com/itdragon/p/7906481.html 温馨提示 在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb文件。 我给自己的服务器添加了aof持久化配置,重启后,发现aof文件为空,就想把rdb文件恢复到redis中,所以删除了aof文件,并shutdown了服务,重启后,redis中为空,rdb文件为空,aof文件为空,悲剧了。 Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果你想快速了解和使用RDB和AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习 Redis 的重点知识持久化。 RDB 详解 RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。 从配置文件了解RDB 打开 redis.conf 文件,找到 SNAPSHOTTING 对应内容 1 RDB核心规则配置(重点) save save "" save 900 1 save 300 10 save 60 10000 解说

Hibernate上路_19-事务的丢失更新

谁都会走 提交于 2019-11-27 09:27:52
事务的并发问题:脏读、不可重复读、幻读。 脏读:一个事务读取另一个事务未提交的数据。 不可重复读:在一个事务中,读取到另一个事务已经提交 update 数据,造成两次读取不一样。 幻读:在一个事务中,读取到另一个事务已经提交 insert 数据,造成读取记录条数不一样。 丢失更新:两个事务同时修改目标数据,后提交的事务,会覆盖之前提交的数据。 鉴于并发访问出现的以上问题,数据库提供了事务隔离级别: 1. READ_UNCOMMITED :会发生以上所有问题 2. READ_COMMITTED :阻止脏读的发生,会发生不可重复读和幻读( Oracle 默认级别) 3. REPEATABLE_READ :阻止脏读和不可重复读发生,会发生幻读( MySQL 默认级别) 4. SERIALIZABLE :不会发生并发问题,串行初始化(性能非常差,也不会使用) 1.MySql 事务操作: 1 ) start transaction :开始事务 2 ) commit :提交事务 2.修改MySql事务隔离级别: <hibernate-configuration> <session-factory> <!-- 修改事务隔离级别 --> <property name="hibernate.connection.isolation">2</property> 隔离级别对应数值: read