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

成都网站建设公司招聘长春优化

成都网站建设公司招聘,长春优化,开什么加工厂不愁销路,主机屋怎么做网站缓存更新策略(数据一致) 更新策略 缓存更新是Redis为了节约内存而设计出来的机制,当我们向Redis插入太多数据时就会导致缓存中的数据过多,所以Redis会对部分数据进行更新即淘汰 低一致性需求(数据长久不发生变化): 使用内存淘汰机制,例如店铺类型信息的查询缓存,因为这部分…缓存更新策略(数据一致) 更新策略 缓存更新是Redis为了节约内存而设计出来的机制,当我们向Redis插入太多数据时就会导致缓存中的数据过多,所以Redis会对部分数据进行更新即淘汰 低一致性需求(数据长久不发生变化): 使用内存淘汰机制,例如店铺类型信息的查询缓存,因为这部分数据很长一段时间都不需要更新高一致性需求: 使用主动更新机制,写入缓存的时候需要设置超时时间例如店铺详情查询的缓存 主动更新实现 主动更新策略一般有如下几种方案 人工编码的三大问题 更新数据库后,删除缓存还是更新缓存? 更新缓存: 每次更新数据库都更新缓存,如果中间没有人执行查询操作(写多读少),那么这些对缓存的更新动做就是无效的(用户根本就不会去缓存中查询数据)删除缓存: 更新数据库时把缓存删掉,只有用户下次做查询操作时才会更新缓存(用户发现Redis中没有数据就会去查询数据库同时把查询到的数据写入缓存) 如何保证缓存与数据库的操作的同时成功或失败? 在单体系统中将缓存与数据库操作放在一个事务在分布式系统中利用TCC等分布式事务方案 先操作缓存还是先操作数据库? 虽然这二者都存在线程安全问题,但是由于删除缓存的操作很快,更新数据库的操作相对较慢, 所以先操作数据库再删除缓存出现线程安全问题的概率相对较低 实现商铺缓存与数据库一致 根据店铺Id查询店铺时如果缓存未命中则查询数据库将查询到的店铺信息写入Redis的同时设置缓存的超时时间 public static final Long CACHE_SHOP_TTL 30L;Override public Result queryById(Long id) {// 先从Redis中查询对应的店铺缓存这里的常量值是固定的前缀店铺idString shopJson stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY id);// 如果在Redis中查询到了店铺信息(String类型的JSON字符串)则转为Shop类型直接返回if (StrUtil.isNotBlank(shopJson)) {Shop shop JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}// 在Redis中没查询到对应的店铺缓存信息则根据店铺Id去数据库中查询店铺信息Shop shop getById(id);// 在数据库中也查不到就返回一个错误信息或者返回空(根据业务需求)if (shop null){return Result.fail(店铺不存在);}// 在数据库中查到了店铺信息,则将shop对象转为json字符串存入redis同时设置缓存的超时时间(如30分钟)String jsonStr JSONUtil.toJsonStr(shop);stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY id, jsonStr,CACHE_SHOP_TTL, TimeUnit.MINUTES);// 最终把查询到的店铺信息返回给前端return Result.ok(shop); }根据店铺Id修改店铺时先修改数据库再删除缓存来解决双写问题,更新和删除通过事务去控制, 业务逻辑我们依旧是写在Service层的实现类中 // 更新商铺信息 PutMapping public Result updateShop(RequestBody Shop shop) {// 直接将请求体中JSON格式的店铺信息写入数据库,这样在缓存有效期内,即使数据库中的店铺信息修改了,下次获取的还是之前缓存中的店铺信息shopService.updateById(shop);return Result.ok(); }// 更新商铺信息 PutMapping public Result updateShop(RequestBody Shop shop) {// 先将请求体中JSON格式的店铺信息写入数据库,再删除缓存,保证缓存中的店铺信息和数据库中的店铺信息一致性return shopService.update(shop); }public interface IShopService extends IServiceShop {Result update(Shop shop);}Override Transactional public Result update(Shop shop) {// 首先先判一下店铺Id是否为空if (shop.getId() null){return Result.fail(店铺id不能为空);}// 先修改数据库中对应的店铺信息updateById(shop);// 再将Redis中对应店铺的缓存删除stringRedisTemplate.delete(CACHE_SHOP_KEY shop.getId());return Result.ok(); }重启服务器进行测试,如访问餐厅时会将该餐厅的数据缓存到Redis中,然后使用POSTMAN携带JSON数据发送PUT请求http://localhost:8080/api/shop/更新餐厅信息 店铺的信息修改后就不会再出现在Redis缓存中了, 只有我们再次访问时才会去数据库中查询店铺信息并写入缓存 {area: 大关,openHours: 10:00-22:00,sold: 4215,address: 金华路锦昌文华苑29号,comments: 3035,avgPrice: 80,score: 37,name: yunqing茶餐厅,typeId: 1,id: 1 }
http://www.w-s-a.com/news/693556/

相关文章:

  • 济南城乡住房建设厅网站中国会议营销网站
  • 展示类网站cms网站seo方法
  • 莒县做网站的公司设计师网站模版
  • 顺德顺的网站建设备份的网站建设方案书
  • 如何做网站广告山东电商网站建设
  • 新手建什么网站赚钱吗WordPress搜狗不收录
  • 石家庄招聘哪个网站做的好网站设计建设公司服务商
  • 建设公司网站大概需要多少钱建站平台和网站开发的区别
  • 淄川区住房和城乡建设局网站门户网站模板源码下载
  • 室内设计公司 网站建设建站塔山双喜
  • 网站建设属于什么经营范围销售网站开发业务
  • 企业建站系统平台优秀网站作品截图
  • 杭州品牌网站制作wordpress多域名移动主题
  • 北京网站网站建设icp备案 网站备案
  • 长春网站公司哪家好电子商务网站建设作文
  • 网站开发php程序员网上店铺怎么运营
  • mip网站怎么做匹配h5婚纱摄影网站模板
  • 怎么注册建设公司网站域名历史价格查询
  • 爱站网seo工具包互联网软件开发工程师
  • 百度站长工具平台登录郑州seo规则
  • 财税公司做网站精品建站教程
  • 建设区块链网站区块链开发平台有哪些
  • 青年人爱看的网站ie显示wordpress网页不完整
  • 优惠券推广网站怎么做青岛正规网站建设哪家便宜
  • 怎么搞一个服务器建设网站wordpress页眉编辑
  • 计算机企业网站建设论文流量平台是什么意思
  • 成都建设网站公司哪家好上海有名的广告公司
  • 收录优美图片找不到了整站seo优化一般多少钱
  • 大型网站建设哪家好汉川网页设计
  • 深圳品牌策划公司推荐南昌网站怎么做seo