在分布式系统中,etcd
是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。向 etcd
写入数据可以通过多种方式进行,常见的方式是使用 etcd
提供的 HTTP API 或者通过客户端库来进行操作。
目录
- 一、使用EtcdCtl工具来写入数据
- 1.1、设置环境变量(可选)
- 1.2、使用etcdctl put写入数据
- 1.3、通过etcdctl put -h来查看相关帮助信息
- 三、使用Java客户端写入数据
- 3.1、添加pom依赖
- 3.2、写入数据示例代码
一、使用EtcdCtl工具来写入数据
1.1、设置环境变量(可选)
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=http://localhost:2379
1.2、使用etcdctl put写入数据
etcdctl put <key> <value>
etcdctl put /config/db/host "192.168.1.100"
1.3、通过etcdctl put -h来查看相关帮助信息
etcdctl put -h
NAME:
put - Puts the given key into the store
USAGE:
etcdctl put [options] <key> <value> (<value> can also be given from stdin) [flags]
DESCRIPTION:
Puts the given key into the store.
When <value> begins with '-', <value> is interpreted as a flag.
Insert '--' for workaround:
$ put <key> -- <value>
$ put -- <key> <value>
If <value> isn't given as a command line argument and '--ignore-value' is not specified,
this command tries to read the value from standard input.
If <lease> isn't given as a command line argument and '--ignore-lease' is not specified,
this command tries to read the value from standard input.
For example,
$ cat file | put <key>
will store the content of the file to <key>.
以下是 etcdctl put -h
命令帮助信息的中文翻译::
---
### 名称:
`put` - 将给定的键值对写入存储中
### 用法:
```bash
etcdctl put [选项] <key> <value> (<value> 也可以通过标准输入给出) [标志]
```
### 描述:
将给定的键值对写入存储中。
- 当 `<value>` 以 `-` 开头时,`<value>` 会被解释为一个标志。
- 使用 `--` 进行工作区处理:
```bash
$ put <key> -- <value>
$ put -- <key> <value>
```
- 如果没有通过命令行参数给出 `<value>` 且没有指定 `--ignore-value`,该命令会尝试从标准输入读取值。
- 如果没有通过命令行参数给出 `<lease>` 且没有指定 `--ignore-lease`,该命令会尝试从标准输入读取租约。
例如:
```bash
$ cat file | put <key>
这条命令会将文件的内容存储到 <key>
中。
选项:
-h, --help[=false]
显示put
命令的帮助信息--ignore-lease[=false]
使用当前的租约更新键值对--ignore-value[=false]
使用当前的值更新键值对--lease="0"
租约 ID(十六进制格式),将其附加到键值对--prev-kv[=false]
在修改前返回之前的键值对
这个帮助信息提供了 etcdctl put
命令的所有选项和详细描述。put
命令用于将键值对存储到 etcd
中,支持从标准输入获取值,并且可以在命令中使用租约等参数。
### 二、使用go 客户端写入数据
#### 2.1、安装 Go 客户端库
#### 2.2、示例代码
```go
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)
}
}
// put 向etcd写入数据
func put(key, value string) {
response, err := cli.Put(context.Background(), key, value)
if err != nil {
log.Fatal(err)
}
log.Printf("write data success,response header is:%s", response.Header.String())
}
func main() {
defer cli.Close()
String key = "/config/db/host";
String value = "192.168.1.100";
put(key, value)
}
三、使用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/host";
String value = "192.168.1.100";
PutResponse result = kvClient.put(ByteString.copyFrom(key, StandardCharsets.UTF_8), ByteString.copyFrom(value, StandardCharsets.UTF_8)).sync();
System.out.println(result);