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



我已经学习了本教程中关于如何使用节点创建基于令牌的身份验证的教程http://www.kdelemme.com/2014/08/16/token-based-authentication-with-nodejs-redis/

我把它全部解决了,但我有一个问题。

我存储代币的方式是:

KEY=令牌

VALUE=用户数据(用户名、电子邮件等)

为了保护多个设备登录,我想使现有的令牌无效,并生成新的令牌。在登录过程中,我想检查用户的令牌是否已经存在。但是,我需要找到Key by Value。(我需要通过电子邮件找到TOKEN)。但当我浏览Redis文档时,我找不到任何一行关于按值查找Key的内容。

非常感谢:)

您基本上必须从两种方法中选择一种:数据库的完全扫描或索引。正如这个问题的另一个答案中所建议的那样,完全扫描将是非常低效的——你将检查你的整个密钥空间(或至少所有令牌),并需要提取每个密钥空间,直到你找到与电子邮件匹配的密钥。

索引将使您能够更快地获得查询的答案,而牺牲了一些RAM和管理开销。虽然Redis不提供开箱即用的索引功能,但您可以使用常规的Redis数据结构和操作轻松地设计它们。例如,实现您想要的内容的简单方法是为每个令牌存储另一个密钥,该密钥的名称是电子邮件,其值是令牌。这将允许您使用令牌,但只需执行一次GET操作即可发送电子邮件。

请注意,这种索引方法将有效地将令牌相关密钥的数量增加一倍,因此为了优化RAM消耗,您可能需要考虑其他类型的索引结构(例如,使用哈希对电子邮件令牌对进行分组,其中将用作存储桶)。

您必须执行某种SCAN并迭代键,搜索每个值。redis模块支持这些命令,但如果您需要/想要SCAN的流式接口,至少有几个模块可以做到这一点:redis-scanstreamsredisscan(从技术上讲,它使用回调方法,因此不是真正的流式实现)。

最新更新