Live & Life
Enjoy the life if you live
-- :-)
Enjoy the life if you live
-- :-)
思考记录点滴
Java 11 自 2018.9.25 发布以来,已经好几个月了,在还没正式 GA 之前都习惯性的去 java-countdown.xyz check 发布倒计时。Java 11 有比较多的新功能,而其中最吸引我的
对 Redis 的印象可能很多人都还只停留在 2.8 的阶段,一个结构化的内存存储(嗯,好像也没什么问题)。虽然距离 4.0 发布(2017.7.14)已经一年过去了,但相信很多人已经不再去关心 Redis 的新特性了,因为从 2.8 后的 Redis 已经足够好用了。😄
Redis 3.0 添加了集群的能力,4.0 添加了模块化能力,5.0 添加了流类型。如果说 3.0 和 4.0 添加的新特性对于一般用户来说无足轻重,那 5.0 新的流类型就不可忽视啦!
在没有 Stream 类型之前,其实 Redis 也支持各种类似于流的处理模式,例如 Fire and forget 模式的 Pub/Sub,阻塞队列 BLPOP,时间序列 zsort 存储,等各种方式都能模拟类似的场景,但却都觉得有点欠缺,终于,流类型成功的解决了以上所有问题,并能支持其他的常见使用场景。
说到流消息就不得不说到 Kafka 啦,我相信大家应该都听说过消息中间件 Kafka,至于 RocketMQ 或者 MetaQ 就不再赘述他们与 Kafka 的关系啦,Redis 作者在实现流类型时大量参考了 Kafka 中的概念,例如消费模型,流消 息的概念。当然所有的参考只局限于 Kafka 的文档,与 Kafka 的代码实现没有任何关系哦。
心动不如心动,那先一睹为快吧。
//library.googleapis.com/shelves/shelf1/books/book2
shelves/shelf1/books/book2
files
/source/py/parser.py
lowerCamel
形式
evidence
,weather
values
-> rowValues
//calendar.googleapis.com/users/john smith/events/123
https://calendar.googleapis.com/v3/users/john%20smith/events/12
name
display_name
, first_name
/
(bucket, object)
或 (user, album, photo)
的形式name
而不使用 id
name
的定义会非常混淆, 保留 name
使得开发者选择一个更合适的名字, 例如 display_name
, title
API Service Name | Collection ID | Resource ID | Collection ID | Resource ID |
---|---|---|---|---|
//storage.googleapis.com | /buckets | /bucket-id | /objects | /object-id |
API Service Name | Collection ID | Resource ID | Resource ID | Resource ID |
---|---|---|---|---|
//mail.googleapis.com | /users | /[email protected] | /settings | /customFrom |
Std.Method | HTTP Mapping | HTTP Request Body | HTTP Response Body |
---|---|---|---|
List | GET <collection URL> | N/A | Resource* list |
Get | GET <resource URL> | N/A | Resource* |
Create | POST <collection URL> | Resource | Resource* |
Update | PUT or PATCH <resource URL> | Resource | Resource* |
Delete | DELETE <resource URL> | N/A | google.protobuf.Empty** |
https://service.name/v1/some/resource/name:customVerb
POST
方法GET
PATCH
, 也许会使用其他方法, 但应该遵从 HTTP 语义GET
方法, 必须要求请求幂等, 不会有副作用
GET
:customVerb
结束body: "*"
, 应该将所有字段映射到请求消息上body
语句Method Name | Custom verb | HTTP verb | 备注 |
---|---|---|---|
Cancel | :cancel | POST | 取消一个未完成的操作 (构建,计算 等) |
BatchGet<plural noun> | :batchGet | GET | 批量获取多个资源 |
Move | :move | POST | 将资源从父节点移动到另外一个父节点 |
Search | :search | GET | 获取资源列表, 但不同于 List 语义 |
Undelete | :undelete | POST | 恢复一个已删除的资源. 建议做 30 天的保留期 |
Name | Type | Description |
---|---|---|
name | string | 包含相对资源名 |
parent | string | 对资源定义和 List/Create 请求, 该字段表示相对的父节点资源名 |
create_time | Timestamp | 创建时间 |
update_time | Timestamp | 最后一次更新时间, 在 create/patch/delete 时更新 |
delete_time | Timestamp | 删除时间, 如果支持资源保留 |
expire_time | Timestamp | 超时时间 |
start_time | Timestamp | 开始时间 |
end_time | Timestamp | 结束时间 (不管是否成功) |
time_zone | string | 时区名. IANA TZ name, 例如 "America/Los_Angeles", 时区列表 |
region_code | string | 地区的 Unicode country/region code (CLDR), 例如 "US" and "419",unicode_region_subtag |
language_code | string | BCP-47 语言码, 例如 "en-US". Unicode locale identifier |
mime_type | string | IANA 发布的 MIME 类型. media-types |
display_name | string | 实体的显示名字 |
title | string | 实体的官方名字, 例如公司名. 作为正式的 display_name. |
description | string | 实体描述 |
filter | string | List 方法的标准过滤参数 |
query | string | 等同于 List 方法的 filter, 不过用于 Search |
page_token | string | List 请求的分页符 |
page_size | int32 | List 请求的分页大小 |
total_size | int32 | 总数 |
next_page_token | string | 下一页的分页符, 如果为空则表示没有更多结果 |
order_by | string | 指定 List 请求的排序 |
request_id | string | 用于检测重复请求的唯一标识符 |
resume_token | string | 用于恢复一个流请求的不透明标识符 |
labels | map<string, string> | 资源标签 |
deleted | bool | 如果资源允许 undelete 操作, 则应该有被删除标示 |
show_deleted | bool | 如果资源允许 undelete 操作, 相应的 List 操作应该可以死指定显示已删除的资源 |
update_mask | FieldMask | 用于 Update 对资源进行部分更新操作. 该属相对于资源而非请求消息 |
validate_only | bool | 如果为 true, 则应该只验证该请求, 而不执行 |
package google.rpc;
message Status {
// 简单的错误码, 实际的错误码由 `google.rpc.Code` 定义
int32 code = 1;
// 面向开发者的错误信息. 应该解释错误原因并提可操作的解决办法
string message = 2;
// 附加的错误信息, 例如重试延迟或帮助链接
repeated google.protobuf.Any details = 3;
}
xxx.googleapis.com
calendar.googleapis.com
build.googleapis.com
和 buildresults.googleapis.com
同属于 Google Build API.proto
中定义的包名, 应该尽量与产品和服务名保持你一直google.watcher.v1
com
.net
等).proto
中的 service
, 避免与服务名冲突Calendar
Blob
File
Api
,Service
)来避免歧义VerbNoun
动词名字
的格式, 其中的每次应该为资源类型Request
和 Response
作为后缀, 除非
UpperCamelCase
CAPITALIZED_NAMES_WITH_UNDERSCORES
;
结束ENUM_TYPE_UNSPECIFIED
, 表示该值未被指定lower_case_underscore_separated_names
reason_for_error
-> error_reason
cpu_usage_at_time_of_failure
-> failure_time_cpu_usage
items_collected
-> collected_items
objects_imported
-> imported_objects
google.protobuf.Timestamp
和 google.protobuf.Duration
_time
或 _duration
作为后缀xxx_{time|duration|delay|latency}_{seconds|millis|micros|nanos}
格式2014-07-30T10:43:17Z
google.type.Date
和 google.type.TimeOfDay
_date
和 _time
作为后缀YYYY-MM-DD
例如 2014-07-30
HH:MM:SS[.FFF]
例如 14:55:01.672
xxx_{bytes|width_pixels|meters}
_count
作为后缀filter
API Name | Example |
---|---|
产品名 | Google Calendar API |
服务名 | calendar.googleapis.com |
包名 | google.calendar.v3 |
接口名 | google.calendar.v3.CalendarService |
源码目录 | //google/calendar/v3 |
API 名 | calendar |
方法名
Verb | Noun | Method name | Request message | Response message |
---|---|---|---|---|
List | Book | ListBooks | ListBooksRequest | ListBooksResponse |
Get | Book | GetBook | GetBookRequest | Book |
Create | Book | CreateBook | CreateBookRequest | Book |
Update | Book | UpdateBook | UpdateBookRequest | Book |
Rename | Book | RenameBook | RenameBookRequest | RenameBookResponse |
Delete | Book | DeleteBook | DeleteBookRequest | google.protobuf.Empty |
MAJOR.MINOR.PATCH
Version | Proto Package | Description |
---|---|---|
v1alpha | v1alpha1 | The v1 alpha release. |
v1beta1 | v1beta1 | The v1 beta 1 release. |
v1beta2 | v1beta2 | The second beta release of v1. |
v1test | v1test | An internal test release with dummy data. |
v1 | v1 | The v1 major version, general availability. |
v1.1beta1 | v1p1beta1 | The first beta release for minor changes to v1. |
v1.1 | v1 | The minor update to v1.1 release. |
v2beta1 | v2beta1 | The v2 beta 1 release. |
v2 | v2 | The v2 major version, general availability. |
1024*768
的显示器