文章目录

  • Redis缓存穿透
    • 概念
    • 解决方案1-布隆过滤器
    • 解决方案2-缓存空对象
  • 缓存击穿
    • 概念
    • 解决方案1-热点数据永不过期
    • 解决方案2-加互斥锁
  • 缓存雪崩
    • 概念
    • 解决方案1-Redis高可用
    • 解决方案2-限流降级
    • 解决方案3-数据预热
  • Redis主从复制
    • 简介
    • 配置环境
    • 一主两从
      • 两种模式
    • 哨兵模式
      • 概述
      • 哨兵的作用
      • 故障切换的过程

Redis缓存穿透

查不到

概念

用户需要查询数据时,发现Redis中没有,也就是缓存没有命中,于是就向持久层数据库发起查询,发现也没有这个数据,于是本次查询失败。
当用户很多的时候,缓存都没有命中,又会请求数据库,就会给数据库带来很大的压力,这个就是缓存穿透

解决方案1-布隆过滤器

布隆过滤器是一种算法,是用户检测一个元素是否在一个集合中,存在一定的误差

可以将所有可能查询的参数以hash形式来进行存储,在控制层进行校验,不符合的则丢弃,从而避免对数据库的查询压力

解决方案2-缓存空对象

当存储层不命中时,及时返回一个空对象也将其缓存起来,同时会设置一个过期时间,之后在访问这个数据会从缓存中获取,既能保证数据的有效性也能保护后端数据库

注意:
即使对缓存设置了过期时间,还是会有缓存和数据库数据不一致的窗口期,对于需要保持一致性的业务会有影响

缓存击穿

量太大,缓存过期

概念

缓存击穿,指一个热门的key在不停的高并发访问,当这个key过期的瞬间,持续的高并发的请求就穿破了缓存,直接请求数据库当key在过期的瞬间,大量的请求并发访问,会同时访问数据库来处查询最新的数据,回写到缓存,会导致数据库瞬间压力过大

解决方案1-热点数据永不过期

热点数据在缓存时不设置过期时间,所以不会出现热点key过期后造成的数据库压力

解决方案2-加互斥锁

分布式锁的:使用分布式锁,保持对每个key同时只有一个线程去查询后端服务,其他的线程没有获取分布式锁的权限,只能等待。

缓存雪崩

概念

指在某一个时间段,缓存集中过期失效
集中过期,并不是致命问题,比较致命的是,是缓存服务器在某个节点宕机或者断网,一定的时间段内,数据库的压力聚增,对数据库的压力是不可预估的,很有可能就把数据库压宕机了

解决方案1-Redis高可用

单个Redis可能会挂点,多增设几台Redis,这样一台挂掉之后其他的也可以继续服务,就是搭建缓存服务器集群(异地多活)

解决方案2-限流降级

在缓存失效后,通过加锁或者队列来控制读写数据库的线程数量,比如对某个key只允许一个线程查询数据和写缓存,其他线程等待

解决方案3-数据预热

在部署之前,先将可能的数据先预先访问一遍,这样部分大量访问的数据就会加载到缓存 中,在即将发生大并发前手动书法加载缓存不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀

Redis主从复制

简介

主从复制:指的是一个Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(mater/leader)后者称为从节点(slave/follower),数据的复制是单向,只能从主节点到从节点,master以写为主,slave节点以读为主

默认情况,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或者没有从节点),但是一个从节点只能有一个主节点

主从复制作用:
1、数据冗余:主从复制实现的数据的热备份,是持久化之外的一种数据冗余方式
2、故障恢复:当节点出现问题,可以从其他的节点提供数据服务,实现快速的故障恢复
3、负载均衡:在主从复制的基础上,配合读写分离,可以有主节点来提供写服务,由从节点提供读服务,分担服务器负载,可以提高Redis的并发量
4、高可用:主从复制还是哨兵和集群实现的基础,主从复制是高可用的基础

配置环境

配置环境主要配置从库,不需要配置主库

复制redis.conf配置文件,修改对应信息 slaveof host ip
1、端口号
2、pid文件名
3、dump.rdb名称

一主两从

默认的情况下,每台Redis服务器都是主节点,主要来配置从节点

两种模式

一个主机两个从机

链路模式

