数据持久化

Redis & Redis 桌面管理工具Redis Desktop Manager

你。 提交于 2020-03-11 07:41:49
Redis简述 Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这个项目还很新,可能还不足够稳定,而且没有在实际的一些大型系统应用的实例。此外,缺乏mc中批量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。 性能测试结果: SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下: Linux 2.6, Xeon X3320 2.5Ghz. stackoverflow 网站使用 Redis 做为缓存服务器。 安装过程: Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能

Redis内存使用优化与存储

眉间皱痕 提交于 2020-03-11 06:42:22
常用内存优化手段与参数   我们知道Redis实际上的内存管理成本非常高,即占用了过多的内存,所以我们讨论通过一系列的参数和手段来控制和节省内存。   首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也非常的高,并且我们后续会分析此种持久化策略并不成熟,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no。   其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。   另外Redis为不同数据类型分别提供了一组参数来控制内存使用,我们在前面详细分析过Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项: hash-max-zipmap-entries 64 hash-max-zipmap-value 512 hash-max-zipmap-entries  

Spring必备知识点(一)

你离开我真会死。 提交于 2020-03-10 23:48:38
Spring框架的7个模块 组成 Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器 : 核心容器提供 Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用 控制反转 (IOC)模式将 应用程序的配置和依赖性规范 与 实际的应用程序代码 分开。 那么我们该如何理解:BeanFactory和FactoryBean 1、 BeanFactory BeanFactory定义了IOC容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是 Spring IOC 所遵守的最底层和最基本的编程规范。在Spring代码中,BeanFactory 只是个接口,并不是 IOC 容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等,都是附加了某种功能的实现。 2、 FactoryBean 一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的

spark的性能优化

倾然丶 夕夏残阳落幕 提交于 2020-03-09 13:13:05
spark性能优化点 一、分配更多的资源 它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 1、分配哪些资源 executor-memory、executor-cores、driver-memory 2、在哪里设置 在实际的生产环境中,提交spark任务时,使用spark‐submit shell脚本,在里面调整对应的参数。 提交任务的脚本: spark‐submit \ ‐‐master spark://node1:7077 \ ‐‐class cn.itcast.WordCount \ ‐‐num‐executors 3 \ 配置executor的数量 ‐‐driver‐memory 1g \ 配置driver的内存(影响不大) ‐‐executor‐memory 1g \ 配置每一个executor的内存大小 ‐‐executor‐cores 3 \ 配置每一个executor的cpu个数 /export/servers

Redis之持久化

坚强是说给别人听的谎言 提交于 2020-03-09 06:39:19
Redis之持久化 什么是持久化 ? 利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化 为什么要进行持久化? 防止数据的意外丢失,确保数据安全性 持久化过程保存什么 RDB 将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据 AOF 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程 RDB RDB启动方式 save 手动执行一次保存操作 注意: save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞, 线上环境不建议使用 。 bgsave 手动启动后台保存操作,但是不立即执行 注意: bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用 save second changes 自动执行 作用 :满足限定时间范围内key的变化数量达到指定数量即进行持久化 参数 second:监控时间范围 changes:监控key的变化量 位置 :在conf文件中进行配置 注意: save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的 save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系

mysql两个重要的日志redolog和binlog

泪湿孤枕 提交于 2020-03-08 16:45:38
一.redo log 使用原因 在 MySQL 里有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高 其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称 是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘 当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做 原理 InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文 件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末 尾就又回到开头循环写,如上面这个图所示。 write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件 开头。checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录 更新到数据文件。 write pos 和 checkpoint 之间的是“粉板”上还空着的部分,可以用来记录新的操作。如 果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下

spark调优

