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

知名企业门户网站建设网站分析设计做的项目的过程

知名企业门户网站建设,网站分析设计做的项目的过程,深圳网站建设公司收费标准,大学网站建设宣传方案文章目录 前言技术积累查询缓存业务流程更新缓存业务流程 更新缓存问题解决方案写在最后 前言 当前的应用服务很多都有着高并发的业务场景#xff0c;对于高并发的解决方案一般会用到缓存来降低数据库压力#xff0c;并且还能够提高系统性能减少请求耗时#xff0c;比如我们… 文章目录 前言技术积累查询缓存业务流程更新缓存业务流程 更新缓存问题解决方案写在最后 前言 当前的应用服务很多都有着高并发的业务场景对于高并发的解决方案一般会用到缓存来降低数据库压力并且还能够提高系统性能减少请求耗时比如我们常用的redis缓存。当然一般业务在更新要刷新缓存但是如果采用的方式方法不对是会造成数据不一致的情况让用户拿到错误的缓存数据。今天就来讨论一下缓存与数据不一致的原因并提供解决方案。 技术积累 查询缓存业务流程 查询步骤 1、请求打到服务端首先到redis查看是否存在缓存 2、存在缓存直接返回前端不存在直接查询数据库 3、查询数据库存在写入缓存并返回不存在则写入布隆过滤器返回 注意在写入缓存的步骤需要加上分布式锁并设置未获取到锁立即失败的策略以防止高并发下多个线程争抢资源的情况。 为什么数据库没有会写入布隆过滤器 主要用来解决redis缓存击穿。 布隆过滤器的主要原理是使用一组哈希函数将元素映射成一组位数组中的索引位置。当要检查一个元素是否在集合中时将该元素进行哈希处理然后查看哈希值对应的位数组的值是否为1。如果哈希值对应的位数组的值都为1那么这个元素可能在集合中否则这个元素肯定不在集合中。 更新缓存业务流程 以上是常规的新增缓存的业务流程其步骤是 1、业务更新数据 2、刷新缓存 更新缓存问题 以上更新缓存有什么问题 如果并发量不高的情况下可能用户并不会发现缓存与数据库不一致的情况。 但是在高并发的情况下A线程新增数据后还没有来得及刷新缓存线程B又修改了数据库数据并刷新了缓存此时线程A由于运行太慢才拿着A的数据去刷新缓存这样就导致redis数据是A线程的数据与数据库B线程数据不一致。 当然有的同学可能会采用先删除缓存后更新业务数据库的策略比如线程A刚刚删除了缓存还没有更新数据库线程B访问了就立即会讲数据库数据加入缓存并返回然后A线程继续更新业务数据库。导致redis数据是B线程数据与数据库A线程数据不一致。 所以如果你的业务系统对缓存敏感就必须要解决缓存不一致的问题。 解决方案 1、redis延迟双删 1.1 具体的操作步骤 先删除缓存 再写数据库 休眠300毫秒 休眠时间根据自身业务情况进行增减 再次删除缓存。 1.2 设置缓存过期时间 从理论上来说给缓存设置过期时间是保证最终一致性的解决方案。所有的写操作以数据库为准只要到达缓存过期时间则后面的读请求自然会从数据库中读取新值然后回填缓存。 方案的缺点 结合双删策略缓存超时设置这样最差的情况就是在超时时间内数据存在不一致而且又增加了写请求的耗时。 2、异步更新缓存(基于订阅binlog的同步机制) 2.1 方案一手动监听mysql binlog消息队列mq 项目启动立即将缓存全量加入redis 我们不再关心业务数据跟新直接加上事务写入mysql数据库即可此时mysql会产生binlog日志 mq生产者监听mysql binlog发现binlog变动将具体的日志发送到mq相关队列 mq消费者监听到有消息立即消费并解析出具体的数据调用redis更新 2.2 方案二开源中间件canal 其实canal的思路与方案一差不多不同的是canal将自己伪装成一个mysql slave从节点。 大家应该都知道mysql主从同步的原理 当mysql slave连接到master节点时master会开一个binlog dump线程来监听binlog变化slave也会开启一个IO线程。当有数据变更的时候binlog dump线程就会将日志名字和同步位置等信息发送给slave IO线程slave IO线程会根据接收到的同步信息去master拉取binlog并保存到自己的relay log中继日志中。这个时候slave节点的sql 线程会不断地从relay log中继日志将数据写入数据库。 具体步骤 canal的服务端启动伪装为mysql slave注册到mysql 集群 canal服务端拿到binlog日志后会进行解析和封装为带有DML语句的对象数据 canal服务端创建线程将封装好的对象数据发送到消息队列mq canal客户端会监听具体的消息队列获取到具体的DML语句进行解析 canal客户端创建线程对redis进行操作 写在最后 在高并发的业务场景下redis与mysql数据库非常容易产生数据不一致的情况我们可以采用redis缓存延迟双删除策略达到数据的最终一致性也可以采用一部缓存更新自定义监听mysql binblog和采用canal开源中间件实现缓存的实时一致性方案。总的来说都是比较简单的而且都能够达到良好的效果。
http://www.huolong8.cn/news/18497/

相关文章:

  • 动易网站 首页模板修改宁波seo行业公司推荐
  • 学院网站规划方案网站制作 连云港
  • 郑州做网站哪里好镇江网站外包
  • 网站建设与管理维护的答案李建青湖州十大进出口公司
  • 做网站从哪里找货源为什么做网站会被批捕
  • 文章类网站选什么内容嘉兴定制型网站建设
  • 做地方的门户网站网站主页模板图片
  • 做网站费用是什么微信公共平台官网
  • 洪梅做网站知识库管理系统软件
  • 网站开发工程师薪资待遇律师事务所网站建设策划方案
  • 网页设计与网站建设考试名词解释河间网站网站建设
  • 诸城网站建设多少钱大连公司名称大全
  • 培训网站开发哪个好兰州网络推广哪家好
  • 网站导航页面模板seo策略
  • 北京网站制作案例施工企业会计分录大全
  • 构建网站无障碍建设北京土巴兔全包装修价格表
  • 中信建设有限责任公司内部网站图书网站怎么做
  • 网站如何做服务器授权书成都网站建设:思乐科技
  • 从零开始学网站建设建设厅网站合同备案在哪里
  • 制作钓鱼网站的费用重庆品牌餐饮加盟网站建设
  • wordpress里网站名称在哪里修改西夏区建设交通网站
  • 如何对网站做优化南桥做网站
  • 如何做淘宝的站外网站推广东莞企业为什么网站建设
  • 网站建设与网络编辑心得体会互联网技术的特征
  • 做视频网站用什么服务器配置手机wordpress主题
  • ps做的图怎么做成网站前端东莞大型企业
  • 骨干校建设专题网站网站流量 钱
  • 网站建设服务器维护内容2021年企业所得税优惠政策最新
  • 衡水网站设计怎么做东莞城市规划局
  • 网站制作加教程视频教程wordpress苏醒主题grace