OnceDB扩展指令集

OnceDB by wx_15926 on 1570167280573


OnceDB

OnceDB基于Redis开发。将Redis从一个键值对内存数据库,改造成支持全文搜索,关系查询的NoSQL数据库。结合node.js驱动,可实现动态模式定义,在模块中动态扩展定义数据库表、字段。

安装

请自行从 http://onceoa.com 安装包中解压取出。
可执行文件: /onceai/oncedb/bin/oncedb-server.exe
Node.JS驱动: /onceai/oncedoc/svr/oncedb

License

oncedb-server.exe 和 oncedb node.js 驱动可免费使用,不限商业用途。

Redis参考

搜索指令说明

search [key pattern] [operator] [value]

搜索字符串类型的健值

准备测试数据

127.0.0.1:6379> set test1 'this is testing'
OK
127.0.0.1:6379> set test2 'this is article'
OK
127.0.0.1:6379> set test3 kris
OK
127.0.0.1:6379> set test4 10
OK
127.0.0.1:6379> set test5 100
OK

= 完全匹配搜索: 在指定pattern的key中搜索含有指定值的key和值

127.0.0.1:6379> search test* = kris
1) "test3"
2) "kris"

~ 模糊搜索: 搜索含有指定值的key及其值

127.0.0.1:6379> search test* ~ is
1) "test2"
2) "this is article"
3) "test1"
4) "this is testing"

<、>、<=、>= 比较搜索: 找到符合条件的数字

127.0.0.1:6379> search test* > 20
1) "test5"
2) "100"

hsearch [key pattern] field operator value ...

搜索hash类型的健值,operator同search,支持:=、~、>、<、>=、<=

准备测试数据

127.0.0.1:6379> hmset user:001 name kris email c2u@live.cn gender male
OK
127.0.0.1:6379> hmset user:002 name sunny age 24
OK

搜索age大于18的key和搜索到的值,并打印name字段

127.0.0.1:6379> hsearch user:* age > 18 name ~ ''
1) "user:002"
2) "24"
3) "sunny"

horsearch [key pattern] field operator value ...

搜索hash类型的健值,operator同search,支持:=、~、>、<、>=、<=

搜索age大于18的key和搜索到的值,并打印name字段

127.0.0.1:6379> horsearch user:* age > 18 name ~ ''
1) "user:002"
2) "24"
3) "sunny"

注* hsearch/horsearch 一次最多搜索到10000个hash结果

hsearchids [key pattern] [num of ids] [id1 id2 ..] [field] [operator] [value] ...

搜索hash类型的健值,operator同search,支持:=、~、>、<、>=、<=

搜索age大于18的key和搜索到的值,并打印name字段

127.0.0.1:6379> hsearchids user: 2 001 002 age > 18 name ~ ''
1) "user:002"
2) "24"
3) "sunny"

hselect [num of fields] field1 field2 ... key1 key2 key3 ...

批量打印出key的指定字段值,不含对应字段的显示null

127.0.0.1:6379> hselect 3 name email age user:001 user:002
1) "user:001"
2) "kris"
3) "c2u@live.cn"
4) (nil)
5) "user:002"
6) "sunny"
7) (nil)
8) "24"

hmgetall key1 key2 ...

批量打印出指定key的全部字段和值,以两个null分隔

127.0.0.1:6379> hmgetall user:001 user:002
 1) "user:001"
 2) "name"
 3) "kris"
 4) "email"
 5) "c2u@live.cn"
 6) "gender"
 7) "male"
 8) (nil)
 9) (nil)
10) "user:002"
11) "name"
12) "sunny"
13) "age"
14) "24"
15) (nil)
16) (nil)

hsetzsetkeys hashpattern hashid field keys zsetpattern score

设置hash字段的关键字,并按关键字创建有序集合,即为hash object的字段创建索引

127.0.0.1:6379> hsetzsetkeys user: 001 skills java,php skill: 10001
 1) 2

等效于

zadd skill:java 10001 001
zadd skill:php  10001 001
hset user:001 skills java,php

如果重设了hash的关键字索引:

127.0.0.1:6379> hsetzsetkeys user: 001 skills go,java skill: 20001
 1) 2

等效于下面的指令,java因已存在,重新设置不改变原来的score,2代表zrem/zadd的操作一共进行了2次

zrem skill:php 001         #在新的keys中不存在,删除原来索引
zadd skill:go  20001 001   #添加了新的关键字go,添加索引
hset user:001 skills go,java

hincrby key field increment [start]

增加 key 指定的哈希集中指定字段的数值。如果没有指定start值,则当该字段不存在时会被设置为0,否则被设置为 start + increment 的值

> hincrby article:00test show 1
"1"
> hincrby article:00test show 1 1000
"2"
> hincrby article:00test visit 1 1000
"1001"

有序数列

一种特殊列表,只存储数字,分为升序和降序两种。此数据类型可以用来存储考勤时间点,返回两个时间点之间的出勤记录。

lxrange key from to

从一个有序列表中查找出范围内的值

localhost:0>lrange list_bigtosmall 0 100000
1) 1111
2) 111
3) 31
4) 21
5) 11
6) 9
7) 7
8) 5
9) 3
10) 1

localhost:0>lxrange list_bigtosmall 2 9
1) 9
2) 7
3) 5
4) 3
localhost:0>

lxsearch key value

从一个有序列表中查找某值位置

lxsearch list_bigtosmall 111
1

lxinsert key value

创建一个小到大序列,返回新位置信息

lxinsert list2 111
11

从小到大序列,返回新位置信息

lxinsert list_smalltobig 111
11

lxinsertdesc key value

将数字插入从小到大序列

插入成功,返回新位置

localhost:0>lxinsertdesc list_bigtosmall 2
9

