跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[程序员] 请教分布式下如何用锁确保更新不丢失?


小天管理

已推荐帖子

场景是这样的,我想要用 golang 的 NewSingleHostReverseProxy 来代理一个第三方系统的接口,然后在拿到接口响应的时候记录这次调用到数据库(按照用户每天每个资源类型来统计次数),程序部署到多个节点上,请求记录表大概是这样子,我需要确保更新不丢失,数据表大概是下面这样,因为我没做过高并发和分布式场景下的业务,我想的是表里扩展 version 来用乐观锁来处理,更新失败的话重试,但是重试也不知道要重试几次,重试失败应该怎么办,请教大家最好用那种方式?

更新/插入逻辑(伪代码):

	err := dao.DB.Where("`uid` = ? AND `date` = ? AND `type` = ?", uid, today, type).FirstOrInit(&record).Error
	if err != nil {
		return err
	}
	if record.RequestKey != "" {
		record.RequestCount++
	} else {
		record.RequestCount = 1
	}
	return dao.DB.Save(&record).Error

表大致的字段(伪代码):

CREATE TABLE `sys_request_record` (
      `uid` varchar(32) NOT NULL COMMENT '用户 uid',
      `type`int(11) NOT NULL COMMENT '请求资源类型',
      `date` date NOT NULL COMMENT '日期',
      `request_count` int(11) NOT NULL DEFAULT '0' COMMENT '请求次数',
      `created_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `updated_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',
      `deleted_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '删除时间',
      PRIMARY KEY (`uid`,`type`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...