5.redis相关

2020-10-30  本文已影响0人  Junma_c631

参考外部博文

一、Redis入坟
https://www.jianshu.com/p/583d105cd2a5
二、Redis入坟(二)高级特性,发布订阅、事务、Lua脚本
https://www.jianshu.com/p/0070033af93a
三、Redis入坟(三)Redis为什么这么快?
https://www.jianshu.com/p/9866165b2384
四、Redis入坟(四)Redis内存回收知多少
https://www.jianshu.com/p/8a34d1594046
五、Redis入坟(六)分布式集群,概念、原理、实操
https://www.jianshu.com/p/199255aa7bf1
六、Redis入坟(八)内存管理与优化,面试必考
https://www.jianshu.com/p/d39f087850c9
七、Redis入坟(番外篇)配置文件redis.conf,解析每个参数的含义
https://www.jianshu.com/p/564c6cbd1cbc

一、redis持久化机制

https://www.cnblogs.com/xingzc/p/5988080.html

二、redis api相关操作

https://www.jianshu.com/p/a21ea6828249

三、缓存穿透及布隆过滤器

https://www.jianshu.com/p/60b036355523

四、缓存雪崩、集群搭建

https://www.jianshu.com/p/436537e0f1bb

五、redis实现分布式锁

https://www.jianshu.com/p/71e066a3a456

RDB持久化

1.手动触发
save命令:主线程处理持久化,会阻塞client端发出的命令。
bgsave命令:主线程fork一个子线程处理持久化,主线程继续处理client请求,主线程不阻塞。
2.自动触发RDB持久化 ,配置redis.conf

save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

具体持久化流程

1). Redis先fork子进程。
2). 子进程将快照数据写入到临时RDB文件中。
3). 当子进程完成数据写入操作后,再用临时文件替换老的文件。

AOF持久化 redis.conf配置

# 是否启用aof持久化方式 。否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
# 因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly yes
#AOF持久化时机,共有3个可选值: 
#  no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证) 
#  always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢,安全) 
#  everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据)
# appendfsync always
appendfsync everysec

aof重写机制(即混合持久化机制)

1.手动触发
执行bgrewriteaof命令
2.自动触发

#当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 。
#当AOF文件大小大于该配置项时自动开启重写
auto-aof-rewrite-min-size 64mb
#当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 。
#当AOF文件大小的增长率大于该配置项时自动开启重写。
auto-aof-rewrite-percentage 100

3.no-appendfsync-on-rewrite参数
在执行bgrewriteaof操作和主进程写aof文件的操作,两者都会操作磁盘,而bgrewriteaof往往会涉及大量磁盘操作,这样就会造成主进程在写aof文件的时候出现阻塞的情形,现在no-appendfsync-on-rewrite参数出场了。如果该参数设置为no,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题。如果设置为yes呢?这就相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?在linux的操作系统的默认设置下,最多会丢失30s的数据。
因此,如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no。

#值为no代表不能忍受数据丢失
no-appendfsync-on-rewrite no

4.aof重写流程


image.png
上一篇下一篇

猜你喜欢

热点阅读