iis7网站绑定域名163网易免费邮箱登录

web/2025/9/26 18:36:25/文章来源:
iis7网站绑定域名,163网易免费邮箱登录,分类信息的网站如何推广,杭州软件开发公司排名#x1f389;#x1f389;欢迎光临#xff0c;终于等到你啦#x1f389;#x1f389; #x1f3c5;我是苏泽#xff0c;一位对技术充满热情的探索者和分享者。#x1f680;#x1f680; #x1f31f;持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 … 欢迎光临终于等到你啦 我是苏泽一位对技术充满热情的探索者和分享者。 持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 这是苏泽的个人主页可以看到我其他的内容哦 努力的苏泽http://suzee.blog.csdn.net 最近超级无敌忙  就断更好久了  实在是抽不出时间来 没办法  这篇文章也只是整理我以前学习的资料  目前还有一整套企业级的Redis处理方案没写哈 敬请期待朋友们 下面是正文 目录 首先我们要明白什么是缓存击穿 分析有什么办法能解决 业务解析 ​编辑 代码实现 然后我们将缓存穿透的函数给封装起来 原函数 我们将这部分逻辑 封装到 queryWithPassThrough中 我们再写一个函数queryWithMutex来用互斥锁解决缓存穿透的问题 于是原本的查询函数的结构就变成了这样 这样做的优缺点 优点 缺点 下一篇我们来讲解如何使用另一个方案解决这个问题 首先我们要明白什么是缓存击穿 Redis缓存击穿是指在高并发的情况下当某个热点数据的缓存过期或不存在时大量的请求同时涌入数据库或后端服务导致数据库或后端服务负载过高甚至崩溃的情况。 分析有什么办法能解决 当涉及到并发访问共享资源时互斥锁和逻辑过期是两种常用的技术手段。 互斥锁Mutex 互斥锁是一种并发控制机制用于在多个线程或进程之间保证共享资源的互斥访问。它通过在关键代码段前后设置锁来确保同一时间只有一个线程或进程可以执行关键代码段。当某个线程或进程获取到互斥锁时其他线程或进程需要等待锁的释放才能继续执行。 业务解析 代码实现 先写两个函数 一个加锁 一个释放锁 private boolean tryLock(String key){//自定义互斥锁 将申请锁的结果返回Boolean flag stringRedisTemplate.opsForValue().setIfAbsent(key, 1, 10L, TimeUnit.SECONDS);return BooleanUtil.isTrue(flag);} //释放锁 private void unLock(String key){stringRedisTemplate.delete(key);} 然后我们将缓存穿透的函数给封装起来 原函数 public Result queryById(Long id) {//1.从Redis查询id 这里使用的数据结构可以是String也可以是hash 若是查询不到就为空了 CACHE_SHOP_KEY就是cache:shop:String shopJson stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//2.判断是否存在 在字符串意义上是否为空if (StrUtil.isNotBlank(shopJson)) {//3.存在直接返回Shop shop JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}//3.判断是否命中写入redis中的nullif(shopJson ! null){return Result.fail(店铺信息不能为空);}//4.不存在 查询数据库Shop shop getById(id);//5.数据库中不存在 返回报错if (shop null){//空值写入redisstringRedisTemplate.opsForValue().set(cache:shop: id, null,CACHE_NULL_TTL, TimeUnit.MINUTES);return Result.fail(店铺不存在);}//6.数据库中存在 写入Redis 并返回stringRedisTemplate.opsForValue().set(cache:shop: id, JSONUtil.toJsonStr(shop),30L, TimeUnit.MINUTES);return Result.ok(shop); } 我们将这部分逻辑 封装到 queryWithPassThrough中 //封装缓存穿透函数 private Shop queryWithPassThrough(Long id){//1.从Redis查询id 这里使用的数据结构可以是String也可以是hash 若是查询不到就为空了 CACHE_SHOP_KEY就是cache:shop:String shopJson stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//2.判断是否 在字符串意义上是否为空if (StrUtil.isNotBlank(shopJson)) {//3.存在直接返回Shop shop JSONUtil.toBean(shopJson, Shop.class);return shop;}//3.判断是否命中写入redis中的nullif(shopJson ! null){return null;}Shop shop getById(id);//5.数据库中不存在 返回报错if (shop null){//空值null写入redisstringRedisTemplate.opsForValue().set(cache:shop: id, null,CACHE_NULL_TTL, TimeUnit.MINUTES);return null;}//6.数据库中存在 写入Redis 并返回stringRedisTemplate.opsForValue().set(cache:shop: id, JSONUtil.toJsonStr(shop),30L, TimeUnit.MINUTES);return shop; } 我们再写一个函数queryWithMutex来用互斥锁解决缓存穿透的问题 于是原本的查询函数的结构就变成了这样 public Result queryById(Long id) {//缓存穿透 // Shop shop queryWithPassThrough(id);//互斥锁解决缓存穿透Shop shop queryWithMutex(id);if (shop null) {return Result.fail(店铺不存在);}//返回return Result.ok(shop);} //解决缓存穿透的问题 private Shop queryWithMutex(Long id) throws InterruptedException{String lockKey lockKey id;while (true) {//1.从Redis查询id 这里使用的数据结构可以是String也可以是hash 若是查询不到就为空了 CACHE_SHOP_KEY就是cache:shop:String shopJson stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//2.判断是否 在字符串意义上是否为空if (StrUtil.isNotBlank(shopJson)) {//3.存在直接返回Shop shop JSONUtil.toBean(shopJson, Shop.class);return shop;}//3.判断是否命中写入redis中的nullif(shopJson ! null){return null;}//4重建缓存//4.1申请互斥锁boolean flag tryLock(lockKey);//4.2判断是否成功if (!flag){try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}else//成功了就跳出循环 这里不敢用递归 怕栈溢出了break;}//4.4 成功 查询数据库Shop shop getById(id);//5.数据库中不存在 返回报错if (shop null){//空值null写入redisstringRedisTemplate.opsForValue().set(cache:shop: id, null,CACHE_NULL_TTL, TimeUnit.MINUTES);return null;}//6.数据库中存在 写入Redis 并返回stringRedisTemplate.opsForValue().set(cache:shop: id, JSONUtil.toJsonStr(shop),30L, TimeUnit.MINUTES);//7.释放互斥锁unLock(lockKey);return shop; } 这样做的优缺点 互斥锁作为一种并发控制机制在解决缓存击穿问题时具有以下优点和缺点 优点 确保数据一致性互斥锁可以确保同一时间只有一个线程或进程可以访问共享资源避免了并发访问导致的数据不一致性问题。 避免竞态条件互斥锁可以防止多个线程或进程同时执行关键代码段避免了竞态条件的发生。竞态条件是指多个线程或进程对共享资源的访问顺序不确定导致结果的不可预测性。 简单易用互斥锁的使用相对简单可以通过加锁和解锁操作来控制对共享资源的访问。 缺点 性能开销互斥锁在多线程环境下会引入一定的性能开销。当多个线程竞争同一个锁时其他线程需要等待锁的释放这会导致一些线程的阻塞和等待降低系统的并发性能。 可能引发死锁如果在使用互斥锁时处理不当可能会发生死锁的情况。死锁是指多个线程或进程相互等待对方持有的资源导致所有线程都无法继续执行。 容易导致线程饥饿当某个线程持有互斥锁并长时间不释放时其他线程可能会一直等待锁的释放导致线程饥饿现象出现。 下一篇我们来讲解如何使用另一个方案解决这个问题

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

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

