首页 > 数据库 >Redis篇-redis使用场景-缓存-缓存穿透-02

Redis篇-redis使用场景-缓存-缓存穿透-02

时间:2024-01-19 10:57:10浏览次数:38  
标签:02 缓存 误判 Redis 布隆 穿透 过滤器 数据

问题一:项目中哪些场景使用了redis呢?

1 缓存穿透

缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。

1.1 解决方案一

方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存;{key:1,value:null}

优点:简单;

缺点:消耗内存,可能会发生不一致的问题,可能key为1的数据数据库已经有了,但缓存中仍为null

1.2 解决方案二

方案二:布隆过滤器

:缓存预热时,预热布隆过滤器的意思是,热点数据加载到缓存的时候,也往布隆过滤器加载,但并不是全部添加。

优点:内存占用较少,没有多余key;

缺点:实现复杂,存在误判

1.2.1 布隆过滤器

bitmap(位图):相当于一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或1。

布隆过滤器作用:布隆过滤器可以用于检索一个元素是否在一个集合中。

可能存在误判,例如:

总结:

1)Redis的使用场景

  • 根据自己简历上的业务进行回答;
  • 缓存,则会引出被提问 穿透、击穿、雪崩、双写一致、持久化、数据过期、淘汰策略
  • 分布式锁  setnx、redisson

2)什么是缓存穿透,怎么解决

  • 缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库;
  • 解决方案一:缓存空数据;
  • 解决方案二:布隆过滤器;

面试文稿:

:什么是缓存穿透?怎么解决?

:嗯~~,我想一下,缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻击。

解决方案的话,我们通常都会用布隆过滤器来解决它

:好的,你能介绍一下布隆过滤器嘛?

:嗯,是这样~,布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始一个比较大数组,里面存放的二进制0或1,在一开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一个key的存在。查找的过程也是一样的。

当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率,大概不会超过5%,当然这个误判是必然存在的,要不就得增加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

原视频链接:https://www.bilibili.com/video/BV1yT411H7YK/?share_source=copy_web&vd_source=a11a8239173c7ecc0df19a35b38b8679

标签:02,缓存,误判,Redis,布隆,穿透,过滤器,数据
From: https://www.cnblogs.com/daytoy105/p/17971877

相关文章

  • VBA002 全角文字・半角文字を相互変換する方法
    StrConv関数の使い方StrConv(文字列,変換方法)変換方法は全角文字・半角文字の相互変換以外にもいくつかあるので、表形式で一覧にしました。No 値 意味1 vbUpperCase 大文字に変換2 vbLowerCase 小文字に変換3 vbProperCase 各単語の先頭の文字を大文字に変換4 vbWi......
  • openEuler欧拉部署Redis
    一、系统优化关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld关闭selinuxsed-ri's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/configsetenforce0二、安装Redisdnf-yinstallredisvim/etc/redis.conf#bind127.0.0.1bind0.0.0.0protected-mo......
  • GDKOI 2024 题解
    鸽了一些题。匹配先抽出来一个完美匹配,然后尝试调整。调整相当于:找一个偶环,满足匹配的边和未匹配的边交错,且偶环的总异或和为\(0\),是不是写个暴力就好了?发现冲过去了,很牛逼,复杂度\(O(n^3)\)(?),Code。不休陀螺一个区间可以被打出的条件是:令\(\Delta_i=b_i-a_i\),则\(x=\sum......
  • 2024年世界经济论坛年会,人工智能议题引发热议
    2024年1月15日至19日,瑞士达沃斯举办了第54届世界经济论坛年会。此次论坛汇聚了来自120个国家的2800多位各界领导者,共同探讨和推动国际合作,围绕“重建信任”这一主题讨论经济增长、气候与自然行动、能源安全、技术治理和人类发展等重要议题。论坛设置了包括世界安全合作、创造就业......
  • 【2024-01-18】监控体重
    20:00盛年不重来,一日难再晨。及时当勉励,岁月不待人。                                                 ——陶渊明昨晚洗澡前,上了一下体秤,65.8KG。我的天,本周几乎每一......
  • 2024年世界经济论坛年会,人工智能议题引发热议
    2024年1月15日至19日,瑞士达沃斯举办了第54届世界经济论坛年会。此次论坛汇聚了来自120个国家的2800多位各界领导者,共同探讨和推动国际合作,围绕“重建信任”这一主题讨论经济增长、气候与自然行动、能源安全、技术治理和人类发展等重要议题。论坛设置了包括世界安全合作、创造就业机......
  • 2024.1.19日报
    本质:启动一个JVMProcess进程(一个进程里有多个线程),执行任务TaskLocal模式可以限制模拟Spark集群环境的线程数量,即Local[N]或Local[*]其中N代表可以使用N个线程,每个线程拥有一个cpucore,如果不指定N,则默认是1个线程(该线程有一个core)。通常Cpu有几个core,就指定几个线程,最大化利用......
  • redis实战 pdf 下载
    《redis实战》深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用Redis来说不可多得的参考书籍。《redis实战》一共由三个部分组成。部分对Redis进行了介绍,说明了Redis的基本使用......
  • 【算法】【线性表】【链表】LRU 缓存
    1 题目请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput......
  • 2024-1-19事件绑定,input与hover事件
    目录事件绑定,input与hover事件事件绑定hover事件input事件事件绑定,input与hover事件在jQ内很多中事件常用的事件有下面的click(function(){...})//绑定一个点击事件hover(function(){...})//悬停触发事件blur(function(){...})//失焦事件处理focus(function(){...})//焦点......