1、概念:
持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。
持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)
2、主要应用
将 内存中的对象 存储在 数据库 中,或者存储在 磁盘文件中、XML数据文件中 等等。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
3、理解
在一定周期内保持不变就是持久化,持久化是针对时间来说的。数据库中的数据就是持久化了的数据,只要你不去删除或修改。
应用层 |
系统层 |
如果关闭(shutdown)你的应用然后重新启动则先前的数据依然存在。 | 如果关闭(shutdown)你的系统(电脑)然后重新启动则先前的数据依然存在。 |
5、特点
对象 |
市场 |
序列化 |
持久化是一种对象服务,就是把内存中的对象保存到外存中,让以后能够取回。 需要实现至少3个接口:
为什么需要持久化服务呢?那是由于内存本身的缺陷引起的: 内存掉电后数据会丢失,但有一些对象是无论如何都不能丢失的,
比如银行账号,遗憾的是,人们还无法保证内存永不掉电。
内存很昂贵,与硬盘、磁带、光盘等外存相比,内存价格要高2~3个数量级,
而且维持成本也高,至少需要一直供电吧。
所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。
|
如何构建一个好的持久化框架? 框架是否好在于在扩展性、缩放性、重用性上取得良好的平衡:
这几个需求往往是互相冲突的,所以关键是平衡。
|
也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。 需要实现2个接口:
序列化和持久化很相似,有些人甚至混为一谈, 其实还是有区别的? 序列化是为了解决对象的传输问题, 之所以在这里提到序列化? 是因为我们可以利用序列化来辅助持久化, 可以说凡是可以持久化的对象都可以序列化, 因为序列化相对容易一些(也不是很容易), 所以主流的软件基础设施,已经把序列化的框架完成了 比如.net和java |
6、意义
兴起原因 |
运用 |
7、相关实现
Hibernate | JPA(Java Persistense API) | Mybatis |
为应用程序提供了高效的O/R关系映射和查询服务, 为面向对象的领域模型到传统的关系型数据库的映射, 提供了一个使用方便的框架。 |
是EJB3.0的一部分,为其提供了一套O/R关系映射的API, 但不仅限于EJB中使用, 它也可以在web应用或者应用程序客户端中被使用, 甚至在Java桌面程序中被使用。 |
也是一种orm框架。 |
8、Koa
koa前后端分离session持久化(koa-mysql-session)
koa-mysql-session
结合 koa-session-minimal
的方法 做 session
处理的中间件
koa-mysql-session |
koa-session-minimal |
为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。 app.use( //session缓存设置 session({ key: 'USER_SID', store: new MysqlStore(sessionMysqlConfig), cookie: cookie, }), ); |
适用于koa2 的session中间件,提供存储介质的读写接口 app.use(session({ key: 'session-id', // cookie 中存储 session-id 时的键名, 默认为 koa:sess cookie: { // 与 cookie 相关的配置 domain: 'localhost', // 写 cookie 所在的域名 path: '/', // 写 cookie 所在的路径 maxAge: 1000 * 30, // cookie 有效时长 httpOnly: true, // 是否只用于 http 请求中获取 overwrite: false // 是否允许重写 } })) |