徘徊边缘 提交于 2020-03-07 19:15:04
1.分配更多的资源     它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,   首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 2.参数调节到多大才算大      第一种情况:standalone模式 先计算出公司spark集群上的所有资源 每台节点的内存大小和cpu核数, 比如:一共有20台worker节点,每台节点8g内存,10个cpu。 实际任务在给定资源的时候,可以给20个executor、   每个executor的内存8g、每个executor的使用的cpu个数 10。 第二种情况:Yarn 先计算出yarn集群的所有大小,比如一共500g内存,100个cpu; 这个时候可以分配的大资源,比如给定50个executor、每个executor的内存   大小10g,每个executor使用的cpu 个数为2。 使用原则:你能使用的资源有多大,就尽量去调节到大的大小(executor的数量:几十个到上百个不等;executor的 内存;exector的cpu个数

Redis的使用(二)

拥有回忆 提交于 2020-03-07 17:52:35
文章目录 Redis的使用二 1、发布订阅模式 2、Redis中事务问题(不用记) 3、rdb模式实现持久化 4、aof实现持久化 5、混合持久化的问题 6、缓存的淘汰策略 7、主从复制问题 8、哨兵模式 9、集群模式 面试容易问道的问题 Redis的使用二 1、发布订阅模式 例子:比如说你们家有个收音机 你收听了 xxxxx 频道 那么只要你打开这个频道 你就能收听到这个频道的所有的内容 你的收音机-----------接收方(订阅方) 频道的内容发送方-------内容的发布者 subscribe 订阅的频道的名称 publish 频道名字 内容 场景:这个功能实际上就是咋们的 MQ中的功能(不用管它) 2、Redis中事务问题(不用记) 事务是不是具有原子性? 这一串的操作要么同时成功、要么同时失败 不是这样的(没啥用) multi 开启事务 . . . . . . . . . . exec 提交事务 3、rdb模式实现持久化 Redis我们说是基于内存的、所以速度快、但是Redis的数据放到内存里面、当Redis重启的时候 这个数据会发生丢失 假设我们能把写入到内存的数据、持久化到硬盘 那是不是就能保证我们的数据即使发生丢失 也不会全部丢失、或者全部不丢失呢? Redis的持久化就产生了----默认情况下 Redis本身也是有持久化策略的 我们即使不配置

Redis 持久化详解

本秂侑毒 提交于 2020-03-07 05:03:52
转载自: http://blog.nosqlfan.com/html/3813.html 时间久远,竟然打不开了。。 持久化 什么是持久化,简单来讲就是将数据放到断电后数据不会丢失的设备中。也就是我们通常理解的硬盘上。 写操作的流程 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程。 1.客户端向服务端发送写操作(数据在客户端的内存中) 2.数据库服务端接收到写请求的数据(数据在服务端的内存中) 3.服务端调用write(2) 这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中) 4.操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中) 5.磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上) 故障分析 写操作大致有上面5个流程,下面我们结合上面的5个流程看一下各种级别的故障。 当数据库系统故障时,这时候系统内核还是OK的,那么此时只要我们执行完了第3步,那么数据就是安全的,因为后续操作系统会来完成后面几步,保证数据最终会落到磁盘上。 当系统断电,这时候上面5项中提到的所有缓存都会失效,并且数据库和操作系统都会停止工作。所以只有当数据在完成第5步后,机器断电才能保证数据不丢失,在上述四步中的数据都会丢失。 通过上面5步的了解,可能我们会希望搞清下面一些问题: 1.数据库多长时间调用一次write(2),将数据写到内核缓冲区? 2

- 管道的持久化存储、- 基于Spider父类进行全站数据的爬取、手动请求发送、scrapy五大核心组件、scrapy的中间件、selenium在scrapy中的使用流程

二次信任 提交于 2020-03-07 03:02:44
- 管道的持久化存储: - 数据解析(爬虫类) - 将解析的数据封装到item类型的对象中(爬虫类) - 将item提交给管道:yield item(爬虫类) - 在官大类的process_item中接收item对象并且进行任意形式的持久化存储操作(管道类) - 在配置文件中开启管道 - 细节: - 将爬取的数据进行备份? - 一个管道类对应一种平台的持久化存储 - 有多个管道类是否意味着多个管道类都可以接受到爬虫文件提交的item? - 只有优先级最高的管道才可以接受到item,剩下的管道类是需要从优先级最高的管道类中接收item- 基于Spider父类进行全站数据的爬取 - 全站数据的爬取:将所有页码对应的页面数据进行爬取 - 手动请求的发送(get): yield scrapy.Request(url,callback) - 对yield的总结: - 向管道提交item的时候:yield item - 手动请求发送:yield scrapy.Request(url,callback) - 手动发起post请求: yield scrapy.FormRequest(url,formdata,callback):formdata是一个字典表示的是请求参数- scrapy五大核心组件引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心)调度器(Scheduler)