redis缓存出现异常怎么处理(redis缓存遇到的问题及解决方法)

技术如何解决Redis缓存异常的问题这篇文章将为大家详细讲解有关如何解决Redis缓存异常的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。缓存雪崩缓存雪崩是指缓存同一时间大面积的失

本文将详细说明如何解决Redis缓存中的异常问题。边肖觉得很实用,分享给大家参考。希望你看完这篇文章能有所收获。

00-1010缓存雪崩指的是大面积缓存同时失效,因此后续的请求会落在数据库上,导致数据库在短时间内承受大量请求而崩溃。

解决方案

1.缓存数据的过期时间是随机设置的,以防止大量数据同时过期。

2.当一般并发不是特别大时,最常用的解决方案是锁定和排队。

3.为每个缓存的数据添加相应的缓存标签,记录缓存是否无效,如果缓存标签无效,则更新数据缓存。

缓存雪崩

缓存穿透是指不在缓存或数据库中的数据,导致所有请求都落在数据库上,导致数据库在短时间内因大量请求而崩溃。

解决方案

1.接口层增加检查,如用户认证检查、id为基本检查、id=0的直接拦截;

2.无法从缓存中提取的数据也不会在数据库中提取。此时,键值对也可以写成key-null,缓存有效时间可以设置得短一些,例如30秒(设置太长会使其在正常情况下无法使用)。这样可以防止攻击者反复使用同一个id进行暴力攻击;

3.使用Bloom filter,将所有可能的数据哈希成一个足够大的位图,某个不存在的数据就会被这个位图截获,从而避免了底层存储系统的查询压力。

附加

空间的利用已经到了极致,那就是位图和布隆过滤器。

Bitmap:哈希表就是一个典型的例子。

缺点是位图只能为每个元素记录1位信息。想要完成额外的功能,恐怕只能牺牲更多的空间和时间了。

布隆过滤器(推荐)

即引入k(k1)k(k1)个独立的哈希函数,保证元素权重确定的过程在给定的空间和误判率下完成。

其优点是空间效率和查询时间远超一般算法,缺点是有一定的误识率和删除难度。

布隆过滤器算法的核心思想是使用几种不同的哈希函数来解决“冲突”。

Hash存在冲突(碰撞)问题,同一Hash得到的两个URL的值可能是相同的。为了减少冲突,我们可以引入更多的散列。如果其中一个散列显示一个元素不在集合中,那么这个元素肯定不在集合中。只有当所有Hash函数都告诉我们元素在集合中时,我们才能确定元素存在于集合中。这是布隆过滤器的基本思想。

布隆过滤器通常用于确定一个元素是否存在于一个大数据集中。

00-1010缓存细分是指不在缓存中但存在于数据库中的数据(通常缓存时间到期)。此时由于大量并发用户,在不同时读取数据的情况下读取缓存,同时去数据库获取数据,导致数据库压力瞬间增大,造成压力过大。与缓存雪崩不同,缓存崩溃指的是对同一条数据的并发查询。缓存雪崩指的是对数据库的查询,因为不同的数据已经过时,很多数据找不到。

解决方案

1.设置热点数据永远不会过期。

2.添加互斥,互斥

00-1010缓存预热是指系统上线后,相关缓存数据直接加载到缓存系统中。这样就可以避免用户请求数据时,先查询数据库再缓存数据的问题!用户可以直接查询预先预热的缓存数据!

解决方案

1.直接写一个缓存刷新页面,在线时手动操作;

2.数据量小,可以在项目启动时自动加载;

3.定期刷新缓存;

00-1010当访问次数急剧增加、服务问题(如响应时间缓慢或无响应)或非核心服务影响核心流程的性能时,仍然需要确保服务仍然可用,即使它们对服务有害。系统可以根据一些关键数据自动降级,也可以配置开关实现手动降级。

缓存降级的最终目标是确保核心服务的可用性,即使核心服务已经损坏。而且有些服务是不能降级的(比如加入购物车和结算)。

降级前要梳理一下制度,看能不能用来保帅。从而理清哪些必须保护到死,哪些可以降级;例如,您可以参考日志级别来设置计划:

1.一般:例如,某些服务偶尔会因网络抖动或服务在线而超时,这可能会自动降级;

2.警告:某些服务的成功率在一定时间内波动(例如在95%到100%之间),可以自动或手动降级,并发出警报;

3.错误:比如可用性率低于90%,或者数据库连接池被炸,或者访问次数突然增加到系统能够承受的最大阈值,那么可以根据情况自动降级或者手动降级;

4.严重错误:如因特殊原因数据有误,此时需要紧急手动降级。

服务降级的目的是防止Redis服务失效,导致数据库雪崩问题。因此,对于不重要的缓存数据,您可以

服务降级策略,例如一个比较常见的做法就是,Redis出现问题,不去数据库查询,而是直接返回默认值给用户。

缓存热点key

缓存中的一个Key(比如一个促销商品),在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

解决方案

对缓存查询加锁,如果KEY不存在,就加锁,然后查DB入缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回数据或者进入DB查询

关于“如何解决Redis缓存异常的问题”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/149944.html

(0)

相关推荐

  • 怎么使用span解决数组退化和越界访问

    技术怎么使用span解决数组退化和越界访问本篇文章给大家分享的是有关怎么使用span解决数组退化和越界访问,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数组

    攻略 2021年11月10日
  • 组件优化性能

    技术组件优化性能 组件优化性能import React from "react";
    class Home extends React.Component {constructor(props) {sup

    礼包 2021年12月17日
  • 寻找写代码感觉,八)之SpringBoot过滤器的使用

    技术寻找写代码感觉,八)之SpringBoot过滤器的使用 寻找写代码感觉(八)之SpringBoot过滤器的使用一、什么是过滤器
    过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些

    礼包 2021年10月27日
  • win7系统安装SQLServer2000的步骤是什么呢

    技术win7系统安装SQLServer2000的步骤是什么呢本篇文章给大家分享的是有关win7系统安装SQLServer2000的步骤是什么呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,

    攻略 2021年12月1日
  • 瓷砖打眼,在瓷砖上面打孔有什么好的办法

    技术瓷砖打眼,在瓷砖上面打孔有什么好的办法在玻化砖上开孔或者打孔的过程中,出现瓷砖开裂是一个比较常见的问题,下面就为大家介绍一下,如何去避免在后期的安装工作中打孔将瓷砖打裂的问题,个人觉得可以从以下几个方面着手: 1、检

    生活 2021年10月22日
  • 数据库中表连接方式有哪些

    技术数据库中表连接方式有哪些这篇文章将为大家详细讲解有关数据库中表连接方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 1 nested loop

    攻略 2021年11月20日