数据持久化

Android-05-持久化数据

自古美人都是妖i 提交于 2019-12-08 19:28:11
《Android第一行代码》第06章 持久化数据 221-269 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。 Android 系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储、SharedPreference 存储以及数据库存储。 文件存储 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储的方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,这样方便于之后将数据从文件中重新解析出来。 Context 类中提供了一个 openFileOutput ()方法,可以用于将数据存储到指定的文件中。 //示例 public void save(String inputText) { FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE

redis-05-持久化

独自空忆成欢 提交于 2019-12-08 19:27:44
Redis持久化 RDB 1 优点 2 缺点 3 RDB中的fock 4 RDB的触发条件 5 从RDB文件恢复数据 6 禁用RDB 7 RDB的适用场景 AOF 1 优点 2 缺点 3 AOF重写 4 AOF重写的触发条件 5 从AOF恢复数据 6 RDB到AOF的动态切换 选哪个呢 参考资料 1 Redis持久化 持久化,顾名思义就是将数据存储到存储介质中。Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大. 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式. 可以同时开启两种持久化方式。 此时,redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整. 2 RDB 2.1 优点 RDB是一个非常紧凑的文件,它保存了 某个时间点 得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集.

05 Redis 持久化

帅比萌擦擦* 提交于 2019-12-08 19:25:25
1. 持久化操作介绍 2. Redis 持久化 Redis 支持的持久化方式 RDB 方式(默认方式,无须任何配置) AOF 方式 不持久化 3. RDB 持久化 RDB 持久化:在指定时间内将内存中的数据存储到磁盘一次; RDB 优势 Redis 数据库只包含一个文件,方便文件备份; Redis 恢复十分便捷 Redis 性能最大化 RDB 缺点 数据无法保证高可用性 数据非常大的时候持久化可能会导致Redis停止几秒或者几毫秒 RDB 配置介绍 RDB 配置在Redis的配置文件中操作(redis.conf) # 每900秒(15分钟) 至少有一个key发生变化会持久化一次 save 900 1 # 每300秒有10个可以发生变化会持久化一次 save 300 10 # 每60秒有10000个key发生变化会持久化一次 save 60 10000 # 持久化保存的名字 dbfilename dump.rdb # 持久化保存的路径点表示当前路径 dir ./ 4. AOF 方式 AOF 方式: AOF 将以日志方式记录Redis操作方式 AOF 优势 AOF 可以带来更高的数据安全性。Redis 当中提供了三种同步策略(每秒通过,每修改同步,不同步)。每秒也是异步完成,效率也很高,如果服务器宕机,当前一秒数据就无法保存。每修改同步可以看为是同步持久化

Gearman使用Redis 做数据持久化

安稳与你 提交于 2019-12-07 12:17:30
2014年的时候,老大说数据持久化,当时听的一愣一愣的,不知道啥是持久化;讲了一堆Gearman使用 Redis 和MySQL的东西,表示听不懂;然后他自己在那搞;左后搞出来了,还在launchpad.net 报告了一个bug,当时确实是第一个报告那种使用情况下bug的第一人 。 队列,很多流量大的网站都会使用。对于数据,是否需要考虑数据的可靠性,对于一般不重要的数据丢失也没关系;但是对于订单和钱后关系的这类数据是需要高可靠性的。 当时老大设计的系统几乎就是准备跑在缓存上的一个平台系统(当然,不使用缓存一样运行),还有个队列Gearman。内存,数据都在内存上,丢失咋办;先写数据库(持久化)在改内存,这样就没啥意思了。所有的写操作都是先到缓存,判断缓存操作是否成功,失败写日志记录;然后使用队列Gearman写到数据库,那如果缓存中的数据加入到了队列的Job, 还没来得及Worker 消费数据,服务器出现故障,内存数据全部丢失,与之相关操作全部出错。 解决方案:使用Redis 做数据的持久化,即使memcached 数据丢失,在Redis 上还有持久化的数据,当服务器可用后, Gearman 再从Redis 消费数据,持久化到数据库MySQL 毕业后,自己动手配置过该环境,当时虽然配置出来了,但是没有做记录,当再次遇到这个问题时,发现已经有人做过了 http://www

Redis之--高级应用

£可爱£侵袭症+ 提交于 2019-12-07 02:59:09
1.安全性 由于redis的运行速度非常快(每秒可以尝试150k数据容量的密码破解),因此,为了提高其安全性,在进入客户端的设置密码是非常有必要的。 具体操作:打开redis.conf文件,ctrl+f查找"requirepass",结果下图: 设置对应的密码即可; 使用:重启redis,进入客户端(redis-cli),发现可以进入,但是当操作命令的时候,发现报错:(error)ERR operation not permitted;输入授权命令:auth 刚刚设置的密码值;返回OK,表示授权成功; 上面操作的缺点是,每次进入客服端的时候都需要输入密码;可以在进入客户端就输入密码,避免了以后的重复输入:redis0-cli -a 刚刚设置的密码值; 2.主从复制: 通过主从复制可以使多个从服务器(slave server)拥有和主服务器(master server)相同的数据库副本。 具体操作:打开从服务器的redis.conf文件,ctrl+f查找"slaveof",结果如下图: 设置:slaveof 主服务器ip 主机端口号 即可; 如果主服务设置了密码,还要再添加如下配置: 设置:masterauth 主服务器密码; 可以使用info命令查看相关的信息。 3.事务处理 redis只能保证一个client发起的事务的命令可以连续的执行,而中间不会插入其它的cli命令;

