简介
Etcd 是 CoreOS 基于 Raft 协议开发的分布式键值对存储 (key-value peer store) ,设计用来可靠而快速的保存关键数据并提供访问。
核心功能
- KV数据库
- 服务发现
- 共享配置
- 协调分布式
- 分布式锁
概念
- ByteSepqence: 基础数据类型, 即实际存储为二进制数据
- 租约: 用于生成有效期的记录类型, 返回值为long类型ID, 可将kv或lock绑定租约, 在租约到期时, 关联数据将被清理
- kv: 键值对, k/v均为ByteSepqence类型
- lock: 分布式锁
- watch监听, 事件类型如下
- Option 选项, 例如 GetOption PutOption, 用于模糊查询、绑定租约的新增等
Java连接
pom依赖
1 2 3 4 5 6
| <dependency> <groupId>io.etcd</groupId> <artifactId>jetcd-core</artifactId> <version>0.7.7</version> </dependency>
|
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| Client client = Client.builder() .endpoints("http://127.0.0.1:2379") .build(); KV kvClient = client.getKVClient();
String key = "user"; String value = "Jamie"; ByteSequence keySequence = ByteSequence.from(key, StandardCharsets.UTF_8); ByteSequence valueSequence = ByteSequence.from(value, StandardCharsets.UTF_8);
Lease leaseClient = client.getLeaseClient();
long leaseId = leaseClient.grant(30).get().getID();
PutOption putOption = PutOption.builder().withLeaseId(leaseId).build(); PutResponse putResponse = kvClient.put(keySequence, valueSequence, putOption).get();
GetOption getOption = GetOption.builder().isPrefix(true).build();
List<KeyValue> kvs = kvClient.get(keySequence).get().getKvs(); System.out.println(kvs.size()); if (!kvs.isEmpty()) { String keyStr = kvs.get(0).getKey().toString(StandardCharsets.UTF_8); String valueStr = kvs.get(0).getValue().toString(StandardCharsets.UTF_8); System.out.println(keyStr); System.out.println(valueStr); }
Watch watchClient = client.getWatchClient(); WatchOption watchOption = WatchOption.builder().build();
watchClient.watch(keySequence, (response) -> { for (WatchEvent event : response.getEvents()) { switch (event.getEventType()) { case DELETE: KeyValue prevKV = event.getPrevKV(); KeyValue keyValue = event.getKeyValue(); break; case PUT: case UNRECOGNIZED: default: break; } } });
|
文档链接
__END__