Redis:通过电子邮件删除用户令牌(按值查找Key)

我已经跟随教程了解如何使用本教程创build基于令牌的身份validation与节点http://www.kdelemme.com/2014/08/16/token-based-authentication-with-nodejs-redis/

我得到了这一切,但我得到了一个问题。

我存储令牌的方式是:

KEY = TOKEN

VALUE = UserData(用户名,电子邮件等)

为了保护多个设备login,我想使现有的令牌无效,并生成新的令牌。 在login期间,我想检查用户的令牌是否已经存在。 但是,我需要find价值的关键。 (我需要通过电子邮件findTOKEN)。 但是当我查看Redis文档时,我找不到任何关于按价值查找Key的行。

非常感谢你 :)

您基本上必须select两种方法之一:数据库的完整扫描或索引。 正如在这个问题的另一个答案中提出的完整扫描将是相当低效的 – 你会遍历整个密钥空间(或者至less所有的令牌),并且需要获取每一个,直到find匹配的电子邮件。

一个索引可以让你以更快的速度得到你的查询的答案,代价是一些内存和pipe理开销。 尽pipeRedis不提供开箱即用的索引function,但您可以使用常规的Redis数据结构和操作轻松地devise它们。 例如,完成你想要的东西的直接方法是为每个标记存储另外一个关键字,这个关键字是电子邮件,它的值是标记。 这将让你让令牌,但电子邮件与一个单一的GET操作。

请注意,这种索引方法将有效地将与令牌相关的密钥数量加倍,因此为了优化内存消耗,您可能需要考虑其他types的索引结构(例如,使用散列将电子邮件令牌对一个桶)。

你将不得不做某种扫描 ,并遍历键,search每个值。 redis模块支持这些命令,但是如果你需要/想要一个SCANstream接口,至less有两个模块可以做到这一点: redis-scanstreamsredisscan (技术上使用callback方法,所以不是真正的stream实现)。