U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 常见问题解答 >

Redis常见问题及解决方案

来源:http://www.tudoupe.com时间:2022-05-23

文章目录

  • 前言
  • 这是Redis缓存的一个典型问题。
    • ?缓存穿透
    • ?缓存击穿
    • ?缓存雪崩
    • ?数据不一致
  • Redis 可用作分布锁定 。
    • Rediis 完成分布锁定
      • ?普通代码实现
      • 承认的重尼松
    • 重新编辑分发的锁对 Zookeper 分发的锁

前言

此前,对Redis的介绍性资料作了简要说明。缓存数据库用于减轻数据库负担,允许一些查询直接进入缓存。然而,系统引进的每个中间体都存在类似的问题。我们如何处理这些问题?这篇文章简要概述了Redis最普遍的一些问题和补救办法。这是访谈中经常问到的另一个问题。

这是Redis缓存的一个典型问题。

?缓存穿透

Redis没有保存适当的数据,因为它是缓存穿透。这导致数据库搜索,直接进入网站。如果在高速环境下有较大的缓冲穿透率,则数据库承受太多压力,无法感知。当数据库关闭时,整个系统将无法运行。我们当然不希望这种情况发生。那么,我们如何处理这一问题?

我们知道什么缓冲 正在它的途中。还必须了解如何制造缓冲渗透。一般而言,我们认为Redis从数据库中藏匿了大部分数据。但如果用户要求的数据不在数据库中呢?最明显的是,它并不存在在暗藏处。慢慢来是个好主意

?解决方案
首先,我们必须建立一个缓存。那么,当搜索结果不存在时,我们是否考虑暗藏?例如,查阅的ID数为1024。查询为空,我们还在储存空白的结果。下次你检查的时候 你直接去缓存处如果在这个时期结束时真正添加 ID 1024 的数据来更新缓存,否则,问题就会出现。当然,这种情况有其不利之处:如果有很多空请求,Redis会保留大量的空值,占用很多空间。

也有人谈到使用模糊过滤器。我们比他们更了解布卢姆过滤器我有一大堆钥匙 我可以记录下来使用 Blum 过滤器,确定密钥是否存在 。结果是,我们可以在Redis上方安装一个比子过滤器。我们必须使用Bloom过滤器 提前在数据库中记录身份如果您想要这样做,请在进行查询请求时浏览到 Blum 过滤器。如果当前ID存在,执行查询后,我们前往Redis,最后前往数据库。如果 Blum 过滤器显示当前 ID 不存在,对于客户来说,直接返回请求的结果并不存在。
在这里插入图片描述

?缓存击穿

缓存渗透与缓存渗透类似。另一方面,缓存穿透是指所要求的数据库中不存在的数据。数据库中存取的数据被称为缓冲拳。但是缓存中不存在。如果数据中有一个热点区域(如名人已婚),大量用户可能在同一时间寻找热点。这将使数据库受到不应有的压力。

?解决方案
我们必须考虑级联渗透的原因。也许Redis的热点数据过期了在这种情况下,必须配置热点数据的到期期限,使其永不过期。当然,在这种情况下,必须注意更新数据。否则,名人会和你离婚 告诉她她最近才结婚?。

增加分配锁是一个解决办法。热点数据请求已被锁定 。如果第一个用户要求找不到缓存, 第一个用户会要求找到缓存 。所以直接去数据库 刷新缓存其余用户正在排队等待。当返回用户询问时, 缓存中已有数据 。是当数据直接取自缓存时。
在这里插入图片描述
当服务刚刚启动,而缓存不包括数据库中的数据时,就会出现另一种缓存冲拳;在这种情况下,缓存预热可能被用来将一些数据及早装入缓存中,以避免Redis在启动之初清理干净,从而造成过多的压力,无法进入数据库。

?缓存雪崩

Cache avalanche提到一个事实,即大量缓存数据可能同时失效,因此在查询缓存时无法提供数据,因此直接查询数据库,这可能给数据库带来很大压力,如果数据库高度高,可能导致数据库崩溃。

?解决方案
在此情况下, 我们可能为缓存定义单独的过期期限, 只要缓存中的数据不会同时过期。 当然, Redis 挂起, 它会回来, Redis 设置了一个集束, 只要它不是全部已建好, 我们就可以为缓存定义单独的过期时间, 只要缓存中的数据不会同时过期。 当然, Redis 挂起, 它会回来, Redis 设置了一个集束, 只要它不是全部消失, 我们就可以为缓存定义单独的过期时间 。 当然, Redis 挂起, 它会回来, Redis 设置一个集束, 只要它不是全部消失 。

?数据不一致

使用一个缓存数据库将使该系统能够做许多数据储存读作。因此,有一个问题:数据是不一致的。必须以不同方式更新两个数据库。我们将能够首先更新数据库,无论我们先更新数据库,还是先更新缓存。事实上,这一时期的数据相互冲突。

在这种情况下,我们必须考虑目前正在建立的那种制度。数据一致性的目的是什么?如果我们做的是一个标准系统,实现完全一致是可能的。如果所做的是财务业务部分,这可能需要高度的协调一致。当然,如果你想成为强大的, 你必须保证它。通过锁定、使用数据库和缓存作为原子操作。
?有关藏匿处和谁首先管理数据库的问题

?更新缓存问题

