时间轴 网站模板网站建设实习

张小明 2026/3/2 16:24:42
时间轴 网站模板,网站建设实习,长沙口碑好网站建设,电子商务入门总结#xff1a;本文系统介绍了Redis缓存的原理、应用场景及常见问题的解决方案。缓存通过数据交换缓冲区提高读写效率#xff0c;降低后端负载#xff0c;但会带来数据一致性和运维成本问题。文章详细阐述了缓存穿透、雪崩和击穿三大问题的成因及解决方案#xff1a;缓存穿…总结本文系统介绍了Redis缓存的原理、应用场景及常见问题的解决方案。缓存通过数据交换缓冲区提高读写效率降低后端负载但会带来数据一致性和运维成本问题。文章详细阐述了缓存穿透、雪崩和击穿三大问题的成因及解决方案缓存穿透可通过空对象缓存或布隆过滤器解决缓存雪崩可通过随机TTL和集群部署缓解缓存击穿可采用互斥锁或逻辑过期策略处理。同时文章提供了Java代码示例说明如何实现商户缓存查询和更新操作并比较了不同缓存更新策略的优劣为开发者提供了实用的Redis缓存实践指南。Redis的缓存缓存缓存cache就是数据交换的缓冲区是存贮临时数据的地方读写性能较高。在整个web开发阶段都可以添加缓存多级缓存浏览器缓存访问那些静态资源、应用层tomcat缓存直接在缓存里查到数据返回给前端、数据库缓存mysql会给id创建索引我们可以给索引缓存查询时候就可以在内存里快速检索、CPU缓存、磁盘缓存。缓存的作用降低后端负载提高读写效率降低响应时间缓存的成本数据一致性成本在读取数据时虽然从缓存里面读取很快但要是数据变更会导致数据库的数据还是旧的要解决一致性成本问题就会导致代码复杂度提高很多以后维护成本提高还有为了避免缓存雪崩等保证缓存的高可用缓存往往会搭建成集群模式提高了运维成本。添加Redis商户缓存客户端发起请求先在redis缓存中查找如果未命中则往数据库查找将其写到redis缓存中确保下次查询能在redis缓存中找到如果直接命中则将数据直接返回给客户端。Resource private StringRedisTemplate stringRedisTemplate; Override public Result queryById(Long id){ String key “cache:shop:”id; //1.从redis查询商铺缓存 String shopJson stringRedisTemplate.opsForValue().get(key); //2.判断是否存在 If(StrUtil.isNotBlank(shopJson)){ //3.存在直接返回 Shop shop JSONUtil.toBean(shopJson , Shop.class); return Result.ok(shop); } //4.不存在根据id查询数据库 Shop shop getById(id); //5.不存在返回错误信息 if(shopnull){ return Result.fail(“店铺不存在”); } //6.存在写入redis stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shop), timeout:30L , TimeUnit.MINUTES); //7.返回 return Result.ok(shop); }缓存更新策略内存淘汰、超时剔除、主动更新。低一致性需求使用内存淘汰使用Redis自带的内存淘汰机制。高一致性需求使用主动更新并以超时剔除作为兜底方案。主动更新策略有3种最常用的是cache aside pattern由缓存的调用者在更新数据库的同时更新缓存。操作缓存和数据库时需要考虑的3个问题1.删除缓存还是更新缓存删除缓存。更新数据库时删掉让缓存失效查询时再更新缓存。2.如何保证缓存和数据库的操作同时成功或失败单体系统将缓存和数据库操作放在一个事务分布式系统利用TCC等分布式事务方案3.先操作缓存还是数据库不论是先删除缓存再操作数据还是先操作数据库再删除缓存更优都可以而且它们都存在线程安全问题。但是先操作数据库再删除缓存出现线程安全问题的可能性更低因为操作缓存的速度是远远大于操作数据库的假设在查询缓存时可能缓存刚好失效未命中会往数据库查询查询数据库后在将数据写入缓存时另一个线程对数据库进行了更新操作然后删除缓存这时候可能本来查的是旧数据却可能查到新数据然后缓存中写入了更新后的数据但是出现这种线程安全问题概率很低所以先操作数据库再删除缓存出现安全问题更低。虽然这个可能性很低但是还是要解决这个安全问题的需要加上缓存超时时间即可。先更新再删除缓存操作步骤Override Transactional public Result update(Shop shop){ Long id shop.getId(); if(idnull){ return Result.fail(”商铺id不能为空”); } updateById(shop); stringRedisTemplate.delete(keyid); return Result.ok(); }Redis常见缓存问题缓存穿透缓存穿透指客户端请求的数据在缓存和数据库中都不存在的情况这样缓存永远都不会生效这些请求都会打到数据库。那有些人会恶意反复请求不存在的数据导致数据库崩溃常见的缓存穿透两种解决方案1.缓存空对象2.布隆过滤1、缓存空对象redis缓存和数据库都为空时请求到数据库后将null写入缓存。优点实现简单维护方便。缺点1.额外的内存消耗每请求一个就写一个null可以通过设置TTL生存时间来解决。2.可能造成短期的不一致写入null后这时传入一个有效的数据但是TTL还没过期就会导致读到的还是null可以通过设置足够短的TTL来缓解或者缓存修改写入一个数据就覆盖原本数据来解决。2、布隆过滤在客户端和redis之间会有一个布隆过滤器如果请求的数据存在则放行不存在则拒绝布隆过滤器其实算是算法是根据哈希的计算出数据库二进制来判断请求的数据是否存在如果是不存在那么一定不存在如果存在却不一定存在。优点内存占用少没有多余的key。缺点1.实现复杂2.存在误判的可能。所以呢开发过程中一般使用缓存空对象来的解决缓存穿透的问题。然后这两种方案其实是属于被动方案也就是已经穿透你了然后来想办法弥补。事实上呢不止这两种方案还可以采取主动方案来解决1.可以增加id的复杂度来避免被猜测id规律加强做好数据的基础格式校验2.加强用户权限校验3.做好热点参数的限流。缓存雪崩缓存雪崩指在同一时段大量的缓存key同时失效或者redis服务端宕机导致大量请求到达数据库带来巨大压力。缓存雪崩针对key同时失效的解决方案给不同的key的TTL添加随机值。缓存雪崩针对redis宕机的解决方案1.利用redis集群提高服务的可用性2.给缓存业务添加降级限流策略比如当整个服务全崩了请求是服务失败而不是全部压到数据库3.给业务添加多级缓存可以给nginx添加缓存、jvm建立缓存缓存击穿缓存击穿也叫热点key就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了无数的请求访问会在瞬间给数据库带来巨大压力。缓存击穿的解决方案1.互斥锁 2.逻辑过期1、互斥锁一个线程查询缓存未命中然后获取互斥锁来锁住这时如果别的线程也要来查询就会获取锁失败从而查询失败可能需要休眠过一会重试只有当拥有这个锁的线程在数据库查询完写入缓存后才会释放锁然后别的线程才可以访问缓存。互斥锁的优点1.没有额外的内存消耗、2.保持一致性、3.实现简单互斥锁的缺点1.线程需要等待性能受影响、2.可能有死锁的风险互斥锁是需要自己定义的锁它不同于synchronized Lock同步锁同步锁是按规定好的执行顺序执行比如要执行CA和B必须要先执行完才能执行C。而互斥锁是如A访问了数据别的就不能访问数据必须等A访问完释放锁。简单说就是互斥是通过竞争资源彼此不知道对方的存在是乱序的而同步锁是协调多个进程合作完成任务彼此知道对方的存在是有序的。互斥锁的实现获取锁使用redis的String类型的setnx命令就可以了原理是一样的比如setnx lock 1因为setnx就是当它设置的lock已经存在了值1是不能改变成别的值只有当它的值删了才能加进来也就是释放了锁才能进来新的线程。所以自定义互斥锁可以用setnx。为了严谨还要给锁设置有效期要是正常释放锁那就正常要是之间服务出问题没法正常释放如果没有有效期那锁就一直锁住是有问题的。2、逻辑过期一个线程查询缓存发现逻辑时间过期了然后获取互斥锁来锁住为了避免等待锁的过程太久会开启新的线程由这个线程来查询数据库重建缓存数据然后写入缓存重置过期时间释放锁。那么原本的那个线程做什么呢它就直接返回旧的数据。那么也就是说这个新的线程锁住了在更新数据这时要是再来一个线程来访问获取锁失败它就知道哎这个线程在更新数据那我就佛系一点就先用查到的旧数据。逻辑过期的优点1.线程无需等待、性能好逻辑过期的缺点1.不保证一致性、2.有额外的内存消耗、3.实现复杂逻辑过期的实现设置逻辑过期的实现方法假设缓存命中然后才能判断缓存是否过期将json反序列化为对象判断是否过期未过期直接返回对象过期需要缓存重建获取互斥锁判断是否获取锁成功如果成功开启独立线程实现缓存重建释放锁不论成功或失败都是返回过期的商铺信息。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

