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

着力规范网站集约化建设wordpress 留言插件

着力规范网站集约化建设,wordpress 留言插件,电商网站开发的主流技术,个人网站 可以做论坛吗目录 一、什么是缓存双写一致性呢#xff1f; 1.1 双检加锁机制 二、数据库和缓存一致性的更新策略 2.1、先更新数据库#xff0c;后更新缓存 2.2 、先更新缓存#xff0c;后更新数据库 2.3、先删除缓存#xff0c;在更新数据库 延时双删的策略#xff1a; 2.4.先更新数…目录 一、什么是缓存双写一致性呢 1.1 双检加锁机制 二、数据库和缓存一致性的更新策略 2.1、先更新数据库后更新缓存 2.2 、先更新缓存后更新数据库 2.3、先删除缓存在更新数据库 延时双删的策略 2.4.先更新数据库在删除缓存常用 2.5、实际中是不可能做到强一致性的那么怎么做到最终一致性呢 三、canal中间件 3.1   canal工作原理 3.2 MySQL的主从复制  一、什么是缓存双写一致性呢 如果redis中有数据 需要和数据库中的值相同 如果redis中无数据 数据库中的值是最新值且准备回写redis 缓存按照操作分 只读缓存    就没有同步这一说法了读写缓存 同步直写策略   比如比较紧急的事情冲了vip得立即生效 写数据库后也同步写 redis 缓存缓存中的数据和数据库中的一致对于读写缓存来说要想保证缓存和数据库中的数据一致 异步缓写策略   一般都是用这种 正常业务运行中mysql数据变动了但是可以在业务上容许出现一定时间后才作用于redis比如仓库、物流系统异常情况出现了不得不将失败的动作重新修补有可能需要借助kafka或者RabbitMQ等消息中间件实现重写重试 1.1 双检加锁机制 加锁前从redis中查一次加锁后再查一次。 多个线程同时去查询数据库的这条数据那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。 其他的线程走到这一步拿不到锁就等着等第一个线程查询到了数据然后做缓存。 后面的线程进来发现已经有缓存了就直接走缓存。  二、数据库和缓存一致性的更新策略 一般都是以MySQL为准。 给缓存设置过期时间定期清理缓存并回写是保证最终一致性的解决方案。 我们可以对存入缓存的数据设置过期时间所有的写操作以数据库为准对缓存操作只是尽最大努力即可。也就是说如果数据库写成功缓存更新失败那么只要到达过期时间则后面的读请求自然会从数据库中读取新值然后回填缓存达到一致性切记要以mysql的数据库写入库为准 2.1、先更新数据库后更新缓存 异常一        回写失败会出现脏数据 异常二       高并发下会出现数据覆盖 2.2 、先更新缓存后更新数据库 我们一般是不用这种的因为我们一般都把MySQL作为根基 异常       高并发下会出现数据覆盖 2.3、先删除缓存在更新数据库 当有两个线程一个线程负责删Redis修改MySQL  另一个来查找redis 如果数据库更新失败或者不及时就会发生异常 1请求A进行写操作删除redis缓存后工作正在进行中更新mysql......A还没有彻底更新完mysql还没commit 2请求B开工查询查询redis发现缓存不存在(被A从redis中删除了) 3请求B继续去数据库查询得到了mysql中的旧值(A还没有更新完) 4请求B将旧值回写redis缓存 5请求A将新值写入mysql数据库  上述情况就会导致不一致的情形出现。  时间 线程A 线程B 出现的问题 t1 请求A进行写操作删除缓存成功后工作正在mysql进行中...... t2 1 缓存中读取不到立刻读mysql由于A还没有对mysql更新完读到的是旧值 2 还把从mysql读取的旧值写回了redis 1 A还没有更新完mysql导致B读到了旧值 2 线程B遵守回写机制把旧值写回redis导致其它请求读取的还是旧值A白干了。 t3 A更新完mysql数据库的值over redis是被B写回的旧值 mysql是被A更新的新值。 出现了数据不一致问题。 总结一下 先删除缓存再更新数据库 如果数据库更新失败或超时或返回不及时导致B线程请求访问缓存时发现redis里面没数据缓存缺失B再去读取mysql时 从数据库中读取到旧值还写回redis导致A白干了o(╥﹏╥)o 改怎么解决呢 延时双删的策略 这个删除该休眠多久呢 因为这种同步淘汰机制加上了sleep导致MySQL吞吐量降低怎么办 2.4.先更新数据库在删除缓存常用 这一种方法的弊端相对比较少 时间 线程A 线程B 出现的问题 t1 更新数据库中的值...... t2 缓存中立刻命中此时B读取的是缓存旧值。 A还没有来得及删除缓存的值导致B缓存命中读到旧值。 t3 更新缓存的数据over 先更新数据库再删除缓存 假如缓存删除失败或者来不及导致请求再次访问redis时缓存命中 读取到的是缓存旧值。 2.5、实际中是不可能做到强一致性的那么怎么做到最终一致性呢 需要用到消息队列kafka或者RabbitMQ 但是还是都需要是先更新数据库再删除缓存这样最多也就是数据暂时不一致不会导致雪崩、击穿啥的出现。 1 可以把要删除的缓存值或者是要更新的数据库值暂存到消息队列中例如使用Kafka/RabbitMQ等。 2 当程序没有能够成功地删除缓存值或者是更新数据库值时可以从消息队列中重新读取这些值然后再次进行删除或更新。 3 如果能够成功地删除或更新我们就要把这些值从消息队列中去除以免重复操作此时我们也可以保证数据库和缓存的数据一致了否则还需要再次进行重试 4 如果重试超过的一定次数后还是没有成功我们就需要向业务层发送报错信息了通知运维人员。 三、canal中间件 能够立刻感知到MySQL改变的有一个MySQL的binlog文件 我们需要一种技术来充当两者之前的吹哨人 这里有阿里研发的一种中间件canal 3.1   canal工作原理 1. canal 模仿MySQL的dump协议假装自己是MySQL的slave向MySQL发送dump协议 2. MySQLmaster收到dump请求之后便会给canal推送自身bin  log 变化给canal 3. cannal收到bin  log 消息并解析。 3.2 MySQL的主从复制  MySQL的主从复制将经过如下步骤 1、当 master 主服务器上的数据发生改变时则将其改变写入二进制事件日志文件中 2、salve 从服务器会在一定时间间隔内对 master 主服务器上的二进制日志进行探测探测其是否发生过改变 如果探测到 master 主服务器的二进制事件日志发生了改变则开始一个 I/O Thread 请求 master 二进制事件日志 3、同时 master 主服务器为每个 I/O Thread 启动一个dump  Thread用于向其发送二进制事件日志 4、slave 从服务器将接收到的二进制事件日志保存至自己本地的中继日志文件中 5、salve 从服务器将启动 SQL Thread 从中继日志中读取二进制日志在本地重放使得其数据和主服务器保持一致 6、最后 I/O Thread 和 SQL Thread 将进入睡眠状态等待下一次被唤醒
http://www.yutouwan.com/news/264561/

