Redis单机数据库与持久化

1、什么是redis持久化?

        “因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。所以,redis内存中的数据会伴随着服务器的退出而消失。因此。为了保存redis中的数据,我们需要将其写入磁盘。

2redis支持那些持久化方式?

2.1RDB (RedisDataBase)

        RDB持久性按指定的时间间隔执行数据集的时间点快照 默认情况下,RDB生成在redis的安装目录下。

        什么叫快照呢?官网上是这么介绍的:

                配置Redis,使其在数据集中至少有M个更改时每N秒保存一次数据集,也可以手动调用SAVEBGSAVE命令。

                例如,如果更改了至少1000个键,此配置将使Redis60秒自动将数据集转储到磁盘上。

                (也就是60s之内,redis中有1000次值的修改,则立即出发rdb持久化,将其数据写入rdb文件)

                即更改redis.conf配置文件,设置值 save 60 1000

        这种策略就叫做快照

        redis生成的rdb文件为 dump.rdb。其文件结构如下:

其中,根据type类型的不同,value的储存方式也会有很大区别。


2.2AOF (AppendOnlyFile)

        AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数据集。使用与Redis协议本身相同的格式记录命令,并且采用仅追加方式

        AOF文件的三种写入方式:

        aways 每个事件循环都要将缓冲区内容同步写入aof文件,并save文件

        everysec 每个事件循环都要将缓冲区内容写入aof文件,并每隔一秒都要在子线程中save文件

        no 每个事件循环都要将缓存区内容写入aof文件,但不保存

       

AOF文件载入过程

AOF的重写

因为AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以随着服务器运行时间的流逝,AOF文件中的内容会越来越多,文件的体积也会越来越大,如果不加以控制的话,体积过大的AOF文件很可能对Redis服务器、甚至整个宿主计算机造成影响,并且AOF文件的体积越大,使用AOF文件来进行数据还原所需的时间就越多

所以Redis提供了aof文件重写来解决aof文件膨胀的问题。

 aof文件重写过程

aof重写触发机制?

Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发

3总结

因为RDB文件只用作后备用途,在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。


如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。


如果不Enable AOF ,仅靠Master-Slave Replication (redis的主从复制实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。

1、什么是redis持久化?

        “因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。所以,redis内存中的数据会伴随着服务器的退出而消失。因此。为了保存redis中的数据,我们需要将其写入磁盘。

2redis支持那些持久化方式?

2.1RDB (RedisDataBase)

        RDB持久性按指定的时间间隔执行数据集的时间点快照 默认情况下,RDB生成在redis的安装目录下。

        什么叫快照呢?官网上是这么介绍的:

                配置Redis,使其在数据集中至少有M个更改时每N秒保存一次数据集,也可以手动调用SAVEBGSAVE命令。

                例如,如果更改了至少1000个键,此配置将使Redis60秒自动将数据集转储到磁盘上。

                (也就是60s之内,redis中有1000次值的修改,则立即出发rdb持久化,将其数据写入rdb文件)

                即更改redis.conf配置文件,设置值 save 60 1000

        这种策略就叫做快照

        redis生成的rdb文件为 dump.rdb。其文件结构如下:

其中,根据type类型的不同,value的储存方式也会有很大区别。


2.2AOF (AppendOnlyFile)

        AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数据集。使用与Redis协议本身相同的格式记录命令,并且采用仅追加方式

        AOF文件的三种写入方式:

        aways 每个事件循环都要将缓冲区内容同步写入aof文件,并save文件

        everysec 每个事件循环都要将缓冲区内容写入aof文件,并每隔一秒都要在子线程中save文件

        no 每个事件循环都要将缓存区内容写入aof文件,但不保存

       

AOF文件载入过程

AOF的重写

因为AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以随着服务器运行时间的流逝,AOF文件中的内容会越来越多,文件的体积也会越来越大,如果不加以控制的话,体积过大的AOF文件很可能对Redis服务器、甚至整个宿主计算机造成影响,并且AOF文件的体积越大,使用AOF文件来进行数据还原所需的时间就越多

所以Redis提供了aof文件重写来解决aof文件膨胀的问题。

 aof文件重写过程

aof重写触发机制?

Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发

3总结

因为RDB文件只用作后备用途,在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。


如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。


如果不Enable AOF ,仅靠Master-Slave Replication (redis的主从复制实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。

Redis单机数据库

“Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存。
·客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库。(select 0-15)


·数据库主要由dictexpires两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间

“·数据库的键总是一个字符串对象,而值则可以是任意一种Redis对象类型,包括字符串对象、哈希表对象、集合对象、列表对象和有序集合对象,分别对应字符串键、哈希表键、集合键、列表键和有序集合键。


·expires字典的键指向数据库中的某个键,而值则记录了数据库键的过期时间,过期时间是一个以毫秒为单位的UNIX时间戳。
·Redis使用惰性删除和定期删除两种策略来删除过期的键:惰性删除策略只在碰到过期键时才进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键。

“·执行SAVE命令或者BGSAVE命令所产生的新RDB文件不会包含已经过期的键。
·执行BGREWRITEAOF命令所产生的重写AOF文件不会包含已经过期的键。


·当主服务器删除一个过期键之后,它会向所有从服务器发送一条DEL命令,显式地删除过期键。
·从服务器即使发现过期键也不会自作主张地删除它,而是等待主节点发来DEL命令,这种统一、中心化的过期键删除策略可以保证主从服务器数据的一致性。

“·Redis命令对数据库进行修改之后,服务器会根据配置向客户端发送数据库通知。” redis的客户端必须订阅相应的事件(keyspace或者keyevent与具体的key值)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值