import redis import time import math import threading import typing from redis import Redis class _WatchThread(threading.Thread): def __init__(self, target, args=(), kwargs={}): super(_WatchThread, self).__init__() self.func = target self.args = args self.kwargs = kwargs self.result = None def run(self): # …
连接客户端 config = clientv3.Config{ Endpoints: []string{"127.0.0.1:2379"}, // 集群列表 DialTimeout: 5 * time.Second, } // 建立一个客户端 if client, err = clientv3.New(config); err != nil { fmt.Println(err) return } put //PUT if putResp, err = kv.Put(context.TODO(), "/prefix/keys/k1", "v1", …
GORM 模型定义 模型实现了Scanner和Valuer接口
模型约定:
GORM 使用ID作为主键
如果不默认使用ID作为主键,应该使用标签primaryKey 指定
// 将 `UUID` 设为主键 type Animal struct { ID int64 UUID string `gorm:"primaryKey"` Name string Age int64 } 复合主键
type Product struct { ID string `gorm:"primaryKey"` LanguageCode string `gorm:"primaryKey"` Code …
在分布式系统中,排他性的资源访问方式,就叫做分布式互斥(Distributed Mutual Exclusion),而这种被互斥访问的共享资源,就叫做临界资源
分布式系统中解决分布式互斥主要有以下几种方式
集中式算法/中央服务器算法 我们引入一个协调者程序,得到一个分布式互斥算法。每个程序在需要访问临界资源时,先给协调者发送一个请求。 如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。 如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求,并给它发送授权消息。 拿到授权消息的程序,可以直接去访问临界资源。
集中式算法示意图:
如上图所示,协调者程序根 …