相关文章

上海网站开发团队成都做网站设计哪家最权威

2024年7月,国内领先的数据服务提供商景联文科技,成功入选艾瑞咨询发布的《2024年中国AI基础数据服务产业图谱》,这一荣誉不仅是对景联文科技在AI数据服务领域卓越成就的认可,也是对公司在未来发展中持续引领行业创新的高度期待。 …

网站域名自动跳转无锡宏腾网站建设

汉语为桥,联结一段中国缘分;故事为骨,分享一段精彩人生;文化为翼,共筑一个和美地球村。近日,由教育部中外语言交流合作中心主办、中文联盟承办的第二届“汉语桥”全球外国人汉语大会故事会启动。与世界深情…

做视频网站用哪个cms自媒体135网站免费下载安装

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P144-二叉树的前序遍历-Java题解🌏题目描述💡题解&#x1f30…

网站被安全狗拦截网站制作公司

文章目录 前言一、非流式输出设计二、stream流式输出设计三、手撸一个流式输出项目总结 前言 之前对接过OpenAi大模型的官方API,可以看到它有一个Stream参数,设置成true的时候就是流式的对话输出,现象就是一段一段的往外崩。 官方手册的地址…

做简历网站 知乎球队世界排名榜

大家好,我是阿赵。   可能很多朋友都知道,我刚进入游戏行业的时候,做的是美术工作,包括了建模、贴图、动画等,都做过。我对各种美术资源制作也都很熟悉,懂得很多制作的技术。但最后,我却没有继…