插入重复项目,-1表示添加失败

localhost:0>lxinsertdesc list_bigtosmall 111
-1

插入排序类型不符从大到小的key

localhost:0>lxinsertdesc list_smalltobiglocalhost:0> 111
ERR Wrong list sort

zexists key member1 member2 ...

获取sorts set中存在key的数量

localhost:0>zexists tags zbc
0

localhost:0>zexists tags zbc efg hi
3

zrangehmget/ zrevrangehmget

获取zset字段中对应hash值列表

用法

zrangehmget [zset key] [from] [to] [schema] [select fields ...]

** Test Case

  1. zset存放的都是数字类型
  2. zset存放的都是字符类型
  3. zset存放的是不存在的key
  4. zset存放的超长字符(不是ziplist)

制作测试数据

zadd range_hash 21 100 22 101 23 102 24 103 25 104 26 105 27 106 28 107

hmset article:102 id 002 name Kris age 30 num 28
hmset article:103 id 003 name Google age 40 num 39
hmset article:104 id 005 name Bye age 50 num 41.07
hmset article:105 id 006 name Baidu age 60 num 20.8

range_hash存在放文章ID

zrange range_hash 2 5
1) 102
2) 103
3) 104
4) 105

例1:从将range_hash中的key从article中全部取出,输出结果前三个位置、字段名、权重,key/val 交替打印,以两个回车结束;

zrangehmget range_hash 1 3 article:
1) 101      [member in zset, hash object is not exist]
2) 22       [socre]
3) 
4) 
5) 102      [member in zset]
6) 23       [score]
7) id       [filed]
8) 002      [value]
9) name
10) Kris
11) age
12) 30
13) num
14) 28
15) 
16) 
17) 103
18) 24
19) id
20) 003
21) name
22) Google
23) age
24) 40
25) num
26) 39
27) 
28) 

例2:如果key(good)不存在,输出一个空回车。输出结果不含字段名;且第 0,1 没有找到

zrangehmget range_hash 1 2 article: id good name
1) 101      [number in zset, hash object is not exist]
2) 22       [score]
3)          [id is empty]
4)          [good is empty]
5)          [name is empty]
6) 
7) 
8) 102
9) 23
10) 002
11) 
12) Kris
13) 
14) 

zrangehmgetbyscore/ zrevrangehmgetbyscore

按权重从指定zset字段敬老对应的hash信息,不输出位置信息

用法

zrangehmgetbyscore [zset key] [from] [to] [schema] [field...]

示例

zrangehmgetbyscore range_hash 23 23 article:
1) 102      [number in zset]
2) 23       [score]
3) id       [field]
4) 002      [value]
5) name
6) Kris
7) age
8) 30
9) num
10) 28
11) 
12) 

指定字段,直接输出结果,无字段输出空行

zrangehmgetbyscore range_hash 23 24 article: id good name
1) 102      [number in zset]
2) 23       [score]
3) 002      [id]
4)          [good]
5) Kris     [name]
6) 
7) 
8) 103
9) 24
10) 003
11) 
12) Google
13) 
14) 

zrangehmsum/ zrevrangehmsum

按range中的key获取hash列表,求字某字段值的和

用法

zrangehmsum zsetkey from to schema field1 [field2...]

示例

zrangehmsum range_hash 4 6 article: age num
1) 3        [the number of elements in zset]
2) 2        [the number of elements exist in article:*]
3) 2        [count of age]
4) 110      [sums of age]
5) 2
6) 61.870000000000005

zrangehmsumbyscore/ zrevrangehmsumbyscore

按分值从range中获取key,查找对应hash,求字段值的和

用法

zrangehmsumbyscore zsetkey score1 to score2 field [field...]

示例

zrangehmsumbyscore range_hash 25 25 article: age num
1) 1
2) 1
3) 1
4) 50
5) 1
6) 41.07

zhsearch / zrevhsearch

从zset中搜索对应的hash,条件同时满足

zhsearch zsetkey from to schema field operator value ...
zrevhsearch zsetkey from to schema field operator value ...

示例

zhsearch range_hash 0 10000 article: age > 18 name ~ ''
zrevhsearch range_hash 0 10000 article: age > 18 name ~ ''

zhorsearch / zrevhorsearch

从zset中搜索对应的hash,条件满足其一即可

zhorsearch zsetkey from to schema field operator value ...
zrevhorsearch zsetkey from to schema field operator value ...

示例

zhorsearch range_hash 0 10000 article: age > 18 name ~ ''
zrevhorsearch range_hash 0 10000 article: age > 18 name ~ ''

shmget

从 set 提取所有成员,并查找对应 hash

用法

shmget setKey schema [field1 field2...]

示例

准备数据

sadd user_article:newghost 102

提取对应 hash 的所有字段

shmget user_article:newghost article:

1) 102
2) id
3) 102
4) name
5) newghost
6) gender
7) male
8) poster
9) 赵五
10)
11)

提取对应 hash 的指定字段

shmget user_article:newghost article: name

1) 102
2) Kris
3)
4)

shmset

从 set 提取所有成员,设置对应 hash 的成员的值,返回受影响的hash值数量

用法

shmset zsetKey article: home China tel 021-7000000

示例

shmset user_article:newghost article: home China tel 021-7000000

1) 1

shmsum

从 set 提取所有成员,求对应 hash 成员中指定字段的和

用法

shmsum setkey schema field1 [field2...]

示例

shmsum user_article:newghost article: age num

1) 1        [the number of elements in zset]
2) 1        [the number of elements exist in article:*]
3) 1        [count of age]
4) 1        [sums of age]
5) 1
6) 1

上一篇: OnceDB简介 下一篇: OnceDB扩展指令使用示例说明