数据持久化

持久化存储与HTTP缓存

老子叫甜甜 提交于 2019-12-03 13:17:11
本文主要学习一下一些高级的HTTP知识,例如 Session LocalStorage Cache-Control Expires ETag 其实主要就是涉及到了 持久化存储与缓存的技术 在此之前已经学习了 Cookie 的 相关知识 ,但是 Cookie 有个缺点是可以人为修改,有一定的安全隐患。 所以,针对这个缺点,诞生了 Session Session 一般来说 Session 是基于Cookie实现的,它利用一个 sessionId 把用户的敏感数据隐藏起来,除非暴力穷举才有可能获得敏感数据。 sessionId 我们使用 Cookie 的时候,一般是服务器给用户一个响应头,设置 Cookie response.setHeader('Set-Cookie', 'sign_in_email=...;HTTPOnly') 既然Session还是基于 Cookie 实现的,那么还是应该在 Set-Cookie 上搞事情。 //预先在服务器端预留对象准备存储各种session let sessions = { } ... let sessionId = Math.random() * 100000 sessions[sessionId] = {sign_in_email: email} response.setHeader('Set-Cookie', `sessionId=$

Redis怎么做持久化

无人久伴 提交于 2019-12-03 10:19:12
1.redis持久化的两种方式 2.两种持久化方式区别 3.两种持久化方式的使用场景 1.Redis 是内存型数据库,一般来用作缓存。保存在内存的数据有一个特点, 就是 断电消失,因此一旦 Redis 宕机了,重启以后保存在 Redis 里面的数据就会消失, 此时服务器在 Redis 里面获取不到缓存,就会让缓存无法命中,导致缓存雪崩,请求直接打到 MySQL 上最后让 MySQL 也宕机。 因此我们需要 Redis 持久化来做 灾难恢复、数据恢复还有数据库高可用。 2.Redis 有两种持久化方式,一种是 RDB、一种是 AOF。 RDB:就是对 Redis 中的数据进行周期性的持久化。 类似于快照 AOF:就是 对每一条写入、删除记录做日志,Redis 重启的时候,重启 AOF 日志重构数据集 如果同时使用两种,Redis 就会优先实现 AOF,因为数据更加完整 RDB: 优点:保存多份完整备份,对 IO 影响小,适合做冷备,并且在宕机后恢复更加快 缺点:一般 快照文件生成的间隙在 5min,一旦宕机,就会丢失 5min 的数据。同时如果 快照文件过大,会让 服务暂停几毫秒甚至一秒 AOF: 优点:一般 1s 同步一次, 最多丢失 1s 的数据。同步日志是使用 append-only 模式,写入快,并且 日志文件不易破损,尾部破损也容易恢复。并且 AOF 文件大小不会影响性能。

redis之持久化机制

亡梦爱人 提交于 2019-12-03 10:01:01
[动图演示]Redis 持久化 RDB/AOF 详解与实践 Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持的数据类型很丰富,如字符串、链表、集 合、以及散列等,并且还支持多种排序功能。 什么叫持久化? 用一句话可以将持久化概括为:将数据(如内存中的对象)保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。 从应用层与系统层理解持久化 同时,也可以从应用层和系统层这两个层面来理解持久化: 应用层:如果关闭( Close )你的应用然后重新启动则先前的数据依然存在。 系统层:如果关闭( Shutdown )你的系统(电脑)然后重新启动则先前的数据依然存在。 Redis 为什么要持久化? Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。 对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。 Redis 怎么实现持久化?

java面试小结——框架(hibernate、MyBatis、spring、Spring MVC)

ε祈祈猫儿з 提交于 2019-12-03 08:16:06
Hibernate 什么是ORM 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些? 所谓”持久”就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: - 数据存储逻辑的分离,提供抽象化的数据访问接口。 - 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。 - 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。 - 数据抽象,提供更面向对象的数据操作。 持久层框架有: - Hibernate - MyBatis - TopLink - Guzz - jOOQ - Spring Data - ActiveJDBC Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗

初见Redis