源码制作网站荆门做网站的公司

引言 在AI市场蓬勃发展的当下,不少企业面临正规AI产品厂家难寻的困境,这不仅影响项目推进,还可能造成资源浪费。据行业实践显示,企业在寻找厂家过程中,效率损失超30%。下面以东莞为例,深入分析这一现象。 现…

张小明 2026/1/21 16:37:22 网站建设

电子商务网站前台建设网页qq空间登陆在线登录入口

近日上海娃哈哈推出全新品牌 "沪小娃" 桶装水,说是"娃哈哈"商标授权已到期,且未能获得新的授权,被集团要求停止使用原有品牌,称此举是为了活下去的无奈之举,承认打造新品牌难度很大。普推知商标老…

张小明 2026/1/21 16:36:51 网站建设

昭通做网站ui网站开发

读研时最尴尬的时刻,莫过于找到一篇“命中注定”的文献,结果点开链接,迎面一个冷冰冰的“付费墙”(Paywall)。高昂的单篇下载费用让学生党望而却步。其实,学术界的“开放获取”(Open Access&…

张小明 2026/1/21 16:36:20 网站建设

做响应式网站的价格贵阳市城乡建设厅网站

在智能化变电站建设全面推进的背景下,消防安全的可靠保障成为电网稳定运行的重要环节。自主可控新一代消防信息传输控制单元,凭借全栈国产化、高性能、高可靠性的产品特性,为变电站消防系统提供了强有力的技术支撑。产品定位:变电…

张小明 2026/1/21 16:35:49 网站建设

当下 如何做网站赚钱短视频seo

weapp-adapter 终极指南:解锁微信小程序游戏开发新境界 【免费下载链接】weapp-adapter weapp-adapter of Wechat Tiny Game in ES6 项目地址: https://gitcode.com/gh_mirrors/we/weapp-adapter 你是否曾为微信小游戏开发中的兼容性问题而头疼?当…

张小明 2026/1/21 16:35:18 网站建设

龙岩网站设计做的好的网站欣赏

文章探讨了AI时代程序员的转型方向,包括成为超级个体、架构师或跨领域创新者。程序员应通过学习理论知识、掌握AI工具和综合实践三个步骤用AI武装自己。文章还推荐了从人工智能基础到大模型应用开发的必读书单,帮助程序员从理论到实践系统学习AI技术&…

张小明 2026/1/21 16:34:47 网站建设