主要内容

  • 怎么使用缓存
  • 什么是缓存穿透、解决方案?
  • 对于热点数据的访问怎么处理?
  • 怎么规避雪崩与雪崩解决方案

如何使用缓存?

缓存用来提高性能、保护数据库

缓存穿透?

缓存穿透,指指查询数据库和缓存都没有的数据
解决方案?
1、缓存空对象:代码简单、效果不好
2、布隆过滤器:代码复杂、效果很好

缓存空对象

缺点:
1、同一个key不会多次查询数据库,但是如果换一个key,还是会去查询数据库
2、redis中会有大量的空数据,占用redis内存

布隆过滤器

布隆过滤器应用


输出:

误判的数量:10

布隆过滤器可以看做是一个特殊的集合对象,只有两个方法:
1、put()方法
2、mightContain()方法
不能delete,不能get

布隆过滤器存在一定的fpp误判概率,可以自己定义容错率(必须大于0.0),容错率越低,内存消耗越大。在上图中可以看到,我们设定误判的概率为0.001size表示预计插入到集合中的数据量

布隆过滤器原理
底层是一个bit数组
初始化value全部为0
添加“太白”之后,下面3个黄色位置变为1

原理:(以3个哈希函数为例)
添加“太白”之后,用3个不同的哈希函数对“太白”进行哈希。哈希得到数字之后,再对数组长度取余数,得到3个对应的数组下标

因为底层只有一个bit数组,并不去保存数据,所以不能get数据。
因为同一个格子有可能会被多个数据占用,所以不能delete数据。

误判示例:产生哈希冲突(下图)

正确判断示例

影响容错率的因素:
数组长度、Hash函数的个数,两者需要配合使用才能达到更好的效果,并不是越大越好

guava原理
用户只需要定义预计插入量容错率
例如,当我们设置预计插入量=1000000,容错率fpp=0.1时,,使用算法:

计算出

redis
redis底层是使用位数组存储key的



执行下面操作后,redis会自动扩容

自己手写分布式的布隆过滤器

对于热点数据的访问
缓存击穿(99个人同时访问一个缓存没有,但数据库有的数据)
数据库有数据,缓存没有的情况:
1、这条数据没有人访问过
2、缓存刚好失效
解决方式:加锁

缓存血崩
1、redis挂了
2、大部分缓存同时失效
规避方式:
redis搭建高可用集群(cluster)错开数据过期时间
如果已经出现了雪崩:降级、熔断

解决数据一致性问题


怎么使用缓存、缓存穿透、热点数据处理、缓存雪崩解决方案 - 公开课笔记相关推荐

  1. Redis缓存知识-穿透、击穿、雪崩

    目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...

  2. 缓存的穿透、击穿、雪崩分别是什么,有什么解决方法

    缓存的穿透,说的是系统被访问的时候,缓存中没有这个,从而访问被直接落在了数据库上,但是恰巧数据库中也没有这个数据,导致的从访问这一动作的角度来看,数据库没数据,无法给缓存提供数据,而它自身也一直被访问 ...

  3. redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式

    一.前言 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常 ...

  4. 缓存穿透、缓存并发、热点缓存之最佳招式

    一.前言 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常 ...

  5. Redis缓存穿透-热点缓存并发重建-缓存与数据库双写不一致-缓存雪崩

    解决缓存问题 1.解决Redis把内存爆满的三种方法 1.1 定期删除 1.2 惰性删除 1.3 内存淘汰策略 2. 缓存穿透--缓存击穿--缓存雪崩 3. 如何解决线上缓存穿透问题 3.1 缓存击穿 ...

  6. Redis缓存穿透、击穿、雪崩及主从复制

    文章目录 Redis缓存穿透 概念 解决方案1-布隆过滤器 解决方案2-缓存空对象 缓存击穿 概念 解决方案1-热点数据永不过期 解决方案2-加互斥锁 缓存雪崩 概念 解决方案1-Redis高可用 解 ...

  7. beyond compare4过期解决方法_面试必备:缓存穿透、雪崩解决方案及缓存击穿的四种解决方案...

    前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透.缓存击穿与失效时的雪崩效应. 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到 ...

  8. Redis缓存穿透、击穿、雪崩、预热、更新、降级

    Redis是高性能的分布式内存数据库,对于内存数据库经常会出现下面几种情况,也经常会出现在Redis面试题中:缓存穿透.缓存击穿.缓存雪崩.缓存预热.缓存更新.缓存降级.本篇分别介绍这些概念以及对应的 ...

  9. 缓存穿透,瞬间并发,缓存雪崩的解决方法

    一.缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透. 解决办法: 1.布 ...

最新文章

  1. 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
  2. Linux内核网络栈1.2.13-socket.c函数概述
  3. React Fiber 数据结构揭秘
  4. Android 开源项目及其学习
  5. Oracle创建简单视图案例
  6. 基于PyTorch框架的多层全连接神经网络实现MNIST手写数字分类
  7. 操作系统(秋招整理)
  8. jq select 修改选中_转 jquery操作select(取值,设置选中)
  9. java核心技术卷一,二(经典)
  10. 计算机一级仿宋gb2312,2016年计算机一级Office考试题(带答案)
  11. HDU1527——取石子游戏(威佐夫博弈)
  12. 计算机实习工作计划与实施步骤,实习工作计划与实施步骤范文
  13. Oracle性能优化(11g)
  14. 怎样用计算机才能更快,如何让网速变快,详细教您怎么让电脑网速变快
  15. ACPI电源管理模式详解
  16. 打坐是开发潜能的快速方法
  17. 从源代码编译和安装gluster
  18. 前端可以用到的渐变色代码
  19. python:计划持有基金n年,求n年的每年复利_利率
  20. Error:UserServiceImpl不是抽象的, 并且未覆盖UserService中的抽象方法

热门文章

  1. HDU - 1547 Bubble Shooter(dfs+连通块+模拟)
  2. SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)
  3. java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承()类得到的...
  4. 动态规划算法-02矿工挖矿问题
  5. 迭代加深搜索与埃及分数求解
  6. 棋牌游戏服务器架构: 详细设计(二) 应用层设计
  7. cocos2d-x游戏开发(十一)细说场景切换
  8. 网卡MAC地址相关信息大全
  9. X-Y PROBLEM
  10. Redis的内存淘汰策略问题