当前位置:   article > 正文

FarelDB 第7章 第15讲 键值对命令 键操作类(key) 之 SCAN cursor

scan cursor

FarelDB 键值对命令 键操作类(key) 之 SCAN cursor

SCAN 返回当前使用的kv数据表中符合匹配模式的键的元素数组,下一次游标即为当前游标加返回元素个数。

语法

FarelDB 127.0.0.16800 > SCAN cursor [MATCH pattern] [COUNT count]

cursor - 游标。
pattern - 匹配的模式。
count - 可选,用于指定每次迭代返回的 key 的数量,默认值为 10 。

匹配模式:
*:通配任意多个字符
?:通配单个字符
[]:通配括号内的某一个字符
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

返回值

数组列表。

命令实例

打开一个命令行窗口,启动FarelDB服务端,再打开一个命令行窗口,启动FarelDB客户端,输入以下命令:

FarelDb localhost:6800 > mset key1 value1 key2 value2 key3 value3 key4 value4 key5 value5 key6 value6 key7 value7 key8 value8 key9 value9 key10 value10 key11 value11 key12 value12
success
(1 ms)
FarelDb localhost:6800 > SCAN 0 MATCH key* COUNT 5
1) key1
2) key10
3) key11
4) key12
5) key2
(1 ms)
FarelDb localhost:6800 >
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

API 说明

函数原型

FarelDbKvRes* queryKv(std::string Command)

输入参数说明

输入参数描述可选
CommandSCAN cursor [MATCH pattern] [COUNT count] 语法字符串

返回参数说明

调用成功返回

返回参数含义
FarelDbKvRes->errorInfos.size()0调用成功,无错误信息

调用异常返回

返回参数含义
FarelDbKvRes->errorInfos.size()大于0调用失败,errorInfos对象数组包含1个或多个错误信息
FarelDbKvRes->errorInfos[0]->resCode大于0的数值调用失败,返回错误代码
FarelDbKvRes->errorInfos[0]->resInfo非空字符串调用失败,返回错误信息字符串

返回数据获取方法

FarelDbKvRes* queryKv(std::string stringCommand)接口调用成功后,接口将不同种类命令需要返回的不同种类数据集存储在FarelDbKvRes的众多不同子类对象中返回给调用者,调用者可以根据不同的命令类型将接口返回的父类FarelDbKvRes指针转换成具体存储返回数据集的子类对象指针来取得数据集,具体获取方法,请参考下面的样例代码。

时间复杂度

O(logN)

样例代码

#include <iostream>
#include <functional>
#include <memory>
#include "fareldb_connection.h"
using namespace std;
using namespace fareldb_connection;
 
int main(int argc,char *argv[])
{ 	
	//创建连接
	FarelDbConnection  conn;

	//连接
	tuple<int, string> resConn = conn.connect("127.0.0.1", 6800, "root", "root");
	
		//连接失败
	if (0 != get<0>(resConn))
	{
		printf("连接失败,错误代码:%d : 错误信息:%s\n", get<0>(resConn), get<1>(resConn).c_str());
		return;
	}

	//SET key value (一次增加多个KV) 
	string kvCommand = u8"mset key1 value1 key2 value2 key3 value3 key4 value4 key5 value5 key6 value6 key7 value7 key8 value8 key9 value9 key10 value10 key11 value11 key12 value12";//命令需要使用utf8字符串

	//执行增加多个新的KV的命令
	std::shared_ptr<FarelDbKvRes> res(conn.queryKv(kvCommand));

	//判断执行命令返回是否失败
	if (res->errorInfos.size() > 0)
	{
		printf("调用失败,错误代码:%d  ; 错误信息: %s \n", res->errorInfos[0]->resCode, res->errorInfos[0]->resInfo.c_str());
		return;
	}

	//迭代数据库中的数据库键 
	kvCommand = u8"SCAN 0 MATCH key* COUNT 5";//命令需要使用utf8字符串
	//执行命令
	res = std::shared_ptr<FarelDbKvRes>(conn.queryKv(kvCommand));

	//判断执行命令返回是否失败
	if (res->errorInfos.size() > 0)
	{
		printf("调用失败,错误代码:%d  ; 错误信息: %s \n", res->errorInfos[0]->resCode, res->errorInfos[0]->resInfo.c_str());
		return;
	}

	//调用成功,不同命令返回不同类型数据集,不同的数据集分类存储在不同子类之中
	if (FARELDB_KV_RES_STRINGLIST == res->getType()) // SCAN_cursor 返回数据存储在子类(FARELDB_KV_RES_STRINGLIST)中
	{
		// 父类智能指针转子类智能指针,通过子类获取命令返回数据集 
		std::shared_ptr<FarelDbKvResStringList> resData(std::dynamic_pointer_cast<FarelDbKvResStringList>(res));
		int findMatchCnt = resData->vals.size();
		if (findMatchCnt >0)
		{ 
			printf("%s  迭代kv数据表中的数据键共 %d 个\n", kvCommand.c_str(), findMatchCnt);
			for (int i = 0; i < resData->vals.size(); i++)
			{
				printf("元素编号: %d   元素内容: %s \n", i + 1, resData->vals[i].c_str());
			}
		}
		else
		{ 
			printf("%s  没有迭代到kv数据表中匹配的数据键\n", kvCommand.c_str());
		}
		

	}
	else
	{
		printf("正确返回类型为:%d, 调用返回类型不匹配,返回类型错误:%d \n", FARELDB_KV_RES_STRINGLIST, res->getType());
	}

}
  • 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
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

补充说明

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/735611
推荐阅读
相关标签
  

闽ICP备14008679号