一尘不染

类似于标签缓存,并使用Redis查询以建议他们

redis

就像StackOverflow:当您提出问题时,您需要提供一些标签。

当前,我正在查询关系数据库存储,但是我认为Redis应该有意义以缓存标签建议。

例如,它将是一个这样的集合:

sadd tags:suggestions "c#" ".net" "redis"

现在,一些用户在问一个问题,他/她可能会写“ ne”,因此Redis缓存中有一些标签可能与整个部分标签名称匹配: **.net** 。

我不知道如何将这样的tags:suggestionsRedis集相交以获得“ .net”。

还是应该使用字符串而不是集合?

先感谢您!

注意:

对于那些询问“到目前为止我已经尝试了什么”的人,请仔细检查以下问题: 我不知道该怎么做,我只是在学习Redis到目前为止我尝试过什么?
阅读手册,使用 set进行 尝试,但是我来到这里是因为我不知道我是否可以使用Redis实现这种要求…


阅读 574

收藏
2020-06-20

共1个答案

一尘不染

经过大量 搜索 之后,我发现了一篇关于我在StackOverflow上要求的内容的好帖子:

摘要…:

1.为标签创建键值

sadd mysite:tags "stackoverflow" "stack-exchange" "question" "about-redis"

2.为每个可能的组合创建一个索引

是的,例如:

  • “ s”
  • “ st”
  • “ sta”
  • … 等等

sadd mysite:tags:index:s 1 2

sadd mysite:tags:index:st 1 2

sadd mysite:tags:index:sta 1 2

sadd mysite:tags:index:stack 1 2

sadd mysite:tags:index:stacko 1

… 等等。

这是关于添加所有以 sst 开头的标签的…

3.使用SORT获取标签建议:

sort mysite:tags:index:s by nosort get tags:*

这将输出:

  • 堆栈溢出
  • 堆栈交换

或者…按nosort排序mysite:tags:index:stack-取得标签:*

…将输出:

  • 堆栈交换

这似乎是一个很好的解决方案!

2020-06-20