scan指定match参数,数据中确实存在匹配的key,为什么返回的是空
问题描述
如下图所示,数据库中存在key为test的数据,用scan match的方式却没有返回这个数据。
问题分析
MATCH选项让命令只返回和给定模式相匹配的元素, 对元素的模式匹配工作是在命令从数据集中取出元素之后, 向客户端返回元素之前的这段时间内进行的, 如果取出的元素都和模式不匹配,则不会返回任何元素。
解决方案
多次scan,以返回的游标值是否为0作为全遍历结束的标记,每次scan时使用上次scan返回的游标值。
创建GeminiDB Redis时,如何选择规格和节点
GeminiDB Redis提供了多种实例规格,不同的实例规格和节点数量拥有着不同的性能。本章节总结了一些实践经验,帮助您决策如何选择GeminiDB Redis实例的规格和节点数量。
- GeminiDB Redis实例的规格越高,性能越好。GeminiDB Redis支持的实例规格请参见 数据库实例规格。
- 在相同的GeminiDB Redis实例规格下,节点数越多,性能越好。
- 建议根据业务实际的测试数据选择GeminiDB Redis规格,并考虑可靠性冗余,和未来业务增长,适当预留一些资源。
- 根据经验,单核CPU支持16GB数据时性能较好。例如,业务数据128GB,暂不考虑业务数据增加的情况下,可考虑购买两个4U16GB的计算节点(即CPU总核数为8)。
与开源Redis5.0相比,GeminiDB Redis支持和限制的命令有哪些
GeminiDB Redis支持的命令请参见使用规范。
业务侧原本做了数据分片,切换到GeminiDB Redis后如何处理这部分逻辑
充分考虑到业务后期的规模扩张,GeminiDB Redis采用存算分离架构,在计算层实现了动态数据分片管理,提供强劲的平滑扩缩容能力。因此,接入GeminiDB Redis实例后,业务侧无需再做数据分片。
GeminiDB Redis是否支持keys命令的模糊查询
出于安全角度考虑,GeminiDB Redis不支持通过keys命令进行模糊查询。建议您使用scan搭配match来进行模糊匹配。
GeminiDB Redis是否支持多DB
GeminiDB Redis的多DB功能将于2022年3月底上线,此前创建的实例暂不支持该功能,也不支持通过升级开启该功能。
使用GeminiDB Redis多DB功能时,您需要关注以下约束与限制:
- DB数支持的范围为0~65535。
- 不支持swapdb命令。
- dbsize命令当前仅能统计所有DB下的key的数量,flushdb后dbsize返回的结果并不会降为0。
- 不支持info keyspace,如需统计某个DB下key的数量,请使用scan进行扫描查询。
- 不支持在Lua脚本中使用select和flushdb命令。
- 不支持在事务中使用select和flushdb命令。
- 暂不支持move命令。
对于scan类的操作,GeminiDB Redis接口与开源Redis 5.0的返回值顺序为什么有差异
开源Redis没有规定如下情况的排序准则,故GeminiDB Redis接口的返回顺序可能和开源Redis不一样,但两者均满足开源文档描述行为。
- scan/hscan/sscan操作的返回值。
- 在zset类型的元素具有相同score时,执行zscan操作的返回值。
针对某些不合法命令,GeminiDB Redis接口与开源Redis 5.0的报错信息为什么有差异
GeminiDB Redis接口先进行命令语法检查,再进行key存在性校验,而开源Redis没有准则,处理不合法命令的结果存在随机性。因此在某些不合法命令的报错信息上二者有时会存在差异。