当前位置: 首页 > news >正文

怎么做招聘有哪些网站网站seo关键词优化技巧

怎么做招聘有哪些网站,网站seo关键词优化技巧,珠海网站公司哪家好,网站制作报价单缓存击穿(热点key): 部分key(被高并发访问且缓存重建业务复杂的)失效,无数请求会直接到数据库,造成巨大压力 1.互斥锁:可以保证强一致性 线程一:未命中之后,获取互斥锁,再查询数据库重建缓存,写…

缓存击穿(热点key): 部分key(被高并发访问且缓存重建业务复杂的)失效,无数请求会直接到数据库,造成巨大压力

1.互斥锁:可以保证强一致性

      线程一:未命中之后,获取互斥锁,再查询数据库重建缓存,写入缓存,释放锁

      线程二:查询未命中,未获得锁(已由线程一获得),等待一会,缓存命中

互斥锁实现方式:redis中setnx key value:改变对应key的value,仅当value不存在时执行,以此来实现互斥锁,防止出现锁得不到释放,设置有效期

public Shop queryWithMutex(Long id) throws InterruptedException {Shop shop;//实现互斥锁,解决缓存击穿String key=CACHE_SHOP_KEY+id;//1.从redis查询商铺缓存String shopJson=stringRedisTemplate.opsForValue().get(key);//2.判断是否存在,isNotBlank("")也为falseif(StrUtil.isNotBlank(shopJson)){//3.存在,返回商铺对象return JSONUtil.toBean(shopJson,Shop.class);}//判断命中的是否为空值if(shopJson != null && shopJson.isEmpty()){return null;}//4.实现缓存重建String lockKey=LOCK_SHOP_KEY+id;//4.1.获取互斥锁boolean isLock=tryLock("lockKey");//4.2.判断互斥锁是否成功if(!isLock){//4.3.未成功,等待Thread.sleep(50);//递归shop=queryWithMutex(id);}else{//4.4.成功,从mysql数据库中查询shop=getById(id);//5.判断是否存在if(shop==null){//缓存空值,处理缓存穿透stringRedisTemplate.opsForValue().set(key,"",CACHE_NULL_TTL,TimeUnit.MINUTES);return null;}//6.存在,向redis中缓存店铺数据stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shop),LOGIN_USER_TTL, TimeUnit.MINUTES);//7.释放互斥锁unlock(lockKey);}//8.返回return shop;}

2.逻辑过期:

      不存TTL,添加上逻辑过期时间,判断逻辑上有没有过期,以此来更新数据

      线程一:查询缓存,逻辑已过期,获取互斥锁,开启新线程,返回过期数据

               新线程:查询数据库并重建缓存,重置逻辑过期时间,释放锁

      线程二:查询未命中,未获得锁(已由线程一获得),返回过期数据

 private boolean tryLock(String key){//尝试获得互斥锁Boolean flag=stringRedisTemplate.opsForValue().setIfAbsent("key","1",LOCK_SHOP_TTL,TimeUnit.SECONDS);return BooleanUtil.isTrue(flag);//通过工具类将其转化为基本类型}private void unlock(String key){//删除锁stringRedisTemplate.delete("key");}

实现互斥锁相关的方法

//线程池,有10个线程private static final ExecutorService CACHE_REBUILD_EXECUTOR= Executors.newFixedThreadPool(10);

创建线程池

public Shop queryWithLogicalExpire(Long id) {//实现逻辑过期,解决缓存击穿(不存在缓存穿透问题)String key=CACHE_SHOP_KEY+id;String lockKey=LOCK_SHOP_KEY+id;//1.从redis查询商铺缓存String shopJson=stringRedisTemplate.opsForValue().get(key);//2.判断是否存在if(StrUtil.isBlank(shopJson)){//3.不存在,返回nullreturn null;}//4.存在,判断是否过期//将Json反序列化成RedisDate对象RedisData redisData=JSONUtil.toBean(shopJson,RedisData.class);Shop shop=JSONUtil.toBean((JSONObject)redisData.getData(),Shop.class);//5.过期if(LocalDateTime.now().isAfter(redisData.getExpireTime())){//6.缓存重建//6.1.获取互斥锁boolean isLock=tryLock(lockKey);//6.2.获取成功if(isLock){//开启新线程CACHE_REBUILD_EXECUTOR.submit(()->{try {saveShopToRedis(id, 20L);}catch(Exception e){throw new RuntimeException(e);}finally {//释放锁unlock(lockKey);}});}//6.3.获取失败return shop;}return shop;}

逻辑删除相关方法

http://www.jinmujx.cn/news/118806.html

相关文章:

  • 二手车为什么做网站地推十大推广app平台
  • 网站稳定期怎么做竞价推广渠道
  • 免费字体设计网站新闻头条最新消息今日头条
  • 做网站的相关规定国际新闻最新消息2022
  • 开发个蔬菜配送小程序的费用茂名百度seo公司
  • 做国外直播网站上海最新新闻事件今天国内
  • 网站开发经理具备什么知识有哪些网站可以免费发布广告
  • 足彩网站怎样做推广常见的网站推广方法有哪些
  • 为网站做一则广告中国宣布取消新冠免费治疗
  • 做个手机网站深度优化
  • 休闲食品网站建设策划书百度seo 优化
  • 网站在哪里设置关键字seo去哪里培训
  • 卢湾区网站建设制作网络市场调研
  • 成人本科自考报名入口官网自己怎么优化网站排名
  • 做胃镜需那好天津津门网站A宁波关键词优化排名工具
  • 男女做暧昧试看网站网站排名优化价格
  • 比尤果网做的好的网站湖州seo排名
  • 辛集专业网站建设广西seo关键词怎么优化
  • 寻找项目做的网站临沂seo公司稳健火星
  • 购买主机可以做网站吗营销型网站seo
  • ubuntu wordpress使用seo公司的选上海百首网络
  • 小程序招商加盟平台seo网站推广计划
  • wordpress前端会员中心梁水才seo优化专家
  • 甘肃疫情最新数据河南百度关键词优化排名软件
  • 电商网站功能百度识图在线使用
  • 校园网二级网站建设与管理banfa四川餐饮培训学校排名
  • 做网站推广微信叫什么网名好推广营销网络
  • 辽源做网站公司用html制作淘宝网页
  • b2b电子商务网站盈利模式关键词排名优化报价
  • 旅行社网站规划与建设友情链接网