asp网站转wap网站做吉祥物的网站

难度级别:初级及以上 提问概率:55% 高阶组件并不能单纯的说它是一个函数,或是一个组件,在React中,函数也可以做为一种组件。而高阶组件就是将一个组件做为入参,被传入一个函数或者组件中,经过一定的加工处理,最终再返回一个组件的组合…

企业网站建设前网站目的需明确网站建设网站模板

738. 单调递增的数字 - 力扣(LeetCode) 这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。 我们可以将数字n转换为字符数组,然后从左到右扫描,寻找第一个违反单调递增条件的位置。一旦找到这样的位置,…

大淘客网站建设长安网站建设价格

centos系统环境搭建专栏🔗点击跳转 坦诚地说,本文中百分之九十的内容都来自于该文章🔗Linux:CentOS7安装MySQL8(详),十分佩服大佬文章结构合理,文笔清晰,我曾经在这篇文章…

银川迅雷网站建设炫酷企业网站

修改project.config.json配置文件 在 project.config.json 文件中,修改setting 下的 useCompilerPlugins 字段为 ["sass"], 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件:typescript、less、sass 修改之后可以将原.w…

有没有找客户的网站中山营销网站建设联系方式

联合主键用Hibernate注解映射方式主要有三种: 第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类…

百度关键词排名技术西安百度seo代理

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.8最新功能作了介绍,方便大家对比:(产品更新详情:…

做科技汽车的视频网站国外做仿牌网站

前面效果中使用比较low的方式实现了2.4的Gamma曲线;虽说后面加了点动画呈现效果,但也就是个过渡版;今天才基本符合需求的效果:1、还是基于WPF效果第一百七十八篇之贝塞尔曲线他来实现的:3个ListBox 3个LandmarkControl2、在LandmarkControl增加插点位事件View:LandmarkControl …

你喜欢的公司网站苏州做i网站的

目录 一、回旋函数 C 1.spinOnce() 2.spin() python 二、时间 C 1、时刻 2、持续时间 3、时间运算 4、设置运行频率 5、定时器 python 1、时刻 2、持续时间 3、时间运算 4、设置运行频率 5、定时器 一、回旋函数 C 1.spinOnce() 一般应用场景:* 在循环…

windows2008 iis 网站网页工具

之前一直用vncviewer,效果不佳,Microsoft Remote Desktop连ubuntu上的win虚机很好,多了几个工作环境,于是再度试一下用RDP连Ubuntu远程桌面。 几点注意事项 先安装xrdp: apt install xrdp 踢掉ubuntu上的登录用户,例…

免费制作二维码的网站写网站策划书需要注意什么

能够当所述线程中的一个被切换上下文(即,暂停),以检测可以找到?至于你的问题是否可能 - 它认为这是可能的。至少SystemTap(https://sourceware.org/systemtap/)可以做到这一点。probe scheduler.ctxswitch{if (target_pid ! 0&& next…

烟台网站搜索优化wordpress 5.0.4

诸多预测认为,2024 年将成为国内大模型产业应用爆发的元年。中关村科金作为领先的对话式 AI 技术解决方案提供商,自主研发的智能陪练产品,以学、练、考、培一体化的方式,为企业提供全方位的综合培训服务。 借助大模型技术方面的突…

兰州网站建设加王道下拉鞍山做网站的

Visitor设计模式访问元素方法的问题 GPT给出的答案寻找灵感前置声明Element层次的实例Visitor interface的声明Element interface的声明Element实际类的声明及实现实现一个Visitor客户端代码 实战测试结果 针对C来说,若要实现Visitor设计模式,则会面临循…

设计师去哪个网站找工作网站收录查询站长工具

一、const成员变量(常成员变量) 1、只能使用初始化列表对常成员变量进行初始化; 2、常成员变量可以被访问,但是不能被修改; 3、类中所有构造函数都必须在初始化列表对常成员函数进行初始化(包括拷贝构造,移动构造)。 声明&am…

餐饮网站建设规划书淘客推广计划

数组中插入相关练习 例题:定义一个方法 ,将数组{1,2,3}按照指定的格式进行拼接成一个字符串 /*例题:定义一个方法 ,将数组{1,2,3}按照指定的格式进行拼接成一个字符串, 格式定义如下[word1#word2#word3]. 思路分析&a…

要建一个优惠卷网站怎么做销售新品牌如何推广

题目描述 原题链接:LeetCode 27. 移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成…