如何设计一个本地缓存

耗尽温柔 提交于 2019-12-06 20:23:31
前言 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存, 沈阳SEO 基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略,一般本地缓存也会有一个过期时间设置,比如redis可以给每个key设置一个过期时间,这样当达到过期时间之后直接删除,采用清除策略+过期时间双重保证; 5.线程安全

Redis持久化

守給你的承諾、 提交于 2019-12-06 18:24:27
Redis持久化 redis提供了两种持久化的方法来将数据以二进制的方式存储到硬盘,一种为在某一时刻生成快照的RDB持久化,另一种为将写入命令追加到aof的持久化文件的持久化 RDB 在 Redis 运行时,RDB 程序将当前内存中的数据库快照保存到磁盘文件中,在 Redis 重启动 时,RDB 程序可以通过载入 RDB 文件来还原数据库的状态。RDB文件非常适合备份以及用于灾难恢复 rdb持久化的过程 Redis 会fork 一个子进程。这样就有了一个子进程和一个父过程。 子进程开始将数据集写入临时RDB文件。 当子进程完成新的RDB文件的写入后,它将替换旧的RDB文件。 rdb分为手动触发和自动触发,自动触发需要在配置文件中定义 自动触发 rdb持久化默认在配置文件中开启的 vim /etc/redis/6379.conf 此配置表示在15分钟内至少修改一次,或者在5分钟内至少修改十次,或者在1分钟内修改10000次会触发rdb操作 是否对快照数据进行压缩存储 rdbcompression yes 是否使用CRC64算法进行数据校验,如果开启那么将增加10的性能消耗 rdbchecksum yes 指定生成的文件名 dbfilename dump.rdb 指定文件存放的目录 dir /var/lib/redis/6379 手动触发

全网最通俗易懂的Kafka入门!

守給你的承諾、 提交于 2019-12-06 16:22:13
摘自: https://www.cnblogs.com/Java3y/p/11982381.html 全网最通俗易懂的Kafka入门! 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star: https://github.com/ZhongFuCheng3y/3y 在这篇之前已经写过两篇基础文章了, 强烈建议 先去阅读: 什么是ZooKeeper? 什么是消息队列? 众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用。 我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ)改版,于是我就想学学Kafka这款消息队列啦。本篇文章对Kafka入门,希望对大家有所帮助。 本文知识点提前预览: 这篇文章花了我很长时间画图,目的是希望以最通俗易懂的方式带大家入门,如果觉得不错, 希望能给我点个赞 ! 一、什么是Kafka? 首先我们得去官网看看是怎么介绍Kafka的: https://kafka.apache.org/intro 在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦: https://scala.cool/2018/03/learning-kafka-1/ https://colobu.com/2014/08/06/kafka

redis持久化

自作多情 提交于 2019-12-06 15:16:03
1.   redis的高性能是由于其将所有数据都存储在了内存,为了使redis重启后仍能保证数据不丢失,需要将数据从内存中同步到磁盘,这一过程就是持久化。   redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。redis可以同时使用RDB和AOF 2.RDB方式(默认支持,无需配置)   该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘 3.AOF方式   该机制是将以日志的形式记录服务器所处理的每一个写操作,在redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的 来源: https://www.cnblogs.com/Life-is-Demo/p/11992194.html

Streams:深入理解Redis5.0新特性

半城伤御伤魂 提交于 2019-12-06 12:46:21
概述 相较于Redis4.0,Redis5.0增加了很多新的特性,而streams是其中最重要的特性之一。streams是redis 的一种基本数据结构,它是一个新的强大的支持多播的可持久化的消息队列,在设计上借鉴了kafaka。streams的数据类型本身非常简单,有点类似于hash结构,但是它的额外特性异常强大且复杂: 支持持久化。streams能持久化存储数据,不同于 pub/sub 机制和 list 消息被消费后就会被删除,streams消费过的数据会被持久化的保存在历史中。 支持多播。 这一点跟 pub/sub 有些类似。 支持消费者组。streams 允许同一消费组内的消费者竞争消息,并提供了一系列机制允许消费者查看自己的历史消费消息。并允许监控streams的消费者组信息,消费者组内消费者信息,也可以监控streams内消息的状态。 基础内容 数据 ID streams 提供了默认的id模式用来唯一标识streams中的每一条数据,由两部分组成: <millisecondsTime>-<sequenceNumber> millisecondsTime是redis服务所在机器的时间,sequenceNumber用于同一毫秒创建的数据。需要注意的一点是streams的id总是单调增长的,即使redis服务所在的服务器时间异常。如果当前的毫秒数小于以前的毫秒数