数据持久化

转:2018最全Redis面试题整理

痴心易碎 提交于 2019-11-28 05:18:39
Java面试----2018最全Redis面试题整理 1、什么是Redis? 答:Redis全称为:Remote Dictionary Server(远程数据服务),是一个基于内存的高性能key-value数据库。 2、Redis的数据类型? 答:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 我们实际项目中比较常用的是string,hash如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。 3、使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,list,set,Zset,hash等 (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 4、Redis相比Memcached有哪些优势? (1) Memcached所有的值均是简单的字符串

Redis常见面试题

房东的猫 提交于 2019-11-28 04:56:52
1、什么是Redis? 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适合的场景主要局限在较小数据量的高性能操作和运算上。 2、Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3、Redis支持哪几种数据类型?

Redis常见面试题

雨燕双飞 提交于 2019-11-28 04:56:37
1. 什么是redis? Redis 是一个使用 C 语言写成的,开源的基于内存的高性能key-value数据库。 Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成。 2. Redis的特性 速度快 速度快的原因: - Redis所有数据都放在内存中 - Redis是C语言实现 - Redis使用了单线程的架构,预防了多线程可能产生的竞争问题 基于键值对的数据结构服务器 Redis中的值不仅可以是字符串,Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成,便于许多应用场景的开发并且提高了开发效率。 丰富的共鞥 提供了键过期功能,可以用来实现缓存 提供了发布/订阅功能,可以用来实现消息系统 支持Lua脚本功能,可以利用Lua创造出新的Redis命令 提供了简单的事务功能,能在一定程度上保证事务特性 提供了流水线(Pipeline)功能,减少了网络开销 简单稳定 客户端语言多 持久化 RDB(快照) AOF(日志的形式) 4.0版本开始支持RDB和AOF混用的方式聊进行持久化 主从复制 高可用和分布式 高可用实现:Redis Sentinel 分布式实现:Redis

redis笔记3

大兔子大兔子 提交于 2019-11-28 04:19:11
redis持久化机制 redis提供了两种持久化策略 RDB RDB的持久化策略: 按照规则定时将内存的数据同步到磁盘 snapshot redis在指定的情况下会触发快照 自己配置的快照规则 save <seconds> <changes> 默认配置规则 save 900 1 当在900秒内被更改的key的数量大于1的时候,就执行快照 save 300 10 save 60 10000 手动执行save或者bgsave save: 执行内存的数据同步到磁盘的操作,这个操作会阻塞客户端的请求 bgsave: 在后台异步执行快照操作,这个操作不会阻塞客户端的请求 执行flushall的时候 清除内存的所有数据,只要快照的规则不为空,也就是第一个规则存在。那么redis会执行快照 执行复制的时候 快照的实现原理 1:redis使用fork函数复制一份当前进程的副本(子进程) 2:父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件 3:当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此,一次快照操作完成。 注意:redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。 这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份, RDB文件是经过压缩的二进制文件

MySQL统计信息简介

霸气de小男生 提交于 2019-11-27 21:51:22
作者:王小龙@网易乐得DBA 原文地址: http://mp.weixin.qq.com/s/698g5lm9CWqbU0B_p0nLMw MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。 一、非持久化统计信息 非持久化统计信息存储在内存里,如果数据库重启,统计信息将丢失。有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF 2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息在以下情况会被自动更新: 1 执行ANALYZE TABLE 2 innodb_stats_on_metadata=ON情况下,执SHOW TABLE STATUS, SHOW INDEX, 查询 INFORMATION_SCHEMA下的TABLES, STATISTICS 3 启用--auto-rehash功能情况下,使用mysql client登录 4 表第一次被打开 5 距上一次更新统计信息,表1/16的数据被修改

【Scrapy框架持久化存储】

江枫思渺然 提交于 2019-11-27 19:56:49
原文: 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——RDB持久化

泄露秘密 提交于 2019-11-27 19:25:18
因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。 为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。 RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。 RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。 因为RDB文件是保存在硬盘里面的,所以即使Redis服务器进程退出,甚至运行Redis服务器的计算机停机,但只要RDB文件仍然存在,Redis服务器就可以用它来还原数据库状态。 RDB文件的创建与载入 有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。 SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。 和SAVE命令直接阻塞服务器进程的做法不同,BGSAVE命令会派生一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求。 和使用SAVE命令或者BGSAVE命令创建RDB文件不同

ActiveMq-常见的问题

£可爱£侵袭症+ 提交于 2019-11-27 19:22:06
1.服务挂掉 ActiveMQ的储存机制: 在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的节点中配置。 如果,在非持久化消息堆积到一定程度,内存告急的时候,ActiveMQ会将内存中的非持久化消息写入临时文件中,以腾出内存。 虽然都保存到了文件里,但它和持久化消息的区别是,重启后持久化消息会从文件中恢复,非持久化的临时文件会直接删除。 持久化存储 当消息量足够大时,持久化消息存储文件超过最大限制(比如设置文件最大2G)。 此时生产者发送消息阻塞,但消费者可正常连接并消费消息,等消息消费掉一部分,文件删除又腾出空间之后,生产者又可继续发送消息,服务自动恢复正常。 非持久化存储 当采用非持久化消息设置后,消息量足够大时,非持久化消息存储文件超过最大限制(假设设置最大2G)。 这时生产者阻塞,而消费者可以连接,却不能消费或者原本慢速消费的消费者,消费突然停止。整个系统可连接,但是无法提供服务,就这样挂了。 解决方案: 此时,可以看出为了保证消息的安全性和服务稳定,最好采用消息持久化,如果不用,在部分情况下应增大临时文件限制。 2.消息丢失 这得从java的java.net.SocketException异常说起。 简单点说就是当网络发送方发送一堆数据,然后调用close关闭连接之后。这些发送的数据都在接收者的缓存里

【Scrapy框架持久化存储】

China☆狼群 提交于 2019-11-27 19:18:35
原文: 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系列四:redis持久化

╄→尐↘猪︶ㄣ 提交于 2019-11-27 18:41:10
redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失。 两种持久化可以单独使用其中一种,但更多情况下是将二者结合使用。 一、RDB持久化 RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发。 redis会在以下几种情况下对数据进行快照。 a)根据配置规则进行自动快照; b)用户执行save或bgsave命令; c)执行flushall命令; d)执行复制(replication)时; 1、根据配置规则进行自动快照 允许用户自定义快照条件,当符合快照条件时,redis会自动执行快照操作。进行快照的题哦啊键可以由用户在配置文件中自定义,由两个参数构成:时间窗口M和改动的键的个数N。每当时间M内被更改的键的个数大于N时,即符合自动快照条件。 如redis安装目录中包含的样例配置文件中预置的3个条件: save 900 1 save 300 10 save 60 10000 每条快照条件占一行,并且以save参数开头,同时可以存在多个条件,条件之间是“或”的关系。上例中,save 900 1的意思是在15分钟(900秒)内有一个或一个以上的键被更改则进行快照,同理,save 300 10表示子啊300秒内至少有10键被修改进行快照。 2、手动触发有save和bgsave两命令 除redis自动进行快照外,服务重启