5. TTL & Lease 实现
etcd
中用来实现TTL
的机制叫Lease
,Lease
可以用来绑定多个key。Lease
的主要用法如下:
1 | 1. etcdctl lease grant 1900 // 申请一个租约,返回租约ID |
下面将解析其工作原理,首先将介绍其初始化过程,然后介绍创建、以及绑定key
以及过期的操作。
5.1 初始化
Lessor
是在创建EtcdServer
是进行初始化的:lease.NewLessor(...)
1 | minTTL := time.Duration((3*cfg.ElectionTicks)/2) * heartbeat // 首先计算最小TTL单元,为选举跳数的1.5倍*心跳间隔时间 |
完成了Lessor
的初始化后,随着进入kvstore.restore
的初始化,会伴随着恢复key
与lease
的映射关系。
1 | 当从 bucket`key`中获取所有key-val后,执行`restoreChunk`方法 |
5.2 Lease
创建
创建Lease
,最终会调用EtcdServer.LeaseGrant
方法。
1 | EtcdServer.LeaseGrant |
5.3 Lease
绑定key
在put
操作时通过添加参数--lease=326969472b0c5d08
即将key
绑定到lease
上。直接定位storeTxnWrite.put
方法:
1 | oldLease = tw.s.le.GetLease(lease.LeaseItem{Key: string(key)}) // 获取key之前绑定的`lease` |
5.4 Lease
过期
上文中介绍过在初始化Lease
后,会启动lessor.runLoop
任务:
1 | for { |