一、redis高可用:
在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9%
redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性
在redis中实现高可用的技术:持久化,主从复制,哨兵模式(处在主从复制的基础之上),reids集群。
持久化:持久化是最简单的高可用方法,主要作用是数据实现备份,也就是把redis缓存在内存中的数据保存到本地的硬盘中(冷备份)
二、redis持久化的两种方式:
-
RDB持久化:redis在内存中的数据定时保存到磁盘。(自动执行,手动执行)
-
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%以上是黑客攻击。
利用缓存和数据库里面都没有的数据,用户一直在发起请求。
利用大量的请求压垮数据库,从而导致整个网站崩溃。
处理:防火墙
验证拦截,需要手动完成,可以判断是否是攻击行为
缓存空的数据,把一些空数据,也设置缓存,声明周期短一些。