相关文章:

  • 哪个网站上可以做初中数学题wordpress文章归档插件
  • 网站打开速度慢跟什么有关系南通优普网站建设团队
  • 重庆网站建设公司费用wordpress wiki使用
  • 电商网站建设赏析网站关键词seo推广公司哪家好
  • 蓬莱有做网站的吗wordpress oss upload
  • 建ic网站wordpress调用用户
  • 专门建站的公司免费商标注册查询
  • 网站定制一般价格多少网站正能量免费下载
  • 做pc端网站代理商阿里云安装wordpress
  • 资阳建设局网站软件工程的出现是由于
  • 大会的网站架构用笔记本做网站服务器
  • 自己建网站需要备案吗网上定做相册
  • 德州市建设工程质量监督站网站手机有软件做ppt下载网站有哪些内容吗
  • 可以把网站服务器放在哪里织梦网站怎么做seo优化
  • 和15岁女儿做很舒服网站爱采购卖家版下载
  • 女生冷门又高薪的职业南京seo公司哪家好
  • 网站建设优化推广安徽招标
  • 永久免费素材网站深圳网页制作哪家好
  • 网站建设地位wordpress 小工具 插件
  • 小门户网站模板阿里云 企业网站选哪种
  • 网站管理包括百度联盟怎么做网站
  • 网站后台英文专业简历制作平台
  • 阿里云做网站麻烦吗网站国际推广
  • 网站制作将栏目分类百姓网地址怎么创建
  • 乌市正规网站建设学网站开发好吗
  • 网站建设管理员工工资多少钱网盘做扩大网站服务器
  • 网站dns设置线上销售培训班课程
  • 模仿网站 素材哪里来企业宣传册设计与制作
  • 制作网站源码中企动力科技股份有限公司西安分公司
  • wordpress小工具用不徐州seo外包