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

多米诺网站建设服务专业seo优化费用

多米诺网站建设服务,专业seo优化费用,网页制作教程 百度网盘,室内设计效果图客厅背景 考试系统中,教师会在后台发布一场考试,考试会存储在MySQL和Redis里面,考试有时候是会出错的,我们需要后台修改,如果多个教师在后台并发修改(概率不大),可能会出现数据库缓存不…

背景

考试系统中,教师会在后台发布一场考试,考试会存储在MySQL和Redis里面,考试有时候是会出错的,我们需要后台修改,如果多个教师在后台并发修改(概率不大),可能会出现数据库缓存不一致的问题,我们需要解决一下,刚好联系一下这一块的知识

基础知识理论

四种解决办法:

  1. 先更新数据库,再更新缓存
  2. 先更新缓存,后更新数据库
  3. 先删除缓存,后更新数据库
  4. 先更新数据库,后删除缓存

这四种情况,都会出现缓存不一致的问题,但是第四种出现缓存不一致的情况概率上比较低,因为缓存的写入回远远快于数据库的写入,我们可以使用【先更新数据库+再更新缓存】的方式来解决数据库不一致的问题,为了确保万无一失,我们还可以加上一个过期时间。

但是有两个问题

  1. 我们需要保证先更新数据库+再更新缓存是一个原子操作,不然如果更新缓存失败了,导致缓存中的数据还是旧值
  2. 「先更新数据库,再删除缓存」的方案虽然保证了数据库与缓存的数据一致性,但是每次更新数据的时候,缓存的数据都会被删除,这样会对缓存的命中率带来影响。

对于第一个问题,解决办法是消息队列重试机制、订阅MySQL binlog,再操作缓存

对于第二个问题是,我们使用「更新数据库 + 更新缓存」的方式来实现,但是这个方案本身固有一些问题,解决办法是,分布式锁和过期时间

另外先删除缓存,再更新数据库的解决方案是延迟双删

实战-先更新数据库,后删除缓存

此种方案存在问题是两个操作不是原子性的,如何保证两个操作都能成功呢?

方案一:gin框架+消息队列

我们实现一个中间件

func Canal() gin.HandlerFunc {//封装成一个中间件,当我们更新考试的时候,会自动监测到return func(c *gin.Context) {c.Next()redisDB := global.GVA_REDISget, exists := c.Get("DeleteRedisKey")DeleteKey := get.(string)if exists {err := redisDB.Del(context.Background(), DeleteKey).Err()if err == redis.Nil {//无需删除c.Next()} else if err != nil {//删除失败,加入到redis异步队列中,再次删除addToDelayedQueue(context.Background(), redisDB, DeleteKey, time.Now().Add(10*time.Second))}else {global.GVA_LOG.Info("更新数据成功")}} else {zap.L().Info("redis中不存在该键,无需删除")}}
}

我们在继承这个中间件的接口中的使用c.Set方法传递要删除的redisKey,然后我们在上述中间件中使用c.Get方法来接收要删除的redisKey,然后加入到异步队列中删除

现在来模拟一下是否能够成功,项目启动之后,把redis停机,然后删除redis的key就会失败,然后该key就会加入延时队列

方案一:消息队列订阅binlog

里面有两个难点,一个是订阅binlog服务,一个是消息队列

 如何订阅binlog服务,我们使用阿里巴巴的canal ,支持Go语言,具体参考Golang通过alibabaCanal订阅MySQLbinlog_大杯无糖的博客-CSDN博客

接下来是用redis的zset实现一个异步消息队列

http://www.yayakq.cn/news/402398/

相关文章:

  • 网站建设与搜索引擎营销的关系网站开发宣传图片
  • seo推广公司 什么意思seo网站诊断文档案例
  • 最简单的静态网站检测asp网站死循环
  • ps做网站的时候分辨率是郑州官网seo技术
  • ssh实训做网站代码下载怎样做号网站优化
  • 上海城乡建设厅网站百度框架户一级代理商
  • 钟祥网站建设云图书馆平台网站建设
  • 电商网站建设公司淄博网络科技有限公司
  • 网站上线需要怎么做外贸网址建站
  • 中企动力建设网站怎么样wordpress调用缩略图尺寸
  • 如何制作网站视频教程手机怎么网站建设
  • 深圳交易网站建设比较好的公关公司
  • 织梦淘宝客网站个人介绍网页模板免费下载
  • 网站公司用什么服务器网站建设深圳赶集网
  • 域名建议网站企业自建站案例
  • 网上接网站开发不给钱怎么办做网站的前途怎么样
  • 品网站建设公司排名信管女生做网站开发
  • 创意建设机械网站重庆江北网站建设公司
  • 德宏网站制作网站的工作简报怎么做
  • 做直播网站的上市公司用手机制作自己的网站
  • 建设银行不会自动弹出网站页面网站建设
  • 网站后台更新图片关键词排名优化易下拉霸屏
  • 网站开发建设方案的主要内容包括网页设计师培训需要多少钱
  • 网站界面设计的原则小程序开发平台好牌子推荐
  • 安徽网站建设商业营销厅装修公司
  • 网站建设培训招生机械网站优化
  • vs2017可以做网站吗建网站莱阳哪家强?
  • 滴滴优惠券网站怎么做土特产网站模板 织梦
  • 大淘客网站如何做制作山东定制网页建站
  • 群辉域名登录wordpressseo搜索引擎优化主要做什么