数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmp和Hibernate只是对象模型和关系模型之间转换的不同实现。
数据持久化对象的基本操作包括:保存、更新、删除、查询等。
Hibernate框架中的数据持久化机制:
之间业务程序和数据库之间,Hibernate框架使用Session会话来完成数据的提交、更新、删除、查询等。
1.向数据库提交数据
程序中保存对象时,数据会保存在Session中,然后根据框架的配置文件自动或手动决定何时保存对象。此保存已提交到数据库。
2.从数据库查询数据
在查询数据之前,需要清除缓存(手动,或者通过配置文件框架自动)。清除缓存的目的是为了使Session中的数据与数据库中的数据保持一致。那么程序只需要查询Session会话中的数据即可。
扩展信息:
使用数据持久性有以下好处:
1.程序代码具有很强的可重用性。即使更改数据库,也只需要更改配置文件,不需要重写程序代码。
2.业务逻辑代码可读性强。代码中不会有大量的SQL语言,提高了程序的可读性。
3.持久化技术可以自动优化,减少对数据库的访问,提高程序运行效率。
参考来源:-数据持久化
我们知道redis是一个高效的分布式内存数据库,因为它运行在内存上,所以性能非常快。通常用作分布式缓存,以提高微服务的性能。当服务器故障、断电等情况发生时,内存数据将会丢失且不可恢复。因此,Redis引入了持久化机制,将内存数据写入磁盘,从而保证Redis数据不丢失。
Redis有两种持久化方式,一种是RDB,一种是AOF。
RDB将Redis存储中的数据快照存储在磁盘上,是默认的Redis持久化解决方案。
RDB持久化默认有三种策略
可以在中配置。会根据一段时间内指定的变化次数触发快照操作。快照文件的名称为。每次Redis服务重启时,数据都会从这个文件加载到内存中。
60秒内10000次操作将触发RDB持久化。
当不满足第一个条件时,900秒内的操作将触发RDB持久化。
当不满足第二个条件时,300秒内执行10次操作就会触发RDB持久化。
除了根据配置中的策略启用之外,还可以使用save和bgsave命令手动启用RDB持久化。这两个命令之间的区别在于保存会阻止服务器进程。执行save命令时,服务器无法处理任何请求,但bgsave(后台保存)命令会通过子进程在后台处理数据的RDB持久化。本质上,save和bgsave都调用了rdbSave函数,因此Redis不允许save和bgsave命令同时运行。当然,这也是为了避免RDB文件中数据不一致的问题。
每当是大文件时,备份写操作笔记较大,耗时较长,影响进程的资源使用。
如果最后一个进程崩溃,则上次备份后的数据将会丢失。
文件可直接作为冷备使用
AOF(AppendOnlyFile)将每个写命令记录到独立的寄存器中,可以有效解决文件持久化数据的实时性问题。。当系统重新启动时,您可以重新运行AOF文件中的命令来恢复数据。AOF首先会将命令添加到AOF缓冲区中,然后根据相应的策略写入硬盘。
AOF实现过程涉及三个步骤
第1步
将命令添加到AOF缓冲区,
第2步
将缓冲区的内容写入程序缓冲区
第3步
将程序缓冲区的内容写入文件
当AOF为persist功能启用后,服务器每完成一条命令的执行,就会将该命令以协议格式添加到redisServer结构体的aof_buf缓冲区中。当服务重新启动时,AOF文件将被加载到缓冲区中。
AOF具有三种触发机制
·always:每当数据发生变化时,都会立即记录到磁盘。性能较差,但数据完整性较好。
·everysec:每秒将aof_buf缓冲区的内容写入AOF文件。如果发生任何宕机,1秒内的数据将会丢失。
·否:将数据同步操作留给操作系统,其性能最好,但数据可靠性最差。在配置文件中设置appendonly=yes后,如果不指定appendfsync,则默认使用Everysec选项。
写指令随着时间的推移会记录很多重复的指令,从而导致数据量非常大。
RDB比AOF优先级高
RDB小,AOF大
RDB慢,AOF快
RDB快,AOF慢
上一篇:内存频率调到3200无法开机
下一篇:内存条能装一个4g一个2g吗