如何使用nodejs在Redis缓存中创建LIKE运算符搜索?

问题描述 投票:0回答:2

我有一个问题,是否可以在 Redis 中创建

LIKE
运算符搜索?类似于关系型(mysql/oracle)数据库。

我有复杂的 json:

   {"_id" : ObjectId("581c8b8854fdcd1ff8c944e0"),
"Objectcode" : "xxxxx",
"Objecttype" : "xxxx",
"docid" : "581c8b8554fdcd1ff8c93d10",
"description" : "Tags based search .... ",
"metaTags" : [ 
    "tag1", 
    "tag2", 
    "tag3", 
    "tag5", 
    "tag6", 
    "tag7", 
    "tag8", 
    "tag9", 
    "tag10"
],
"__v" : 0

}

我想搜索元标签数组,我该怎么做?

谢谢

node.js redis node-redis
2个回答
0
投票

您可以使用 MATCH 命令来搜索数据。

Eg: scan 0 MATCH *11*

参考:http://redis.io/commands/scan


0
投票

您可以使用 Redis *SCAN 命令 http://redis.io/commands/scan,具体取决于您的 数据类型 按模式进行过滤:

  • SCAN 迭代当前选定的 Redis 数据库中的键集。
  • SSCAN 迭代 Sets 类型的元素。
  • HSCAN迭代Hash类型的字段及其关联值。
  • ZSCAN 迭代有序集类型的元素及其相关分数。

切勿在应用程序代码中使用KEYS,因为它可能会破坏性能。

两个主要的nodejs redis客户端库node_redisioredis都支持它,并有一些语法糖:

const keys = [];
const redis = new Redis(); // ioredis
redis.mset('foo1', 1, 'foo2', 1, 'foo3', 1, 'foo4', 1, 'foo10', 1, () => {
  const stream = redis.scanStream();
  stream.on('data', data => {
    keys = keys.concat(data);
  });
  stream.on('end', () => {
    assert.equal(keys.sort(), ['foo1', 'foo10', 'foo2', 'foo3', 'foo4']);
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.