etcd全部key和简单操作

18 篇文章 0 订阅
4 篇文章 0 订阅

1:版本

D:\etcd-v3.5.5>etcdctl version
etcdctl version: 3.5.5
API version: 3.5

2: 获取全部key 保存在txt文件中

D:\etcd-v3.5.5>etcdctl get "" --from-key > keys.txt

3:put get del

./etcdctl put foo bar
# OK
./etcdctl del foo
# 1
./etcdctl get foo
D:\go\etcd-v3.5.5>etcdctl put foo bar
OK

D:\go\etcd-v3.5.5>etcdctl get foo
foo
bar

D:\go\etcd-v3.5.5>etcdctl del foo
1

4:前缀key  --prefix

D:\go\etcd-v3.5.5>etcdctl get --prefix global.rpc
global.rpc/7587866546848499521
127.0.0.1:8080
global.rpc/7587866546848499557
127.0.0.1:8081

Examples

./etcdctl put foo bar
# OK
./etcdctl del foo
# 1
./etcdctl get foo
./etcdctl put key val
# OK
./etcdctl del --prev-kv key
# 1
# key
# val
./etcdctl get key
./etcdctl put a 123
# OK
./etcdctl put b 456
# OK
./etcdctl put z 789
# OK
./etcdctl del --from-key a
# 3
./etcdctl get --from-key a
./etcdctl put zoo val
# OK
./etcdctl put zoo1 val1
# OK
./etcdctl put zoo2 val2
# OK
./etcdctl del --prefix zoo
# 3
./etcdctl get zoo2

https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
etcd 中实现争抢 key 的方式是通过使用租约(lease)和事务(transaction)的组合来实现的。下面是一个使用 Go 客户端的示例代码: ```go package main import ( "context" "log" "time" "go.etcd.io/etcd/clientv3" ) func main() { // 创建 etcd 客户端 cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"http://localhost:2379"}, // etcd 服务器的地址 DialTimeout: 5 * time.Second, }) if err != nil { log.Fatal(err) } defer cli.Close() // 创建一个租约 resp, err := cli.Grant(context.Background(), 10) // 租约的过期时间为 10 秒 if err != nil { log.Fatal(err) } // 使用租约创建一个争抢的 key key := "mykey" value := "myvalue" for { txn := cli.Txn(context.Background()) txn.If(clientv3.Compare(clientv3.CreateRevision(key), "=", 0)). Then(clientv3.OpPut(key, value, clientv3.WithLease(resp.ID))). Else() txnResp, err := txn.Commit() if err != nil { log.Fatal(err) } if txnResp.Succeeded { log.Println("Successfully acquired the key") break } else { log.Println("Failed to acquire the key, retrying...") time.Sleep(1 * time.Second) } } // 等待租约过期 time.Sleep(15 * time.Second) log.Println("Lease expired") // 删除 key _, err = cli.Delete(context.Background(), key) if err != nil { log.Fatal(err) } } ``` 上面的代码示例中,首先创建了一个 etcd 客户端。然后使用 `cli.Grant` 创建了一个租约,设置了租约的过期时间为 10 秒。接下来使用 `cli.Txn` 进行事务操作,通过比较 key 的创建修订版本是否为 0 来判断该 key 是否已经被其他节点争抢。如果 key 还未被争抢,则使用 `cli.OpPut` 来设置 key 的值,并将租约 ID 与其关联。如果 key 已经被争抢,则等待一秒后重试。当成功争抢到 key 时,输出日志并退出循环。最后,等待租约过期(15秒后),然后删除 key。 需要注意的是,上述示例只是一个简单的示例,并没有处理多个节点同时争抢同一个 key 的情况。在实际应用中,你可能需要使用分布式锁等机制来保证只有一个节点能够成功争抢到 key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值