在大多数情况下,缓存中的数据只是被删除而已。而不是更新。所以,如果它不是安全的,随着高速升级,出现了若干问题。由于数据库和缓存变化不是原子行动,所以数据库和缓存变化不是原子行动。因此,所要求的两个数据库的更改顺序和最新数据的缓存可能不同。因此,数据库中的数据与缓存中的数据之间存在差异。

例如,假设同时发出两项请求。请求 1 将 ID 1024 的用户名更改为张三 。请求2号1024号身份证改成李清当数据库没有被锁定时,这并不总是执行的顺序。缓存的行刑程序并不总是一样将会有一个事件。数据库按照请求1 -> 请求2的顺序执行的,而缓存按照请求2 -> 请求1的顺序更新的,因此,数据库的最终结果就是用户的名字是李琦。用户叫张三 是因为存到缓存里了两者不一致。

? 首先,删除缓存,然后升级数据库。

无法获取缓存更新 。因此,让我们把缓存取出来。如果有问题,删除缓存并解释问题。问题严重不严重。在逻辑想法(baidu)之后发现一个空白。需要两步才能删除缓存并更新数据库。在手术的中间, 有一个时间间隔。例如,考虑以下各点:

举例来说,假设它仍然很高,而你同时也在寻求它。已经不是两次更新了这是一个阅读更新,但它是一个阅读更新。这正是发生的事情。第一步是更新行动。删除缓存数据,但是,CPU的时间剪辑 被切换到读到那里 在这一点上。然后在数据库中读取数据并将其保存到缓存中。之后才更新数据库。那么缓存与数据库中的数据不符 。

让我们去数据库 并清理缓存。

在更新数据库前删除缓存存在问题, 所以让我们在删除缓存前讨论更新数据库的问题。 恭喜, 但缓存和数据库之间也有差距: 再一次, 让我们处理一个 CPU 扣押的具体情形 。

为说明起见,考虑以下假设情况。一个更新一个读取,这次先执行的读取,数据在阅读后尚未放入缓存 。已经拍摄了CPU时间胶片。数据库更新了,缓存也删除了,但是,为了恢复时间剪辑, 有必要读取操作的重写缓存 。数据不一致的问题再次出现。当然,发生这种情况的理论可能性微乎其微。但是也出现了不是。

?解决方案
针对上述辩论,数据不一致问题是不可避免的。但是,我们的业务流程不必连贯一致。假设我们允许数据差 10秒后,上述三种可能性之一必须存在。首先更新不能选择,这个问题无法避免,如果你不想知道你在说什么 你得等到Redis的到期日 10秒后那还有啥意义吗?
一般而言,选择是在删除缓存前对数据进行自定义更新,因为更新数据库需要更长的时间才能先执行。由于数据存在差异,我们设定了10秒,然后在10秒后删除缓存。我们不认为需要10秒时间 才能同时操作
在这里插入图片描述

Redis 可用作分布锁定 。

每个人都熟悉分布式锁:它们被锁在几个分布式服务器之间,当我们过去锁上多条线路时,它们被锁在众多的JVM环境之间。
Redis和Zookeper提供共同的分发锁, 我们将研究如何利用Redis完成分发锁。

Rediis 完成分布锁定

?普通代码实现

看一下加锁的代码:

这是解锁的密码:

?字迹上存在差距,因为它是如何做到的。 让我们看看什么是可行的。
首先,我们使用的Redis必须是一组,而该组很可能是问题的根源。一个节点是列迪斯的节点之一。 如果节点是节点,没有问题,但如果节点是节点呢?

SetnX 主节点已完成 。但是,如果节点没有克隆,主节点就会死。因此,这个锁无法使用。另一方面,回到程序状态是合法的。主节点被发现死了其中一人从一个节点移到下一个节点。因为SETNX没有从节点复制,所以,我不知道它是否 锁定在节点上。SetnX 返回 1 用于其余查询 。因此,在使用同一锁的同时,将同时执行两个程序。

问题二:如果失效日期在代码执行前到期,则分布式锁可能无法更新。当然,您可以让过期时间长一点,但这样会将代码锁定很久。

我们如何解决那里的情况?

承认的重尼松

让我们不要进入编码。这是直截了当的。 它在互联网上非常丰富。 让我们来探索一下Redisson是如何运作的。
在这里插入图片描述
Redisson比标准 Redis 多了两个分布式锁:

租赁锁:租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁锁、租赁、租赁锁、租赁、租赁锁、租赁锁、租赁、租赁锁、租赁、租赁锁、租赁、租赁、租赁锁、租赁、租赁、租赁锁、租赁、租赁、租赁、租赁、租赁、租赁锁、租赁、租赁、租赁、租赁、租赁看上面的原理图,锁上门后,顾客将建造一只门狗(当他第一次听到门狗的声音或学习一卷电影机的时候)。如果锁过期了 每隔10秒检查一次是否需要续租,如果你需要的话锁会更长当然不是一直延长,是一个递减的延长。

重新锁定:Redisthusn完成的分布式锁可以重新锁定, 我们知道Redis有自我升级操作, 所以如果被锁回Redisson的记录数量是自制的, 释放会自我失效, 直到零完全释放。

Redisson也未能解决许多客户在集群环境中获得锁的问题。Redisson的群组在CAP理论中采用了AP理论。如果您必须解决这个问题, 请尝试使用 Zookeper 来建立分布式锁 。CP理论支撑了Zookeper的分布锁

重新编辑分发的锁对 Zookeper 分发的锁

# Redis Zookeeper
一致性算法 ZAB
CAP理论 AP CP
高可用 主从集群 n+1
实现方式 SETNX createEphemeral

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息