首页 > 数据库 >Redis使用场景以及各个场景中存在的问题和解决办法

Redis使用场景以及各个场景中存在的问题和解决办法

时间:2024-03-06 11:15:13浏览次数:16  
标签:解决办法 场景 数据库 Redis 布隆 查询 缓存 Key 过滤器

  • 缓存穿透:当查询一个不存在的数据时,存储层并不会将查询不到的数据进行缓存,这就导致了每次查询不存在的数据时,都会访问数据库,访问次数过大就会导致数据库挂掉,这种情况很可能就是遭到了恶意攻击。

    • 解决方案一:缓存空数据。查询返回结果为空,并且把空数据进行缓存,实现简单,但是消耗内存,可能会发生数据不一致的问题

    • 解决方案二:布隆过滤器。

      image-20240217170532136

      布隆过滤器主要作用是判断一个元素是否在一个集合中,我们当时使用的是redisson实现的布隆过滤器。布隆过滤器的底层原理是初始化一个大的数组,初始元素全部为0。标记的过程是当一个Key来到时,会经过三个Hash函数得到的数值再模数组的长度得到三个下标,将这三个下标对应的位置的元素从0改为1,这三个位置就标记了这个Key存在,查询的过程是一样的。到那时布隆过滤器会有误判,当数组开的越大时误判率就会越低但是消耗内存也就越大。一般来说误判率小于百分之五是可以接受的,不至于高并发下压倒数据库。

  • 缓存击穿:当一个Key设置了过期时间的时候,当这个Key过期时,恰好有对这个Key的大量访问请求,这些并发的请求可能会一瞬间击垮数据库。

    • 解决方案一:互斥锁

      强一致性,但是性能差

      简单来说就是查询缓存中不存在数据的时候,需要一个一个排队去访问数据库,防止了在同一时间大量的强求访问数据库,从而避免了大量查询击跨数据库。

      image-20240217175936007

    • 解决方案二:逻辑过期

      热点Key在redis中不设置过期时间,而是增加一个逻辑字段

      image-20240218131616888

      image-20240218132049666

      高可用,性能优

  • 雪崩

    在同一时间段大量的缓存key同时失效或redis服务器宕机,导致大量请求到达数据库,带来巨大压力。

    • 解决方法一:给不同key的TTL添加随机值。
    • 解决方法二:如果redis服务器宕机,利用redis集群提高服务的可用性,例如:哨兵模式、集群模式。
    • 解决方法三:给缓存业务添加降级限流策略,例如:nginx或Spring cloud gateway,可作为系统的保底策略,适用于穿透、击穿、雪崩。
    • 解决方法三:给业务添加多级缓存,例如:Guava或Caffeine

标签:解决办法,场景,数据库,Redis,布隆,查询,缓存,Key,过滤器
From: https://www.cnblogs.com/poteitoutou/p/18056087

相关文章

  • Redis(主从复制、读写分离、主从切换)架构
    Redis的集群方案大致有三种:1)rediscluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。一、sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本......
  • 读算法的陷阱:超级平台、算法垄断与场景欺骗笔记01_比价
    1.      科技正在改善我们的生活1.1.        从表象看,网络世界为我们带来了诸多便利1.1.1.          比价网站的创建、各式各样的电商促销、数不尽的手机应用程序的确降低了商品的售价,提升了产品的品质,丰富了消费者的选择1.2.        ......
  • 【Redis】docker redis设置永久密码
    1.进入容器dockerexec-it容器idbash 2.追加密码设置echo"requirepass123456">>/etc/redis/redis.conf 3.退出容器并重启容器exitdockerrestart容器id ......
  • redis数据库
    redis数据库是以键值对的形式构建的关系型数据库案例:redis数据库搭建在docker容器中启动docker容器后,可以使用dockerps命令列出容器信息我们使用dockerexec命令进入容器此时,我们已经来到了容器的内部,接下来就是对redis数据库的操作了1、redis-cli(redis的命令行工具,类似......
  • U盘方式安装Rockylinux8.9 提示 “Warning: /dev/root does not exist, could not bo
    使用软碟通做好相关镜像,但在进入安装时却报找不到启动镜像,以前是直接刻成RAW格式,但这次没有刻上这个问题是木有找到你的U盘,这个配置是需要在上一步需要完成的,但在上一步我们并不知道U盘的文件名,所以索性在这一步查看一下U盘的设备名,然后再回到上一步完成配置。在#后面输入:cd......
  • 自定义Hooks:四个典型的使用场景
    一、如何用好hook要用好ReactHooks,很重要的一点,就是要能够从Hooks的角度去思考问题。要做到这一点其实也不难,就是在遇到一个功能开发的需求时,首先问自己一个问题:这个功能中的哪些逻辑可以抽出来成为独立的Hooks?这样问的目的,是为了让我们尽可能的吧业务陆奥及拆分......
  • React的7个常用Hooks及使用场景(含示例)
    React是一款非常流行的JavaScript库,它提供了许多Hooks,用于管理函数组件的状态和生命周期。下面是React的每个Hooks的使用场景和示例:No1、useStateuseState用于在函数组件中管理状态。它返回一个包含当前状态和一个更新状态的函数的数组。更新状态的函数可以接受一个新的值......
  • redis安装启动脚本
    #!/bin/bash#sudoyuminstall-ygcc#sudoyuminstall-yrubybuild-essentialBASE=/usr/localpsaux|grepredis-server|awk'{print$2}'|xargskill-9REDIS_HOME=$BASE'/redis-3.2.0'cd$BASEsudotarzxvf./redis-3.2.0.tar......
  • redis基本使用
    1.简介redis是一款非关系型数据库或者缓存数据库(性能最高的非关系型数据库之一),拥有每秒近十万次的读写能力。2.安装&启动安装:使用免安装版本即可,免安装版本压缩包在window和mac文件夹中,对压缩包解压缩即可。启动:window:终端进入到解压缩文件夹的bin目录下......
  • CentOS 7单机部署 Redis 主从复制
    下面是一个完整的、步骤明确的指南,包括如何在CentOS7上以非root用户(在本例中为appworker,属于appworkergroup组)安装和配置Redis主从复制,设置目录权限,以及进行基本的连接测试和维护操作。1.环境准备创建用户和组sudogroupaddappworkergroup#创建一个名为appw......