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

普宁17网站一起做淘宝没内容的网站怎么优化

普宁17网站一起做淘宝,没内容的网站怎么优化,东莞搜索seo关键词,重庆住建网站文章目录 什么是缓存?为什么要使用缓存 如何使用缓存功能实现缓存模型和思路代码实现 缓存更新策略数据库缓存不一致解决方案代码实现 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如: 例1:Static fi… 文章目录 什么是缓存?为什么要使用缓存 如何使用缓存功能实现缓存模型和思路代码实现 缓存更新策略数据库缓存不一致解决方案代码实现 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如: 例1:Static final ConcurrentHashMapK,V map new ConcurrentHashMap(); 本地用于高并发例2:static final CacheK,V USER_CACHE CacheBuilder.newBuilder().build(); 用于redis等缓存例3:Static final MapK,V map new HashMap(); 本地缓存由于其被Static修饰,所以随着类的加载而被加载到内存之中,作为本地缓存,由于其又被final修饰,所以其引用(例3:map)和对象(例3:new HashMap())之间的关系是固定的,不能改变,因此不用担心赋值()导致缓存失效; 为什么要使用缓存 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力。 实际开发过程中,企业的数据量,少则几十万,多则几千万,这么大数据量,如果没有缓存来作为避震器,系统是几乎撑不住的,所以企业会大量运用到缓存技术; 但是缓存也会增加代码复杂度和运营的成本: 如何使用缓存 实际开发中,会构筑多级缓存来使系统运行速度进一步提升,例如:本地缓存与redis中的缓存并发使用 浏览器缓存主要是存在于浏览器端的缓存 应用层缓存可以分为tomcat本地缓存比如之前提到的map或者是使用redis作为缓存 数据库缓存在数据库中有一片空间是 buffer pool增改查数据都会先加载到mysql的缓存中 CPU缓存当代计算机最大的问题是 cpu性能提升了但内存读写速度没有跟上所以为了适应当下的情况增加了cpu的L1L2L3级的缓存 功能实现 缓存模型和思路 大体的思路是把每次读取数据时先从redis查询是否有数据如果没有数据就从数据库中查询然后把查询到的数据返回给前端并且把数据写入redis。但是这个模型仍然存在一些问题这些问题我们会在下面介绍。 代码实现 代码思路如果缓存有则直接返回如果缓存不存在则查询数据库然后存入redis。 Overridepublic 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 (shop null) [return Result,fail(店铺不存在!);}// 6.存在写AredisstringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop));// 7.返回return Result.ok(shop); }缓存更新策略 缓存更新是redis为了节约内存而设计出来的一个东西主要是因为内存数据宝贵当我们向redis插入太多数据此时就可能会导致缓存中的数据过多所以redis会对部分数据进行更新或者把他叫为淘汰更合适。 内存淘汰redis自动进行当redis内存达到咱们设定的max-memery的时候会自动触发淘汰机制淘汰掉一些不重要的数据(可以自己设置策略方式) 超时剔除当我们给redis设置了过期时间ttl之后redis会将超时的数据进行删除方便咱们继续使用缓存 主动更新我们可以手动调用方法把缓存删掉通常用于解决缓存和数据库不一致问题 数据库缓存不一致解决方案 由于我们的缓存的数据源来自于数据库,而数据库的数据是会发生变化的,因此,如果当数据库中数据发生变化,而缓存却没有同步,此时就会有一致性问题存在,其后果是造成了数据不一致。 解决方案 Cache Aside Pattern 人工编码方式缓存调用者在更新完数据库后再去更新缓存也称之为双写方案Read/Write Through Pattern : 由系统本身完成数据库与缓存的问题交由系统本身去处理Write Behind Caching Pattern 调用者只操作缓存其他线程去异步处理数据库实现最终一致 操作缓存和数据库时有三个问题需要考虑 如果采用第一个方案那么假设我们每次操作数据库后都操作缓存但是中间如果没有人查询那么这个更新动作实际上只有最后一次生效中间的更新动作意义并不大我们可以把缓存删除等待再次查询时将缓存中的数据加载出来 删除缓存还是更新缓存 更新缓存每次更新数据库都更新缓存无效写操作较多删除缓存更新数据库时让缓存失效查询时再更新缓存 如何保证缓存与数据库的操作的同时成功或失败 单体系统将缓存与数据库操作放在一个事务分布式系统利用TCC等分布式事务方案 应该具体操作缓存还是操作数据库我们应当是先操作数据库再删除缓存原因在于如果你选择第一种方案在两个线程并发来访问时假设线程1先来他先把缓存删了此时线程2过来他查询缓存数据并不存在此时他写入缓存当他写入缓存后线程1再执行更新动作时实际上写入的就是旧的数据新的数据被旧数据覆盖了。 代码实现 我们首先要在业务代码里添加redis逻辑缓存的过期时间。 Overridepublic 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 (shop null) [return Result,fail(店铺不存在!);}// 6.存在写redis,添加过期时间stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), timeout: 30L,TimeUnit.MINUTES);// 7.返回return Result.ok(shop); }插入代码修改当我们修改了数据之后然后把缓存中的数据进行删除查询时发现缓存中没有数据则会从mysql中加载最新的数据从而避免数据库和缓存不一致的问题 Overridepublic Result updateShop(Shop shop) {Long id shop.getId();if(idnull){return Result.fail(店铺id不能为空);}updateById(shop);//添加的更新后删除的代码stringRedisTemplate.delete(CACHE_SHOP_KEYid);return Result.ok();}
http://www.yutouwan.com/news/65847/

相关文章:

  • 合肥网站建设 乐云seo国外网站需要备案吗
  • 模特公司网站模板珠海建网站设计
  • 内蒙古高等级公路建设开发有限责任公司网站wordpress默认账号密码忘记
  • 济南外贸网站建设公司排名wordpress 网页制作
  • 网站空间购买注意事项代理网址域名
  • 沧州网站建设设计定制自助网站建设平台
  • 客户网站建设问题销售型网站建设
  • 设计接单兼职网站搜狗推广停止了吗
  • 网站地区分站系统网络媒体广告代理
  • 邯郸市网站建设多少钱wordpress.备份
  • 优化图片传网站常州网站建设流程
  • 免费企业网站建设流程wordpress淘宝发货插件
  • 网站开发客户需求域名网站购买
  • 做网站反应快的笔记本有哪些国内最新军事新闻
  • 视频弹幕网站怎么做一分钟赚一元的游戏
  • 西安企业网站建设模板国外网站网页设计
  • a4网站建设阿里云个人网站建设书
  • 好用的手机网站主页淄博网站建设与推广
  • 上海模板开发建站wordpress在新窗口打开
  • 游戏网站建设表格台州汇客网站建设
  • 青岛装饰公司十强排名网络优化的目的
  • 网站服务器怎么进做网站用旧域名好不好
  • 快速域名网站备案免费制作图片生成器
  • 网站开发 浏览器兼容性正规漫画网站开发流程
  • 建设团购网站河南政务服务网查二建证书
  • 网上哪里给公司做网站wordpress 页面 html代码
  • 有教做鱼骨图的网站吗房产网签是什么意思
  • 电子商务网站建设与管理的实践报告网页设计与制作教程免费
  • 大数据技术建设网站设计平面创意
  • 大航母网站建设好不好无为住建设局网站