我正在努力提高我对Redis的理解,因为我有一个需要快速处理大量数字的项目,但是,我遇到了一个问题而且我的理解是错误的,或者我的代码不知何论按预期工作。
我在MariaDB表中有数据,我使用ioredis
将hmset
的每行数据导入Redis数据库,然后执行sadd
为每个我需要关闭的点创建索引。
但是,我的结果集不匹配。例如,在MariaDB中,我从两个字段中获得了一系列粗略的55k记录:
SELECT COUNT(`Email`) FROM myTable
WHERE `Qual Field A`='Yes' AND `Qual Field B`='Something else'
在Redis中使用相同的字段我得到2k左右的结果:
SINTER qualFieldA:'Yes' qualFieldB:'Something else'
根据我在SO和其他地方所读到的内容,我的印象是,做SINTER key1:value key2:value
大致相当于SELECT {fields} FROM {table} WHERE field1=value AND field2=value
。
是这样的,也许我的导入或悲伤电话关闭,或者我不正确理解SINTER如何工作?
原则上你是对的,但是,除了导入过程中的错误之外,主要的嫌疑人IMO是这样的:MariaDB确实对索引进行索引并以某种方式对值进行标准化以供选择,而在redis中你所看到的就是你得到的。
因此,例如,如果您查询“是”,则将选择MariaDB中的值“是”,“是”,“是”和“是”,在redis中仅选择“是”的值。
而且它不仅仅是小写 - 如果你处理unicode,你正在进入一个痛苦的世界,试图自己实现规范化和整理。