一世执手 提交于 2019-12-03 05:33:42
Redis是什么,有什么特点和优势 Redis是一个开源用C语言编写的,基于内存,可以持久化,高性能的key-value数据库,并提供多种语言的API。 它也被称为数据结构服务器,因为值(value)可以是string,hash,list,sets,zsets(有序集合)类型 Redis有以下特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 Redis的优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性 安装Redis 从redis.io下载最新版redis-X.Y.Z.tar.gz后解压,然后进入redis-X.Y.Z文件夹后直接make即可, 这是用于

docker数据持久化

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 04:43:55
如果想让数据持久保留: 1、Docker 的绑定挂载功能,这个功能可以将宿主系统的文件或文件夹挂载到容器里 2、使用 Docker 卷来创建一个卷并挂载到容器里。 下面我们就一起来了解下这两种方法以及如何使用。 Docker 绑定挂载 Docker 绑定挂载可以让宿主系统的文件夹挂载到容器里,常用于文件共享,也可以用于数据持久化,不过官方更推荐使用 Docker 卷(等会讲)。 绑定挂载需要在创建容器的时候进行挂载,挂载的方式也很简单,只需要添加 -v 参数。 例如: 在宿主系统创建一个/tmp/jason文件夹并创建一个test文档,文档内容为“hello,jason”: mkdir /tmp/jasonecho "hello,jason" >/tmp/jason/test.txt 查看test.txt 创建一个容器将刚刚创建的文件夹挂载到容器里 docker run -itd -v /tmp/jason:/test --name mivm alpine /bin/sh -v 后面的两个参数,第一个是宿主系统路径,第二个是挂载目标路径,可以用来挂载文件夹,也可以用来挂载文件,而且可以挂载多个,只需要添加多个 -v 即可,如果宿主系统里不存在文件夹,Docker 会自动创建文件夹。 默认情况下 mount 的数据是可读可写的。我们可以添加 ro 参数设置成只读权限,此时:

RabbitMQ-工作原理

此生再无相见时 提交于 2019-12-03 02:21:40
使用场景 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中,而不是像几年前一样页面卡死或报错给用户。 像这种排队结算就用到了消息队列机制,放入通道里面一个一个结算处理,而不是某个时间断突然涌入大批量的查询新增把数据库给搞宕机,所以RabbitMQ本质上起到的作用就是削峰填谷,为业务保驾护航。 为什么选择RabbitMQ 现在的市面上有很多MQ可以选择,比如ActiveMQ、ZeroMQ、Appche Qpid,那问题来了为什么要选择RabbitMQ? 除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器; 可靠性,RabbitMQ的持久化支持,保证了消息的稳定性; 高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性; 集群部署简单,正是应为Erlang使得RabbitMQ集群部署变的超级简单; 社区活跃度高,根据网上资料来看,RabbitMQ也是首选; 工作机制 生产者、消费者和代理 在了解消息通讯之前首先要了解3个概念:生产者、消费者和代理。 生产者:消息的创建者,负责创建和推送数据到消息服务器; 消费者:消息的接收方,用于处理数据和确认消息; 代理:就是RabbitMQ本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。 消息发送原理

Redis面试题及答案整理

家住魔仙堡 提交于 2019-12-03 01:38:33
Redis面试题及答案整理 1. Redis有哪些数据结构? 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 2. 使用过Redis分布式锁么,它是什么回事? 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? 这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。 jedis.set(String key, String value, String nx, String expx, int time),这个set()方法一共有五个形参: 第一个为key,我们使用key来当锁,因为key是唯一的。 第二个为value,我们传的是requestId,很多童鞋可能不明白,有key作为锁不就够了吗,为什么还要用到value

Redis面试题总结(1)

两盒软妹~` 提交于 2019-12-03 01:37:41
(1)什么是redis? Redis 是一个基于内存的高性能key-value 数据库 。 (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 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适合的场景主要局限在较小数据量的高性能操作和运算上。 (3)Redis支持的数据类型 Redis通过Key-Value的单值不同类型来区分, 以下是支持的类型: Strings Lists

redis

戏子无情 提交于 2019-12-03 01:37:22
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支持哪几种数据类型?