etcd中用lease租約實現過期。
簡單紀錄一下在etcd中利用lease實現kv過期的功能。
其實思路很簡單:
1.申請乙個lease,且給這個租約設定乙個ttl,比如設定這個ttl為1秒。
2.然後將這個lease與kv的操作關聯起來,那麼1s後這個就過期了。
需要注意的是:
1.centos裡的埠要放開。
**如下:
}//建立連線
client, err :=clientv3.new(config)
if err !=nil
//申請乙個租約
lease =clientv3.newlease(client)
//申請乙個5s的租約。
if leasegrantresp, err = lease.grant(context.todo(), 5); err !=nil
leaseid =leasegrantresp.id
//獲取kv,然後put kv,將之和租約關聯起來,實現過期的效果
kv =clientv3.kv(client)
if putresp, err = kv.put(context.todo(), "
/cron/lock/job1
", "", clientv3.withlease(leaseid)); err !=nil
fmt.println(
"寫入成功,當前revision是:
", putresp.header.revision)
//模擬資料,每1s去get一下資料,看5s後資料有無過期
for
if getresp.count == 0
fmt.println(
"還木有過期,當前資料
", getresp.kvs)
time.sleep(
1 *time.second)}}
由**,我們可以看到設定了乙個5s的ttl,那麼看一下效果吧:
ETCD 原始碼學習 lease 二
在 etcd 原始碼學習過程,不會講解太多的原始碼知識,只講解相關的實現機制,需要關注原始碼細節的朋友可以自行根據文章中的提示,找到相關原始碼進行學習。本文主要介紹 lessor 如果發現過期鍵,server 如何處理過期鍵的過程。lessor goroutine func le lessor ru...
etcd實現服務發現
etcd環境安裝與使用文章中介紹了etcd的安裝及v3 api使用,本篇將介紹如何使用etcd實現服務發現功能。服務發現要解決的也是分布式系統中最常見的問題之一,即在同乙個分布式集群中的程序或服務,要如何才能找到對方並建立連線。本質上來說,服務發現就是想要了解集群中是否有程序在監聽 udp 或 tc...
etcd實現分布式鎖
我們希望同一時間只有乙個執行緒能夠訪問到資源,但是分布式資源點之間的協調會非常麻煩,這個時候我們就需要乙個分布式鎖。etcd分布式鎖實現原理 1.利用租約在etcd集群中建立乙個key,這個key有兩種形態,存在和不存在,而這兩種形態就是互斥量。2.如果這個key不存在,那麼執行緒建立key,成功則...