当前位置: 首页 > article >正文

【ETCD】【实操篇(六)】使用多种方式从ETCD集群中读取数据【Get keys by prefix】

本文将演示从 etcd 集群中获取以特定前缀(如 /config/db)开头的所有键值对。
ETCD技术架构图

在分布式系统中,etcd 是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。从 etcd 读取数据可以通过多种方式进行,常见的方式是使用 etcd 提供的 HTTP API 或者通过客户端库来进行操作。

目录

      • 一、使用EtcdCtl工具来读取数据
        • 1.1、设置环境变量(可选)
        • 1.2、使用etcdctl Get keys by prefix
        • 1.2'、格式化获取的结果
        • 1.3、通过etcdctl get -h来查看相关帮助信息
      • 二、使用go 客户端读取数据
        • 2.1、安装 Go 客户端库
        • 2.2、示例代码
      • 三、使用Java客户端读取数据
        • 3.1、添加pom依赖
        • 3.2、写入数据示例代码
      • 四、 总结

一、使用EtcdCtl工具来读取数据

1.1、设置环境变量(可选)
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=http://localhost:2379
1.2、使用etcdctl Get keys by prefix
etcdctl get <key> <value>  --prefix
etcdctl get /config/db  --prefix
1.2’、格式化获取的结果
D:\data>etcdctl get /config/db-w json --prefix
{"header":{"cluster_id":1090313446326588887,"member_id":2759271418354571410,"revision":4,"raft_term":2},"kvs":[{"key":"L2NvbmZpZy9kYi9ob3N0","create_revision":4,"mod_revision":4,"version":1,"value":"MTkyLjE2OC4xLjEwMA=="}],"count":1}

上面的示例我们把获取到结果以json形式进行输出

1.3、通过etcdctl get -h来查看相关帮助信息
D:\data>etcdctl get -h
NAME:
        get - Gets the key or a range of keys

USAGE:
        etcdctl get [options] <key> [range_end] [flags]

OPTIONS:
      --consistency="l"                 Linearizable(l) or Serializable(s)
      --count-only[=false]              Get only the count
      --from-key[=false]                Get keys that are greater than or equal to the given key using byte compare
  -h, --help[=false]                    help for get
      --keys-only[=false]               Get only the keys
      --limit=0                         Maximum number of results
      --order=""                        Order of results; ASCEND or DESCEND (ASCEND by default)
      --prefix[=false]                  Get keys with matching prefix
      --print-value-only[=false]        Only write values when using the "simple" output format
      --rev=0                           Specify the kv revision
      --sort-by=""                      Sort target; CREATE, KEY, MODIFY, VALUE, or VERSION

二、使用go 客户端读取数据

2.1、安装 Go 客户端库
2.2、示例代码
func init() {
	// 初始化etcd客户端
	var err error
	cli, err = clientv3.New(clientv3.Config{
		Endpoints:   []string{"127.0.0.1:2379"}, // 替换为你的etcd集群地址
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		log.Fatal(err)
	}
}
// getValueByPrefix 获取以key开头的数据
func getValueByPrefix(key string) {
	response, err := cli.Get(context.Background(), key, clientv3.WithPrefix())
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("get value by prefix data success,response header is:%s", response.Header.String())
	for _, kv := range response.Kvs {
		log.Printf("k:%s,value:%s,version:%s", string(kv.Key), string(kv.Value), kv.Version)
	}
}


func main() {
	defer cli.Close()
	String key = "/config/db";
	getValueByPrefix(key)
}

三、使用Java客户端读取数据

3.1、添加pom依赖
        <!-- https://mvnrepository.com/artifact/com.ibm.etcd/etcd-java -->
        <dependency>
            <groupId>com.ibm.etcd</groupId>
            <artifactId>etcd-java</artifactId>
            <version>0.0.24</version>
        </dependency>
3.2、写入数据示例代码
    KvStoreClient client = EtcdClient.forEndpoint("localhost", 2379).withPlainText().build();


        KvClient kvClient = client.getKvClient();
        LeaseClient leaseClient = client.getLeaseClient();
        LockClient lockClient = client.getLockClient();
        // 写入数据
        String key = "/config/db";
        RangeResponse rangeResponse = kvClient.get(ByteString.copyFrom(key, StandardCharsets.UTF_8)).asPrefix.sync();
        System.out.println(rangeResponse);

四、 总结

本文演示三种通过三种不同方式来从ETCD读取数据的操作,即分别演示了使用etcdCtl工具、Go客户端以及Java客户端读取以/config/db开头的所有key的值。


http://www.kler.cn/a/446541.html

相关文章:

  • HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化
  • Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程
  • 最新ubuntu20.04安装docker流畅教程
  • 免费GIS工具箱:轻松将glb文件转换成3DTiles文件
  • ES搜索原理
  • 华为云计算HCIE笔记01
  • 《商业模式2.0图鉴》读书笔记(如何构建创新驱动的商业模式:打破定律与重塑价值)
  • 使用Redis实现限流
  • 鸿蒙项目云捐助第十九讲云捐助百度智能名片识别
  • YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导
  • C语言学习-数组练习
  • OB删除1.5亿数据耗费2小时
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 《计算机组成及汇编语言原理》阅读笔记:p9-p27
  • 构建MacOS应用小白教程(打包 签名 公证 上架)
  • centos7下制作DockerFile 镜像
  • 牛客月赛107
  • 云消息队列 Kafka 版
  • 前端数据可视化库介绍Echarts、D3.js、Plotly、Matplotlib
  • 各种开源汇编、反汇编引擎的非专业比较
  • 电子应用设计方案-65:智能餐桌系统方案设计
  • Windows 无法启动 Redis服务(位于本地计算机上)错误 1067
  • 3349、检测相邻递增子数组 Ⅰ
  • SpringCloudAlibaba | Sentinel从基础到进阶
  • Three.js入门-Raycaster鼠标拾取详解与应用
  • 【蓝桥杯】43696.小数第n位