用户使用指南

注意事项

协议兼容性

支持的命令列表如下:

KV String类型

Command 说明
set √
setex √
get √
getset √
expire √
del √
ttl √
persist √
incr √
incrby √
exists √
mget √
decr √
decrby √
setnx √

Hash数据类型

Command 说明
hget √
hset √
hdel √
hgetall √
hmget √
hmset √
hexists √
hincrby √
hkeys √
hlen √
hclear 扩展命令
hexpire 扩展命令
httl 扩展命令
hpersist 扩展命令
hkeyexist 扩展命令

List数据类型

Command 说明
lindex √
llen √
lrange √
lset √
lpush √
lpop √
ltrim √
rpop √
rpush √
lclear 扩展命令
lexpire 扩展命令
lttl 扩展命令
lpersist 扩展命令
lkeyexist 扩展命令

Set 数据类型

Command 说明
scard √
sismember √
smembers √
srandmember √, 按顺序返回
sadd √
srem √
spop √
sclear 扩展命令
smclear 扩展命令
sexpire 扩展命令
sttl 扩展命令
spersist 扩展命令
skeyexist 扩展命令

Zset 数据类型

Command 说明
zscore √
zcount √
zcard √
zlexcount √
zrange √
zrevrange √
zrangebylex √
zrangebyscore √
zrevrangebyscore √
zrank √
zrevrank √
zadd √
zincrby √
zrem √
zremrangebyrank √
zremrangebyscore √
zremrangebylex √
zclear 扩展命令
zexpire 扩展命令
zttl 扩展命令
zpersist 扩展命令
zkeyexist 扩展命令

HyperLogLog数据类型

共享kv类型命令

Command 说明
pfadd √
pfcount √

GeoHash数据类型

共享zset类型命令

Command 说明
geoadd √
geohash √
geopos √
geodist √
georadius √
georadiusbymember √

scan命令

Command 说明
scan 仅支持扫描kv数据的key
advscan 扩展命令, 支持扫描其他类型数据的key列表
hscan √
sscan √
zscan √

说明:

扫表命令系列的用法和官方文档基本一致, 除了cursor的使用有所不同, cursor是字符串标示, 不一定是整型字符串, 扫表终结标示是空字符串. (如果需要只扫描其中的一个表, 那么判断终止的条件应该是看cursor的table前缀是否一致.)

scan的扫表仅支持kv类型数据, 并且cursor必须包含 namespace和table前缀. 可以使用 advscan 来扫描其他类型的key列表.

注意扫表结果的顺序, 跨分区的情况, 只保证分区内的数据顺序.

advscan命令语法

ADVSCAN cursor datatype [MATCH pattern] [COUNT count]
其中datatype为字符串, 可以为: KV, HASH, LIST, ZSET, SET

scan示例

127.0.0.1:12381> scan yz_cp_simple:test5:0000000100 match *1180* count 10
1) "test5:0000011807"
2)  1) "0000001180"
    2) "0000011180"
    3) "0000011800"
    4) "0000011801"
    5) "0000011802"
    6) "0000011803"
    7) "0000011804"
    8) "0000011805"
    9) "0000011806"
   10) "0000011807"

继续scan, 使用返回的cursor继续, 直到cursor返回空串:

127.0.0.1:12381> scan yz_cp_simple:test5:0000011807 count 1
1) "test5:0000011808"
2)  1) "0000011808"

advscan示例

> advscan yz_cp_simple:test5 kv count 10
1) "test5:0000000010"
2)  1) "0000000001"
    2) "0000000002"
    3) "0000000003"
    4) "0000000004"
    5) "0000000005"
    6) "0000000006"
    7) "0000000007"
    8) "0000000008"
    9) "0000000009"
   10) "0000000010"

> advscan yz_cp_simple:tt zset count 10
1) "tt:myzsetkey16"
2)  1) "myzsetkey0"
    2) "myzsetkey1"
    3) "myzsetkey10"
    4) "myzsetkey100"
    5) "myzsetkey11"
    6) "myzsetkey12"
    7) "myzsetkey13"
    8) "myzsetkey14"
    9) "myzsetkey15"
   10) "myzsetkey16"

hscan示例(SSCAN, ZSCAN类似):

> hmset yz_cp_simple:test5:hash name Jack age 33
OK

> hscan yz_cp_simple:test5:hash
1) "name"
2) 1) "age"
   2) "33"
   3) "name"
   4) "Jack"

> hscan yz_cp_simple:test5:hash  name
1) ""
2) (empty list or set)
> hscan yz_cp_simple:test5:hash  age
1) "name"
2) 1) "name"
   2) "Jack"

JSON扩展命令

支持大部分官方json扩展里面的命令: http://rejson.io/ , 其中几个命令说明如下:

Command 说明
json.del √
json.get √(不支持格式化等参数)
json.mkget √(等价于json.mget)
json.set √
json.type √
json.arrappend √
json.arrlen √
json.arrpop √
json.objkeys √
json.objlen √

注意json命令的path语法仅支持'.', 不支持'[ ]'形式

示例:

{
  "name": {"first": "Tom", "last": "Anderson"},
  "age":37,
  "children": ["Sara","Alex","Jack"],
  "fav.movie": "Deer Hunter",
  "friends": [
    {"first": "Dale", "last": "Murphy", "age": 44},
    {"first": "Roger", "last": "Craig", "age": 68},
    {"first": "Jane", "last": "Murphy", "age": 47}
  ]
}

path使用示例:
"name.last"          >> "Anderson"
"age"                >> 37
"children"           >> ["Sara","Alex","Jack"]
"children.1"         >> "Alex"
"fav\.movie"         >> "Deer Hunter"
"friends.1.last"     >> "Craig"

其他语言支持

使用go-sdk, 可以构建一个proxy支持redis协议, 其他语言使用redis协议客户端直接访问proxy即可

FAQ

Examples