数据持久化

Redis 数据持久化之RDB和AOF

最后都变了- 提交于 2019-12-09 21:15:03
文章目录 Redis 持久化之RDB和AOF AOF (Append Only File) RDB (Redis DataBase) Redis 持久化之RDB和AOF Redis 有两种持久化方案: RDB (Redis DataBase) AOF (Append Only File) AOF (Append Only File) 是什么:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。 RDB (Redis DataBase) 是什么:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,父进程是不用进行任何IO操作的,使Redis最大性能化。 来源: CSDN 作者: qq_45404224 链接: https://blog.csdn.net/qq_45404224/article/details/103464913

redis的淘汰算法持久化

有些话、适合烂在心里 提交于 2019-12-09 17:49:06
Redis的淘汰策略 如果你的 Redis 只能存8G数据,你写了11G,那么 Redis 会怎么淘汰那3G数据呢? redis.conf 中的过期淘汰配置 看下源码的配置 # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory # is reached. You can select among five behaviors: #最大内存策略:当到达最大使用内存时,你可以在下面5种行为中选择,Redis如何选择淘汰数据库键 #当内存不足以容纳新写入数据时 # volatile-lru -> remove the key with an expire set using an LRU algorithm # volatile-lru :在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把 redis 既当缓存,又做持久化存储的时候才用。 # allkeys-lru -> remove any key according to the LRU algorithm # allkeys-lru : 移除最近最少使用的key (推荐) # volatile-random -> remove a random key with an expire set # volatile

如何设计一个本地缓存?

时光怂恿深爱的人放手 提交于 2019-12-09 15:24:19
考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略,一般本地缓存也会有一个过期时间设置,比如redis可以给每个key设置一个过期时间,这样当达到过期时间之后直接删除,采用清除策略+过期时间双重保证; 5.线程安全 像redis是直接使用单线程处理,所以就不存在线程安全问题;而我们现在提供的本地缓存往往是可以多个线程同时访问的,所以线程安全是不容忽视的问题;并且线程安全问题是不应该抛给使用者去保证; 6.简明的接口 提供一个傻瓜式的对外接口是很有必要的,对使用者来说使用此缓存不是一种负担而是一种享受;提供常用的get,put

大数据Spark性能优化指南基础

烈酒焚心 提交于 2019-12-09 15:04:36
在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark。大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、性能更高。 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因此,想要用好Spark,就必须对其进行合理的性能优化。 Spark的性能调优实际上是由很多部分组成的,不是调节几个参数就可以立竿见影提升作业性能的。我们需要根据不同的业务场景以及数据情况,对Spark作业进行综合性的分析,然后进行多个方面的调节和优化,才能获得最佳性能。 笔者根据之前的Spark作业开发经验以及实践积累,总结出了一套Spark作业的性能优化方案。整套方案主要分为开发调优、资源调优、数据倾斜调优、shuffle调优几个部分。开发调优和资源调优是所有Spark作业都需要注意和遵循的一些基本原则,是高性能Spark作业的基础;数据倾斜调优

redis 两种持久化方式

青春壹個敷衍的年華 提交于 2019-12-09 12:51:56
RDB 全名:Redis Data Base 机制:就是redis会按照配置文件,当你的操作达到一定条件的时候,redis系统自动进行数据备份 备份的文件类型:.rdb 触发的配置条件:15分钟修改一次,5分钟修改10次,1分钟修改10000次(默认) 备份命令: // 数据库操作停止,进行数据备份操作 save 900 1 //15分钟修改1次 // 复制当前进程,进行数据备份 bgsave 300 10 //5分钟修改10次 涉及的配置: // 是否压缩数据,默认为 yes, // Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大 rdbcompression yes // 指定本地数据库文件名,默认值为 dump.rdb dbfilename dump.rdb // 指定本地数据库存放目录 dir ./ AOF 全名:Append Only File 机制:会把用户对redis进行的增删改操作的命令进行记录,数据恢复时,会把这些命令再执行一遍 备份的文件类型:.aof 触发的条件:通过修改配置文件配置(一般每秒持久化一次) 修复aof命令: redis-check-aof --fix appendonly.aof // 如果aof和rdb同时开启的时候,redis会默认先加载aof,如果aof文件有问题

Redis与Memcached的区别

