数据持久化

rabbitMq API

时光总嘲笑我的痴心妄想 提交于 2019-11-29 00:44:38
1.RabbitMQ介绍 1.1python的Queue和RabbitMQ python消息队列: 线程queue(同一进程之间进行交互) 进程queue(父子进程进行交互或同一个进程下的多个子进程进行交互) 两个完全独立的python程序: 是不能用上面的queue进行交互的,或者和其他语言交互的方式有哪些呢? 1.Disk:可以把数据写入磁盘 2.Socket通信 3.消息中间件:RabbitMQ,ZeroMQ,ActiveMQ等。 1.2消息队列的应用场景 1.2.1异步处理 场景说明: 用户注册后,需要发送注册右键和注册短信。 传统方式有两种: 1.串行方式 2.并行方式 串行方式: 将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。 以上三个任务全部完成后,返回给客户端 并行方式: 将注册消息写入数据库成功后,发送注册邮件的同时,发送注册短信。 以上三个任务完成后,返回给客户端。 与串行的差别是,并行的方式可以提高处理的时间。 假设三个业务节点每个使用50ms,不考虑网络等其他开销,串行的方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。 则串行方式1秒内可处理的请求量是7次(1000/150)。 并行方式处理的请求量是10次(1000/100)。 小节: 传统的方式系统的性能

redis相关缓存知识

