怎么使用缓存、缓存穿透、热点数据处理、缓存雪崩解决方案 - 公开课笔记
主要内容
- 怎么使用缓存
- 什么是缓存穿透、解决方案?
- 对于热点数据的访问怎么处理?
- 怎么规避雪崩与雪崩解决方案
如何使用缓存?
缓存用来提高性能、保护数据库
缓存穿透?
缓存穿透,指指查询数据库和缓存都没有的数据
解决方案?
1、缓存空对象:代码简单、效果不好
2、布隆过滤器:代码复杂、效果很好
缓存空对象
缺点:
1、同一个key不会多次查询数据库,但是如果换一个key,还是会去查询数据库
2、redis中会有大量的空数据,占用redis内存
布隆过滤器
布隆过滤器应用
输出:
误判的数量:10
布隆过滤器可以看做是一个特殊的集合对象,只有两个方法:
1、put()
方法
2、mightContain()
方法
不能delete
,不能get
布隆过滤器存在一定的fpp
误判概率,可以自己定义容错率(必须大于0.0),容错率越低,内存消耗越大。在上图中可以看到,我们设定误判的概率为0.001
,size
表示预计插入到集合中的数据量
布隆过滤器原理
底层是一个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)错开数据过期时间
如果已经出现了雪崩:降级、熔断
解决数据一致性问题
怎么使用缓存、缓存穿透、热点数据处理、缓存雪崩解决方案 - 公开课笔记相关推荐
- Redis缓存知识-穿透、击穿、雪崩
目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...
- 缓存的穿透、击穿、雪崩分别是什么,有什么解决方法
缓存的穿透,说的是系统被访问的时候,缓存中没有这个,从而访问被直接落在了数据库上,但是恰巧数据库中也没有这个数据,导致的从访问这一动作的角度来看,数据库没数据,无法给缓存提供数据,而它自身也一直被访问 ...
- redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式
一.前言 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常 ...
- 缓存穿透、缓存并发、热点缓存之最佳招式
一.前言 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常 ...
- Redis缓存穿透-热点缓存并发重建-缓存与数据库双写不一致-缓存雪崩
解决缓存问题 1.解决Redis把内存爆满的三种方法 1.1 定期删除 1.2 惰性删除 1.3 内存淘汰策略 2. 缓存穿透--缓存击穿--缓存雪崩 3. 如何解决线上缓存穿透问题 3.1 缓存击穿 ...
- Redis缓存穿透、击穿、雪崩及主从复制
文章目录 Redis缓存穿透 概念 解决方案1-布隆过滤器 解决方案2-缓存空对象 缓存击穿 概念 解决方案1-热点数据永不过期 解决方案2-加互斥锁 缓存雪崩 概念 解决方案1-Redis高可用 解 ...
- beyond compare4过期解决方法_面试必备:缓存穿透、雪崩解决方案及缓存击穿的四种解决方案...
前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透.缓存击穿与失效时的雪崩效应. 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到 ...
- Redis缓存穿透、击穿、雪崩、预热、更新、降级
Redis是高性能的分布式内存数据库,对于内存数据库经常会出现下面几种情况,也经常会出现在Redis面试题中:缓存穿透.缓存击穿.缓存雪崩.缓存预热.缓存更新.缓存降级.本篇分别介绍这些概念以及对应的 ...
- 缓存穿透,瞬间并发,缓存雪崩的解决方法
一.缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透. 解决办法: 1.布 ...
最新文章
- 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
- Linux内核网络栈1.2.13-socket.c函数概述
- React Fiber 数据结构揭秘
- Android 开源项目及其学习
- Oracle创建简单视图案例
- 基于PyTorch框架的多层全连接神经网络实现MNIST手写数字分类
- 操作系统(秋招整理)
- jq select 修改选中_转 jquery操作select(取值,设置选中)
- java核心技术卷一,二(经典)
- 计算机一级仿宋gb2312,2016年计算机一级Office考试题(带答案)
- HDU1527——取石子游戏(威佐夫博弈)
- 计算机实习工作计划与实施步骤,实习工作计划与实施步骤范文
- Oracle性能优化(11g)
- 怎样用计算机才能更快,如何让网速变快,详细教您怎么让电脑网速变快
- ACPI电源管理模式详解
- 打坐是开发潜能的快速方法
- 从源代码编译和安装gluster
- 前端可以用到的渐变色代码
- python:计划持有基金n年,求n年的每年复利_利率
- Error:UserServiceImpl不是抽象的, 并且未覆盖UserService中的抽象方法
热门文章
- HDU - 1547 Bubble Shooter(dfs+连通块+模拟)
- SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)
- java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承()类得到的...
- 动态规划算法-02矿工挖矿问题
- 迭代加深搜索与埃及分数求解
- 棋牌游戏服务器架构: 详细设计(二) 应用层设计
- cocos2d-x游戏开发(十一)细说场景切换
- 网卡MAC地址相关信息大全
- X-Y PROBLEM
- Redis的内存淘汰策略问题