三世轮回 提交于 2019-12-09 12:43:45
观点一: 1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储; 3、 虚拟内存 --Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘; 4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10; 5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从; 6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化); 7、 灾难恢复 --memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复; 8、Redis支持数据的备份,即master-slave模式的数据备份; 观点二: Redis与Memcached的区别 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 2 Redis支持数据的备份,即master

【项目总结】持久化工具 hibernate VS mybatis

柔情痞子 提交于 2019-12-08 19:31:53
一、What? 1、在项目中用到的hibernate举例: /** * 根据选题Id查询已选学生学号--2016年8月20日16:05:30 * @param tgdTopic * @return */ public List<TgdConnection> queryStudentByTopicId (String tgdTopic){ String hql= "From TgdConnection where tgdTopic=:tgdTopic and isDelete =:isDelete" ; Map<String,Object> map = new HashMap<String,Object>(); map.put( "tgdTopic" , tgdTopic); map.put( "isDelete" , 0 ); List<TgdConnection> listConn = this .query(hql, map); return listConn; } 可以看出hibernate是用hql语句查询的,hql的参数序列化为map辅助查询。 2、项目中遇到的mybatis举例: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0/

Quartz(05) job 的持久化

爱⌒轻易说出口 提交于 2019-12-08 19:31:00
在上一章( Quartz(04) Quartz 基本配置 )中,我们在quartz.properties 文件中配置了org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore , 这个配置的意思,将job运行的信息存放在内存中,Quartz也提供了另外一种持久化job运行信息的方式,存储到数据库! 比如一个任务每分钟执行一次,但是由于机器故障,服务器停止运行了一个小时,如果把job的信息存放到内存中,显然会造成信息的丢失. Quartz 便提供了一种把这些信息存储到数据的功能. 源码下载地址 Quartz 提供了两种持久化的方式,JobStoreTX和JobStoreCMT.本文以JobStoreTX讲解.在做这个功能之前,我们需要建立一套Quartz需要使用的表.这个在Quartz的文档中,针对不同数据库有不同的sql文件,选择合适的sql,在数据库中建立相应的表. 然后我们去修改 quartz.properties文件就好了.当然jdbc的jar包少不了.quartz.properties的文件如下. # Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different #

redis_05_redis的持久化机制RDB_AOF

北城余情 提交于 2019-12-08 19:29:54
持久化机制 1. Redis的持久化机制 1.1 RDB持久化 1.2 AOF 2. redis.conf 其他笔记资料 1. Redis的持久化机制 1.1 RDB持久化 指定时间间隔内将内存的 数据集快照 写入磁盘 如果已经存在这个数据库,下一次加载的时候就很快 设置相关的 redis.conf ( daemonize yes ; 快照压缩文件的目录 dir /var/redis ; 以及快照的频率) 启动redis-server,并打开其他的会话窗口,此时、/var/redis并没有快照文件 利用 ./bin/redis-benchmark -n 100000 利用测试进程, 在再另一会话窗口下的/var/redis下面发现 dump.rdb 快照文件 关闭服务端redis进程 kill -9 进程号 查看redis当前是否存在该进程 ps -ef | grep redis 是一种持久化的机制,就是服务器关闭后在启动,操作的内容是不会消失的。但是是一定时间间隔内才可能会快照记录,可能会导致某些数据的丢失 。 1.2 AOF 以 日志的形式记录 服务器所处理的每一个 写操作 ,在redis服务器启动之初会读取该文件来重新构建数据库。 更加保证了数据不会丢失。因为他的每一次操作都有记录。 rdb持久化模式可能会导致部分的数据丢失,rdb与aof可以一起同时存在

Redis持久化

▼魔方 西西 提交于 2019-12-08 19:29:09
转自: http://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html 一、对Redis持久化的探讨与理解 redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持两种持久化方式,一种是 Snapshot(RDB)<二进制文件> 也是默认方式,另一种是Append only file(AOF)的方式。具体的理论说明请见 这里 。 我们应该明确持久化的数据有什么用,答案是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。所以Redis在利用RDB和AOF进行恢复的时候,都会读取RDB或AOF文件,重新加载到内存中。 RDB 就是Snapshot快照存储,是默认的持久化方式。即按照一定的策略周期性的将数据保存到磁盘。对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。Redis支持将当前数据的快照存成一个数据文件的持久化机制。而一个持续写入的数据库如何生成快照呢。Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。 Client