Redis事务以及缓存雪崩,缓存穿透,缓存击穿简介及解决策略

news2024/12/28 9:31:21

事物的基本操作
*开启事务
multi
*作用
设定事物的开启位置,此指令执行后,后续的所有指令均加入到事物中
*执行事物
exec
*作用
设定事物的结束位置,同时执行事物,与multi成对出现,成对使用
注意:加入事物的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行

*取消事物
discard
*作用
终止当前事务的定义,发生在multi之后,exec之前

事务的工作流程

1.redis缓存雪崩

redis缓存雪崩指的是:一般是由大量的key集中在一段时间内失效,或者redis服务故障所引起的,导致查询请求查不到缓存,大量的请求涌入mysql,它会导致mysql瞬间被大量的流量打死,或者是由于该服务接口访问时间过长,导致耗尽了线程资源,不仅会导致该服务其他接口得不到线程资源,也有可能会使上游服务的资源也全都耗在这,然后引起整个系统的崩溃。

解决方式:1. 若是由于大量key过期所造成的,可以给key的ttl(time to live)设置一个过期时间

                2. 若是因为redis服务器宕机所导致的,可以搭建redis集群,保证高可用

                3. 可以从请求量层面进行解决,对缓存业务添加限流和服务降级策略
                4. 可以添加多级缓存,比如说nginx缓存

二、redis缓存击穿

redis缓存击穿指的是:热点key的过期,从而导致大量访问热点key的请求访问数据库,从而导致数据库压力过大。
解决方式:热点key通常是我们通过后台进行批量添加的,比如秒杀活动,解决热点key失效,可以重建缓存
1. 互斥锁实现:只允许一个线程对redis缓存进行重建,其他线程处于等待状态,可以通过redis当中的setnx实现。缺点是串行化执行,效率低。优点是一致性高。
2. 逻辑过期:给需要缓存的数据添加一个逻辑过期字段,通过对逻辑过期字段的判断,判断数据有无过期,如果过期则开启一个线程进行缓存重建,并且返回之前的数据。缺点是数据的一致性低,优点是相应速度快。

三、redis缓存穿透

redis缓存穿透指的是:redis当中没有数据,数据库当中也没有数据,请求每次都是访问数据库,而数据库有没有数据返回。

解决方式:1. 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力附加 对于空间的利用到达了一种极致,那就是Bitmap 和布隆过滤器 (Bloom Filter) 。 Bitmap: 典型的就是哈希表缺点是, Bitmap 对于每个元素只能记录 1bit 信息,如果还想完成额外的功能,恐怕只能靠牺牲更多的空间、时间来完成了。
布隆过滤器(推荐)
就是引入了 k(k>1)k(k>1) 个相互独立的哈希函数,保证在给定的空间、误判率下,完成元素判重的过程。 它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 Bloom-Filter算法的核心思想就是利用多个不同的 Hash 函数来解决 “ 冲突 ” 。 Hash存在一个冲突(碰撞)的问题,用同一个 Hash 得到的两个 URL 的值有可能相同。为了减少冲突,我们可以多引入几个 Hash ,如果通过其中的一个 Hash 值我们得出某元素不 在集合中,那么该元素肯定不在集合中。只有在所有的Hash 函数告诉我们该元素在集合中时,才能确定该元素存在于集合中。这便是 Bloom-Filter的基本思想。 Bloom-Filter一般用于在大数据量的集合中判定某元素是否存在。
2. 接口层增加校验,如用户鉴权校验, id 做基础校验, id<=0 的直接拦截;
3. 从缓存取不到的数据,在数据库中也没有取到,这时也可以将 keyvalue对写为 key-null ,缓存有效时间可以设置短点,如 30 秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个 id 暴力攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商业与新消费:从2022到2023

【潮汐商业评论/原创】 “暴风雨结束后&#xff0c;你不会记得自己是怎样活下来的&#xff0c;你甚至不确定暴风雨真的结束了。但有一件事是确定的&#xff1a;当你穿过暴风雨&#xff0c;你就不再是原来那个人。”——村上春树转眼间&#xff0c;时间的齿轮已经从2022滑向了20…

开发中常用、实用命令记录总结

开发中常用、实用命令记录总结前言Linux修改Linux主机名称设置Linux虚拟内存Linux的网络和IO测试Linux查看内存、CPU占用最多的程序防火墙Firewall命令系统管理systemctl命令Centos的yum源设置Windos进程、端口、网络连接快速调出Cmdtext文本文件妙用任务计划Docker青龙面板忘记…

tomcat组件-Server

目录 概述 tomcat 启动 大致流程 Server StandardServer 利用8005端口关闭tomcat 总结 概述 了解一个程序&#xff0c;一定要知道他是干什么的&#xff0c;以及内部架构如何支撑这么干的&#xff0c;以及牵扯的到的概念、模式等知识点的解析(这里只介绍组件)。 Tomcat是…

软件测试 | 简历中应该如何描述才能体现出软技能的实力 ?

很多同学写简历的时候&#xff0c;真的是非常纠结的。技术能力怎么写&#xff1f;工作经历怎么写&#xff1f;项目经验怎么写&#xff1f;其中以拥有多个项目经验的同学和没有项目经验的学生最为纠结。前者是项目经验太多了&#xff0c;工作多年&#xff0c;每个项目经验要是都…

2023年全国最新消防设施操作员模拟试题题库及答案

百分百题库提供消防设施操作员考试试题、消防设施操作员考试预测题、消防设施操作员考试真题、消防设施操作员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 15.&#xff08;&#xff09;是平时不能满足水灭火设施所需的工作压力和流量…

