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 { |