主机可以写,从机是可以读不能写,主机中的所有的信息和数据,都会保存到从机中

哨兵模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。

概述

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵的作用

1、通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
2、当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现哨兵宕机问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

故障切换的过程

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

Redis缓存穿透、击穿、雪崩及主从复制相关推荐

  1. Redis缓存穿透击穿雪崩

    目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...

  2. Redis缓存/穿透/击穿/雪崩

    目录 1 缓存穿透 1.1 问题描述 1.2 产生原因 1.3 解决方案 2 缓存击穿 2.1 问题描述 2.2 解决方案 3 缓存雪崩 3.1 问题描述 3.2 解决方案: 1 缓存穿透 1.1 问 ...

  3. 一文搞懂Redis缓存穿透/击穿/雪崩

    缓存穿透 问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存时不命中的,则需要从数据库中查询.查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中去查询,进而增大了数据库的压力 ...

  4. 二十七、Redis缓存穿透和雪崩(完)

    Redis缓存穿透和雪崩 一.服务的高可用问题 在这里我们不会详细的区分析解决方案的底层! Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中 ...

  5. 21_Redis_浅析Redis缓存穿透和雪崩

    为什么了解缓存穿透和雪崩:保证服务的高可用问题 Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中,最要害的问题,就是数据的一致性问题,从严格 ...

  6. Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略

    1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...

  7. Redis缓存穿透击穿和雪崩(八)

    1. 缓存穿透 1.1. 定义 如果用户的请求Redis缓存没有,mysql持久层也没有这个数据,于是本地查询失败.当用户请求很多(或者恶意攻击)且都是这种缓存和持久层都没有命中的情况时,大量的请求持 ...

  8. 一篇吃透Redis缓存穿透、雪崩、击穿问题

    前言:在学Redis之前我们查询数据的时候都是直接查询数据库的,但是这样会有一个潜在的问题:"如果用户量很大,所有请求都去访问数据库,那么会使数据库压力过大,导致性能下降甚至宕机" ...

  9. Redis -- 缓存穿透和雪崩

    文章目录 一.缓存穿透 1.1 概念 1.2 解决方案 1.3 布隆过滤器的工作原理 二.缓存击穿 2.1 概念 2.2 解决方案 三.缓存雪崩 3.1 概念 3.2 解决方案 用户的数据一般是存储于 ...

  10. Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)

    Redis NoSql简述 Nosql概念 Nosql的四大分类 Redis概述 Redis的安装 安装文件 Window下安装 Linux下安装 redis-benchmark 压力测试工具 五大数 ...

最新文章

  1. c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...
  2. BFS:图的最短路径  Aizu - 0558 ​​​​​​​Cheese
  3. 又一个 Java 面试神器!
  4. Object.defineProperty方法
  5. html引入jquery_jQuery介绍
  6. GAN生成对抗网络-GAN原理与基本实现-入门实例02
  7. php定义object数据类型,PHP数据类型(4):对象object
  8. 将coco数据集转为voc格式代码
  9. 11 个创新的网站滑动效果设计案例展示
  10. 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
  11. Redis教程(全面实战教程)
  12. android清理空间,安卓手机如何清理系统空间
  13. 2020春招阿里一面
  14. Unity3D--控制鼠标的显示与隐藏
  15. lc电路在计算机中应用,lc振荡电路的应用有哪些
  16. linux搭建erp教程,10个最好的自由Linux平台ERP软件 - 51CTO.COM
  17. 玩转可视化图表之矩形树图
  18. 没在路边改过代码的程序员,不足以谈人生
  19. uni-app实现单选、多选改变样式
  20. 计算机组织与框架--六个基本逻辑门

热门文章

  1. Grails通过sessionId获取session对象
  2. Linux命令-chmod、chown和chgrp
  3. OpenCV + python 实现人脸检测(基于照片和视频进行检测)
  4. xen虚拟化实战系列(六)之xen虚拟机破解密码
  5. C语言经典算法五个人问岁数!——————【Badboy】
  6. 使用Hibernate操作数据库
  7. 如何在MDI中相同的子窗体只保留一个实例
  8. laravel CURD facade原始SQL
  9. 物理专线与虚拟专线的比较
  10. 十种机制保护三大网络基础协议(BGP、NTP和FTP)—Vecloud微云