以太网交换基础

以太网协议 以太网是当今现有局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;采用的最通用的通信协议标准。 以太网是建立在CSDA/CD&#xff08;Carrier Sense Multiple Access/Collision Detection,载波监听多路访问&#xff09; 冲突域 解决机制&#xff1…

ChatGPT 都在用的身份认证产品,你了解多少?

近期&#xff0c;人工智能研究公司 OpenAI 正式推出 ChatGPT&#xff0c;这是一种基于对话的人工智能聊天机器人模型&#xff0c;它能够理解自然语言并以自然语言的方式做出回应。上线不到一周&#xff0c;用户数已经突破 100 万大关。 上线仅 5 天用户数就突破百万大关&#…

educoder头歌数据结构 查找 第1关:实现折半查找

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 任务描述 本关要求通过补全函数BSL_FindKey来实现在已排序的顺序表中查找关键码值为key的结点并返回该结点的编号。 相关知识 折半查找通常是针对顺序存储的线性表&…

SWOT分析

什么是SWOT分析?从做法到具体事例、注意点进行解说 SWOT分析法是将本公司的内部环境和外部环境作为强项(Strength)、弱点(Weakness)、机会(Opportunity)、威胁(Threat)进行梳理和分析的手法。以及把握事业现状的框架。从SWOT分析的方法到具体事例、注意事项&#xff0c;以图解…

砥砺前行,匠心致远|袋鼠云联合创始人、易知微CEO宁海元荣获“数字工匠 ”

近期&#xff0c;在余杭区数管局召开的“学习贯彻二十大&#xff0c;聚力建设新中心”联合主题党日活动暨余杭数改企业联盟党建联建共建机制圆桌恳谈会上&#xff0c;袋鼠云联合创始人、易知微CEO宁海元荣获2022年度“余杭数字工匠”&#xff0c;区数管局党组书记、局长周汝琴为…

【谷粒商城基础篇】商品服务开发:品牌管理

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

Linux进程间通信---->共享内存

文章目录什么是共享内存共享内存基本原理和共享内存有关的系统接口ftokshmgetipc相关命令查看相关共享内存信息删除相关共享内存信息shmat/shmdtshmctlipc系列设计思想总结什么是共享内存 前面我们学习了管进程间通信的一种方式—>管道。 而我们今天将要介绍的共享内存也是…

10天,几万字,源码深度解析之 Spring IOC

历时 10 天&#xff0c;终于把 Sping 源码系列写完了&#xff0c;该系列一共 5 篇&#xff0c;后续会整理成 PDF 教程&#xff0c;本文是最后一篇。 这篇文章主要讲解 IOC 容器的创建过程&#xff0c;让你对整体有一个全局的认识&#xff0c;文章没有复杂嵌套的 debug 流程&am…

SA实战 ·《SpringCloud Alibaba实战》第06章-快速搭建三大微服务并完成交互开发与测试

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 大家好,我是冰河~~ 在《SpringCloud Alibaba实战》专栏中前面的文章,我们为开发用户微服务、商品微服务和订单微服务做了充分的准备。今天…

微服务 SpringBoot 整合 Redis GEO 实现附近商户功能

文章目录⛄引言♨️广播站一、Redis GEO 数据结构用法⛅GEO基本语法、指令⚡使用GEO存储经纬度、查询距离二、SpringBoot 整合Redis 导入 店铺数据 到GEO三、SpringBoot 整合 Redis 实现 附近商户功能☁️需求介绍⚡核心源码✅附近商户效果图⛵小结⛄引言 本文参考黑马 点评项…

Spring之xml方式整合第三方框架

目录 一&#xff1a;概述 二&#xff1a;代码演示 二&#xff1a;Spring整合MyBatis的原理剖析 三&#xff1a;案例演示 一&#xff1a;概述 xml整合第三方框架有两种整合方案&#xff1a; 不需要自定义名空间,不需要使用Spring的配置文件配置第三方框架本身内容,例如&…

VScode连接本地Docker

一、安装VScode和Docker 1、vscode的安装 官网下载到最新的X64安装包&#xff0c;然后使用下述命令进行安装&#xff1a; dpkg -i code_1.73.1-1667967334_amd64.deb 安装成功之后&#xff0c;可以在应用的安装列表中查看到。 2、docker的安装 同上 二、创建docker的用户…

使用nginx临时搭建rtmp服务器

使用nginx临时搭建rtmp服务器 文章目录使用nginx临时搭建rtmp服务器系统环境搭建步骤RTMP服务验证由于需要研究rtmp协议交互方式及报数据格式&#xff0c;使用nginx临时搭建一个rtmp服务器&#xff0c;主要通过nginx的rtmp扩展模块实现接收RTMP推送的音视频流&#xff0c;同时提…

【C++】缺省参数

其实在C基础一文中已经介绍过了缺省参数&#xff0c;但是每次用这玩意都是很迷&#xff0c;今天趁着复习c知识&#xff0c;再来总结一下缺省参数。 &#x1f308;1.缺省参数知识图&#xff1a; 看来看去也就这么多的知识点&#xff0c;接下来就一一介绍一下&#xff1a; &…

prometheus监控微服务端口和主机存活

简介&#xff1a; BlackBox Exporter 顾名思义就是在应用程序的外部对其进行探测&#xff0c; 支持 HTTP、HTTPS、DNS、TCP、ICMP等方式对目标进行检测。 官方下载链接 https://github.com/prometheus/blackbox_exporter/releases/download/v0.21.1/blackbox_exporter-0.21.…