当前位置: 移动技术网 > IT编程>数据库>Redis > Redis学习总结

Redis学习总结

2020年07月17日  | 移动技术网IT编程  | 我要评论

关于Redis入门,你需要知道的。

1、NOSQL概述
NoSQL:Not Only SQL 不仅仅是SQL,通常指的是非关系型的数据库。MySQL和Oracle都是属于关系型数据库
在这里插入图片描述
解决高并发、高海量、高扩展与高可用。让用户访问数据快。
非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。
高可用是当redis服务器挂到了不可用了,需要redis重启后里面的数据立即可用,redis也有数据持久化机制保证redis重启之后依然数据可用。

Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis支持五种数据类型都有哪些?
string、hash、list、set、sorted
在这里插入图片描述
Redis中有db0-db15编号的16个数据库。我们不能创建新的数据库,也不能删除数据库。数据库中也没有表的结构,客户端默认连接第0个数据库。

2、Redis持久化策略
https://blog.csdn.net/Leon_cx/article/details/81545178

  1. RDB格式:Redis DataBase,每过一段时间将内存中的数据写到硬盘上(默认开启方式)
  2. AOF格式:Append Only File,以日志的方式记录服务器上的每个操作,当服务器重启的时候,将日志中操作还原到内存中。
    2.1 RDB策略
    在 redis.windows.conf 配置文件中的SNAPSHOTTING快照有如下说明:
    在这里插入图片描述
    如下配置的是 RDB 方式数据持久化时机,必须两个条件都要满足:
    在这里插入图片描述
    rdb持久化内存的数据到dump.rdb文件,文件中会存储键值对数据。
    rdb持久化的时候是将当时内存中所有的键值对一次性的持久化到dump.rdb

实现步骤:
1、修改配置文件。
2、重启redis服务器端,要求启动的时候指明配置文件启动

小结
● rdb策略的优点
RDB文件小,非常适用于定时备份,用于灾难恢复,性能更高
持久化的东西是内存中键值对的最后结果,没有记录key的修改过程。
● rdb策略的缺点
不够实时,容易数据丢失
当一次持久化数据集很大的时候,会出现服务暂停。
● 存在老版本的Redis不兼容新版本RDB格式文件的问题。

2.2 AOF策略
默认没有开启的策略,需要修改配置文件进行如下操作:
在这里插入图片描述
开启AOF后,持久化策略有3个
在这里插入图片描述
默认是采用的策略是每秒持久化一次

AOF采用追加方式进行默认每秒持久化,会带啦持久化文件随着时间不断增大,AOF会记录每一个key所有修改操作的过程。

疑问:持久化日志文件过大怎么办?
随着命令不断从AOF缓存中写入到AOF文件中,AOF文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制来压缩AOF文件。(如下信息都在配置文件中)

AOF文件的压缩和RDB文件的压缩原理不一样,RDB文件的压缩是使用压缩算法将二进制的RDB文件压缩,而AOF文件的压缩主要是去除AOF文件中的无效命令,比如说:

  • 同一个key的多次写入只保留最后一个命令
  • 已删除、已过期的key的写命令不再保留

AOF重写的触发机制也分为手动触发和自动触发两种方式。
手动触发
执行bgrewriteaof命令直接触发AOF重写
自动触发
在redis.config配置文件中有两个配置项
auto-aof-rewrite-min-size 64MB
auto-aof-rewrite-min-percenrage 100

可以在redis.conf配置文件中添加这两个参数来自动触发AOF重写,执行bgrewriteaof命令

AOF重写流程
一一执行bgrewriteaof命令的时候,如果当前有进程正在执行AOF重写,那么直接返回;如果有进程正在执行bgsave,那么等待bgsave执行完毕再执行AOF重写。
一一Redis主进程会fork一个子进程执行AOF重写,开销和RDB重写一样。
一一AOF重写过程中,不影响Redis原有的AOF过程,包括写消息到AOF缓存以及同步AOF缓存中的数据到硬盘。
一一AOF重写过程中,主进程收到的写操作还会将命令写到AOF重写缓冲区,注意和AOF缓冲区区分开。
一一由于AOF重写过程中原AOF文件还在陆续写入数据,所以AOF重写子进程只会拿到fork子进程时的AOF文件进行重写。
一一子进程拿到原AOF文件中的数据写道一个临时的AOF文件中。
子进程完成AOF重写后会发消息给主进程,主进程会把AOF重写缓冲区中的数据写道AOF缓冲区,并且用新的AOF文件替换旧的AOF文件。

上面讲的是AOF重写的主要流程,下面再讲一些细节上的东西:

  • Redis对AOF的重要性看得比RDB重,因为RDB的时候如果有进程正在执行AOF,那么直接返回;而AOF的时候如果有进程正在执行RDB,那么等RDb结束再执行AOF。
  • Redis再AOF重写的时候新建一个AOF重写缓冲区的目的是为了保证重写过程中的写命令数据不会丢失。
  • 子进程在重写AOF文件的时候,每次写硬盘的数据量由配置决定,不能太大,否则会导致硬盘阻塞(默认32MB)。
  • AOF重写的整个过程有三个部分会阻塞进程:
  • 主进程fork子进程的时候
  • 主进程把AOF重写缓冲区中的数据写到AOF缓冲区的时候
  • 使用新的AOF文件替换掉旧的AOF文件的时候

小结
● AOF策略的优点
更高的数据安全性,因为持久化的频率更高了
● AOF策略的缺点
性能的低了,因为持久化的频率太高了

  1. 文件比RDB更大:对于相同数量的数据集而言,AOF文件通常要大于RDB文件。
  2. 运行效率比RDB更慢:根据同步策略的不同,AOF在运行效率上往往会慢于RDB。

Redis重启时加载持久化文件的顺序

● Redis重启的时候优先加载AOF文件,如果AOF文件不存在再去加载RDB文件。
● 如果AOF文件和RDB文件都不存在,那么直接启动。
● 不论加载AOF文件还是RDB文件,只要发生错误都会打印错误信息,并且启动 失败。

总结
建议同时使用2种策略
在这里插入图片描述
关于Redis的两种持久化方式到这里就介绍完了,这里再总结一下:

  • RDB持久化基于内存快照存储二进制文件,AOF持久化基于写命令存储文本文件。
  • RDB文件采用了压缩算法,比较小;AOF文件随着命令的叠加会越来越大,Redis提供了AOF重写来压缩AOF文件。
  • 恢复RDB文件的速度比AOF文件快很多。
  • RDB持久化方式实时性不好,所以AOF持久化更主流。
  • 合理的使用AOF的同步策略,理论上不会丢失大量的数据。

本文地址:https://blog.csdn.net/weixin_45226030/article/details/106087623

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网