你。 提交于 2019-11-29 00:43:37
Redis redis是一个key-value 存储系统 。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list( 链表 )、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些 数据类型 都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,list,set,sorted set,hash (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 2. redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

Redis高级

狂风中的少年 提交于 2019-11-28 23:19:41
一、Redis主从复制 概述 1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。 2、通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。 主从复制过程:见下图 过程: 1:当一个从数据库启动时,会向主数据库发送sync命令, 2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来 3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。 4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。 进行配置过程 一主多从实现 介绍: 主服务器可以读写,但是从服务器只允许读。 场景: 读写分离(读、写分别不同的库,增加整体的吞吐量)、 日志备份、高可用读写分离问题: 同步(redis自带解决方案) Redis只能一个主,多个从: 过程(使用内网实现的通讯): 1、 从服务器启动时候,会向Master发送sync命令.从服务器是指向主服务器的IP和端口号。 2、当Master接收到sync命令后

统计数据持久化

谁说我不能喝 提交于 2019-11-28 22:44:39
1. 统计存储类的设计 """ 用户作品数量的统计类 属性 key redis的键 方法 get 获取数据 update 更新数据 """ class UserArticleCountStorage: """用户作品数量的统计类 count : user : arts zset [{ value : 用户id, score:作品数}]""" key = 'count:user:arts' @classmethod def get(cls,user_id): pass @classmethod def update(cls, user_id): pass 2. 获取和增加数据 (重点) class BaseCountStorage: @classmethod def get(cls, user_id): """ 获取统计数量 :param user_id: 用户id :return: 统计数量 """ # 从redis中取出数据 redis_slave = current_app.redis_slave # type: StrictRedis try: count = redis_slave.zscore(cls.key, user_id) # 如果有值,返回float类型, 没有返回None except RedisError as e: current_app.logger

领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处

家住魔仙堡 提交于 2019-11-28 19:54:12
领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处 作者: Johnny.Liang 发布时间: 2015-06-02 18:47 阅读: 5612 次 推荐: 13 原文链接 [收藏]    上一篇 文章作为一个引子,说明了领域驱动设计的优势,从本篇文章开始,笔者将会结合自己的实际经验,谈及领域驱动设计的应用。本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。   由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念:    概念:   VO (View Object ): 视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。   DTO (Data Transfer Object ): 数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。   DO (Domain Object ): 领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。   PO (Persistent Object ): 持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系

浅析VO、DTO、DO、PO的概念、区别和用处

早过忘川 提交于 2019-11-28 19:53:59
由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: VO ( View Object ): 视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。 DTO ( Data Transfer Object ): 数据传输对象,这个概念来源于 J2EE 的设计模式,原来的目的是为了 EJB 的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。 DO ( Domain Object ): 领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。 PO ( Persistent Object ): 持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应 PO 的一个(或若干个)属性。 模型: 下面以一个时序图建立简单模型来描述上述对象在三层架构应用中的位置 l 用户发出请求(可能是填写表单),表单的数据在展示层被匹配为 VO 。 l 展示层把 VO 转换为服务层对应方法所要求的 DTO ,传送给服务层。 l 服务层首先根据 DTO 的数据构造(或重建)一个 DO ,调用 DO 的业务方法完成具体业务。 l

Redis持久化方式AOF和RDB

荒凉一梦 提交于 2019-11-28 19:53:38
RDB持久化 AOF持久化 全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令 保存的间隔较长 保存的间隔默认一秒 数据还原速度快 数据还原速度一般 save会阻塞,但bgsave或者自动不会阻塞 无论是平时还是AOF重写,都不会阻塞 更适合数据备份,默认开启 更适合用来保存数据,和一般SQL持久化方式一样,默认关闭 启动优先级 : 低 启动优先级 : 高 体积 : 小 体积 : 大 恢复速度 : 快 恢复速度 : 慢 数据安全性 : 丢数据 数据安全性 : 根据策略决定 轻重 : 重 轻重: 轻 1、Redis持久化 RDB(Redis DataBase)------数据 AOF(AppendOnlyFiel)------命令 默认情况下,RDB开启,AOF关闭。 这两种形式都可以将存储在内存中的数据库数据以文件形式保存到硬盘中,防止数据丢失。文件位置:/var/lib/redis/6379 RDB持久化功能可以将服务器包含的所有数据库数据以二进制文件的形式保存到硬盘中,创建RDB类型的文件,默认为dump.rdb。服务器再次启动时会载入RDB文件,根据RDB文件的内容、还原服务器原有的数据库数据。 1.1 创建RDB文件方式 前两种需要用户手动执行,第三种有redis服务器自动执行 服务器执行客户端发送SAVE命令 服务器执行客户端发送BGSAVE命令

Nacos(八):Nacos持久化

心已入冬 提交于 2019-11-28 19:27:38
参考和感谢 Spring Cloud Alibaba基础教程:Nacos的数据持久化 前言 前景回顾: Nacos(七):Nacos共享配置 Nacos(六):多环境下如何“管理”及“隔离”配置和服务 Nacos(五):多环境下如何“读取”Nacos中相应环境的配置 Nacos(四):SpringCloud项目中接入Nacos作为配置中心 前面的七篇文章,从Nacos介绍,到Nacos做注册中心、做配置中心,一直都没有提及持久化的问题。 我们服务的信息、配置的信息都放在哪的? 当我们使用默认配置启动Nacos时,所有配置文件都被Nacos保存在了内置的数据库中。 在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力 如果使用内嵌数据库,注定会有存储上限,本文带大家一起将Nacos中的数据实现持久化 我的环境 Windows10 JDK8 SpringCloud:Finchley.RELEASE SpringBoot:2.0.4.RELEASE spring-cloud-alibaba-dependencies:0.2.2.RELEASE Nacos-server:1.0.1 本文的项目Demo继续沿用之前文章中的聚合工程 Nacos ,若小伙伴还没有之前的环境,可至 源码地址 中下载

docker数据卷之持久化操作

夙愿已清 提交于 2019-11-28 19:01:10
docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Docker 容器-- Dcoker conrainers:类比于实例化的对象 仓库(registry)--repo(Repository)-->镜像(按版本区分) 共有库 docker.io 私有库 yum库-->不同repo-->软件(按名字区分) docker底层原理 Docker是一个c/s架构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上帝额容器。容器,是一个运行环境,就是我们前面说的集装箱。 为什么比虚拟机快 docker有着比虚拟机更少的抽象层,由于docker不需要实现硬件资源虚拟化。 运行在docker容器上的程序是直接使用的都是实际物理机上的硬件资源。因此在cpu、内存利用率上docker将会在效率上有明显优势。 docker利用的是宿主机的内核,而不需要客户端OS。因此,当新建一个容器时,docker不需要虚拟机易杨重新加载一个操作系统内核。从而避免引寻、加载做操系统内核所返回这个比较浪费时间资源的过程。而新建虚拟机,虚拟机软件需要加载GuestOS,返回新建过程是分钟级别