我有一个使用redis的用例,有点不同。
在mysql中,我有一个实体,我们称之为 HumanEntity
. 这个 HumanEntity
有多对多的关系。 HumanEntity.Urls
-每个站点有多个URL HumanEntity
. HumanEntity.UserNames
-每个用户有多个用户名 HumanEntity
. HumanEntity.Phones
... HumanEntity.Emails
...
在正常的一小时内,应用程序会创建数百个这样多的值。
用例是,应用程序接收一个http调用(每秒100次),其中 HumanEntity
值(url或用户名、电话或电子邮件)。
我需要扫描我的mysql(1000000条记录)并返回 HumanEntity.Id(integer)
.
因为在数据完整性方面有一些延迟是可以的,所以我想到了redis。
我可以将值存储为redis吗 key
以及 HumanEntity.Id(integer)
作为值。
我的api需要返回 HumanEntity.Id(integer)
.
有这么长的键和这么短的值有意义吗?例如,url可能是1500字节,值可以是1字节。
实现这一点的最佳redis方法是什么?
谢谢
1条答案
按热度按时间j8yoct9x1#
如果值不是唯一的,那么您可能会遇到一些问题。电话,电子邮件或用户名可能是唯一的用户,但我不确定的网址或任何其他财产存储在您的数据库。您可以用另一个用户的标识符覆盖标识符的值。
如果你没有这样的问题;您可以继续使用字符串类型,时间复杂度
GET
以及SET
是o(1)-那是你能得到的最好的了。在某些情况下,例如检查用户是否使用了任何优惠券,您可以使用long(比如说64个字符)user id作为键,1作为值和用法
EXISTS
来决定它。所以使用长键和短值是有效的。