日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

etcd中用lease租约实现过期

發布時間:2023/12/13 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 etcd中用lease租约实现过期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

etcd中用lease租約實現過期。

簡單紀錄一下在etcd中利用lease實現kv過期的功能。

其實思路很簡單:

1.申請一個lease,且給這個租約設置一個ttl,比如設置這個ttl為1秒。

2.然后將這個lease與kv的操作關聯起來,那么1s后這個就過期了。

需要注意的是:

1.centos里的端口要放開。

代碼如下:

/*
  author='du'
  date='2020/5/28 7:17'
*/
package main

import (
    "context"
    "fmt"
    "github.com/coreos/etcd/clientv3"
    "time"
)

func main() {
    var (
        client         *clientv3.Client
        lease          clientv3.Lease
        leaseGrantResp *clientv3.LeaseGrantResponse
        leaseId        clientv3.LeaseID
        kv             clientv3.KV
        putResp        *clientv3.PutResponse
        getResp        *clientv3.GetResponse
    )

    //客戶端配置
    config := clientv3.Config{
        Endpoints:   []string{"129.211.78.6:2379"},
        DialTimeout: 5 * time.Second,
    }

    //建立連接
    client, err := clientv3.New(config)
    if err != nil {
        fmt.Printf("連接失敗:%s", err)
        return
    }

    //申請一個租約
    lease = clientv3.NewLease(client)

    //申請一個5s的租約。
    if leaseGrantResp, err = lease.Grant(context.TODO(), 5); err != nil {
        fmt.Println(err)
        return
    }
    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 {
        return
    }
    fmt.Println("寫入成功,當前revision是:", putResp.Header.Revision)

    //模擬數據,每1s去get一下數據,看5s后數據有無過期
    for {
        if getResp, err = kv.Get(context.TODO(), "/cron/lock/job1"); err != nil {
            fmt.Println(err)
            return
        }
        if getResp.Count == 0 {
            fmt.Println("未獲取到數據,已經過期了。")
            break
        }
        fmt.Println("還木有過期,當前數據", getResp.Kvs)
        time.Sleep(1 * time.Second)
    }

}

由代碼,我們可以看到設置了一個5s的ttl,那么看一下效果吧:

總結

以上是生活随笔為你收集整理的etcd中用lease租约实现过期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。