0


Redis高可用之持久化,以及reids的性能管理

一、redis高可用:

在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9%

redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性

在redis中实现高可用的技术:持久化,主从复制,哨兵模式(处在主从复制的基础之上),reids集群。

持久化:持久化是最简单的高可用方法,主要作用是数据实现备份,也就是把redis缓存在内存中的数据保存到本地的硬盘中(冷备份)

二、redis持久化的两种方式:

  1. RDB持久化:redis在内存中的数据定时保存到磁盘。(自动执行,手动执行)
  2. AOF持久化:redis的操作日志,以追加的方式写入一个AOF的文件,类似于MySQL的binlog

三、RDB持久化:

1.指在指定的时间间隔内,将内存中当前进程中的数据生成快照,保存到硬盘(快照持久化),用二进制压缩存储,保存的文件名的后缀是.rdb。只要redis启动时,可以直接读取快照文件,实现数据恢复 。

vim /etc/redis/6379.conf

2.生产中禁止用save保存,都用bgsave,一旦执行了save,redis的主进程会进入阻塞状态,读写都将不能进行。

3.bgsave:就是rdb快照保存的方式。特点是在执行关闭redis服务的时候,也会自动执行bgsave。

4.bgsave是主从复制的默认恢复模式 从节点执行全量恢复操作。主节点通过bgsave命令把rdb发送给从节点,除了配置文件 save mn 关闭redis会执行bgsave,开启redis也会执行bgsave。

4.RDB工作方式:

fork子进程,子进程创建RBD文件

特点:主进程会通过fork机制来创建一个子进程,子进程的创建过程中,主进程会阻塞,子进程创建完毕之后,主进程会解除阻塞。由子进程来创建RDB文件。创建完成之后,通知主进程更新通知信息

5.bgsave恢复过程

四、AOF持久化:

1.AOF持久化是将redis的每一次读、写、删除命令记录到一个单独的以.aof结尾的文件(查询操作不记录,查询操作是由主进程记录),当redis重启时,再次执行AOF文件中的命令来恢复数据。AOF的实时性更好,也是主流的持久化方案。

2.AOF默认是关闭的

3.RDB是redis的默认持久化文件,但是一旦开启AOF持久化,那么redis会以AOF的持久化文件作为最高优先级

五、AOF重写:一旦开启AOF持久化之后,所有的数据库操作记录必然都会写入AOF持久化文件当中。AOF优先级高于RDB。

vim /etc/redis/6379.conf AOF生成的文件默认是关闭的需要在配置文件当中手动开启

1.随着时间的增长,AOF文件中的户数也会不断增加。AOF的文件也会越来越大。过大的AOF文件不仅仅会影响服务器的正常运行,也会导致数据恢复的时间过长。
2.文件重写是指定期的重写AOF文件,目的是减小AOF文件的体积。AOF重写是把redis进程内的数据转化为写的命令,同步到新的AOF文件当中(不会额外的生成新的文件,只是在原内容中进行压缩)。不会对原有的AOF文件进行任何读、写操作
3.文件重写虽然是AOF持久化强烈推荐的,但不是必须的。没有重写并不影响redis启动时的读取数据。在实际工作中,会关闭自动的文件重写。通过定时任务来完成。

4.AOF的实现过程

六、RDB和AOF之间的优缺点:

RDB的优点:文件体积小,网络传输速度很快,适合全量复制。恢复速度也比AOF要快

缺点:做不到实时的持久化,数据如此重要,不能够容忍丢失的。另外RDB需要满足特定的格式,兼容性很差。

老版本的RDB不支持新版本。(redis版本一定要一致)5.0.7

AOF的优点:秒级持久化。兼容性好。因为是文本格式保存的命令,命令是通用的,适合数据迁移。

缺点:文件大,恢复速度慢。AOF持久化需要频繁的向磁盘写入数据,磁盘的IO压力也是很大的。对redis主进程的性能也会有一定的影响。

七、reids的性能管理

1.查看当前占用系统多少

used_memory:853688 redis中数据占用的内存

used_memory_rss:10522624 redis向操作系统申请的内存

used_memory_peak:853688 redis使用内存的峰值

2.在文本中如何设置redis占用系统的阈值 vim /etc/redis/6379.conf

3.内存碎片率=redis向系统申请的内存/redis数据实际占用的内存

used_memory_rss/used_memory=内存碎片率

系统已经分配给了redis,但是redis未能够有效利用的内存

allocator_frag_ratio:1.33

分配器碎片的比例,redis的主进程调度时产生的内存。比例要越小越好,值越高说明内存的浪费越多。

allocator_rss_ratio:6.79

分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存。

rss_overhead_ratio:0.93

RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,比例要越低越好,表示redis实际占用的内存和向系统申请的内存越接近,额外的开销越低。

mem_fragmentation_ratio:12.18

内存碎片的比例,越低越好,内存的使用率越高。

4.手动清理碎片的两种方法:

八、缓存击穿(面试题)

1.什么是击穿:redis缓存数据有一部分丢失,导致请求转发到了数据库,或者说是缓存刚过期,新缓存没有建立,请求都发送到了数据库。

2.怎么处理击穿:热点缓存数据设置为永不过期;做持久化,高可用方案。

3.当面试官问及击穿时的回答

九、缓存雪崩

1.什么是雪崩:redis产生大面积故障(缓存数据丢失),所有的请求全部转发到了数据库;数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪。

2.发生雪崩的原因:人为

                        缓存数据大量的同时过期,新的缓存没有及时生成

                        redis服务集群崩溃

                        访问量过大,超过redis本身的负载能力

3.怎么防备雪崩发生:redis集群一定要做高可用方案

                               熔断机制,hystrix可以实现熔断,降级,限流来降低雪崩的概率

十、缓存穿透

原因:80%以上是黑客攻击。

利用缓存和数据库里面都没有的数据,用户一直在发起请求。

利用大量的请求压垮数据库,从而导致整个网站崩溃。

处理:防火墙

       验证拦截,需要手动完成,可以判断是否是攻击行为

       缓存空的数据,把一些空数据,也设置缓存,声明周期短一些。
标签: redis 数据库 缓存

本文转载自: https://blog.csdn.net/Alone8046/article/details/140788573
版权归原作者 Alone8046 所有, 如有侵权,请联系我们删除。

“Redis高可用之持久化,以及reids的性能管理”的评论:

还没有评论