当前位置: 首页 > 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 IService<Shop> {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.tj-hxxt.cn/news/49518.html

相关文章:

  • 如何查询一个网站是那家公司做的厦门seo网络优化公司
  • 辽宁住房建设厅网站新产品推广策划方案
  • 二手车网站模版售价seo技术培训岳阳
  • 软件下载平台凌哥seo技术博客
  • 代做课程设计的网站网址关键词查询网站
  • 凡科建站网中国疾控卫生应急服装
  • 餐饮公司企业网站源码seo分析及优化建议
  • 网站建设模板谷歌搜索引擎入口手机版
  • 商贸网站源码西地那非片吃了能延时多久
  • 网站功能的介绍正安县网站seo优化排名
  • 杭州做公司网站哪家好如何加入百度推广
  • 宣讲家网站两学一做google官网注册
  • 湛江网站建设方案咨询腾讯企点下载
  • 企业信息填报指南seo网站优化培训厂家报价
  • 祝贺网站改版企业网站免费制作
  • 自己做的网站首页变成符号了百度网讯科技有限公司官网
  • 十堰网站优化企业查询平台
  • 珠海专业医疗网站建设seo内容优化是什么
  • wordpress 制作瀑布流酒泉网站seo
  • 网站设计的流程关键词优化排名
  • 搭建网站程序如何注册网站免费注册
  • 广州网站建设建设给公司建网站需要多少钱
  • 做网站用笔记本电脑百度网盘官方下载
  • 济南企业营销型网站建设郑州百度推广公司地址
  • 南宁网站建设推广网络营销论文3000字
  • 手机做推广比较好的网站b2b网站平台
  • 做网站用php转html凡科官网免费制作小程序
  • 做任务赚钱的网站起什么名字好seo的中文含义
  • 做seo网站营销推广小红书推广引流软件
  • 市委宣传部职能优化大师官网登录入口