如何在redis中存储数据,如mysql结构或按值

时间:2015-11-12 09:20:41

标签: php mysql node.js redis

我是redis开发的初学者,并且通过redis文档也开始开发应用程序。

我的目标是:需要在表中存储少量行(每个行包含4个数据值),然后我需要通过四个字段中的任何一个来检索和删除特定行。此功能可以在MySQL中存档,包含insert,update&删除查询。我需要你的建议/帮助,以便在redis中存档。

我已经选择了哈希方法来将数据存储在redis中,并且根据我的学习知识,使用下面的哈希函数。

使用的语法:$redis->hset("$Index", "$Field", "$Value");

存储在redis中的数据:

$redis->hset("users", "1_name", "V.Rajesh");
$redis->hset("users", "1_place", "Ponneri");
$redis->hset("users", "1_email", "rajesh1991f@gmail.com");
$redis->hset("users", "1_fr_email", "mailtodillibabu@gmail.com");

$redis->hset("users", "2_name", "Mani");
$redis->hset("users", "2_place", "Ayyaneri");
$redis->hset("users", "2_email", "mani@gmail.com");
$redis->hset("users", "2_fr_email", "mailtodillibabu@gmail.com");

从redis检索单个数据:(按索引和字段名称) $redis->hget("users", "1_name");

但是,我想通过电子邮件获取姓名:' rajesh1991f@gmail.com'。请及时通知我。

谢谢&的问候,

-Dillibabu K

1 个答案:

答案 0 :(得分:2)

您可以为要保留的每个用户属性保留已排序的集合,而不是哈希值。

127.0.0.1:6379> zadd user_names 1 Nilo 2 Maria
(integer) 2
127.0.0.1:6379> zadd user_emails 1 my@email.com 2 her@email.com
(integer) 2

得分是user_id,成员是属性值。

然后,假设您要通过电子邮件进行查询,请发出ZSCORE

127.0.0.1:6379> zscore user_emails her@email.com
"2"

您可以在PHPRedis中找到如何调用这些命令。

现在,您拥有发送电子邮件her@email.com的用户的ID,只需发出一个ZRANGEBYSCORE,其ID为:

127.0.0.1:6379> zrangebyscore user_names 2 2
1) "Maria"

(请注意,它需要两个分数,分钟和最大值,因此您必须输入2两次。)

这个问题的其他人告诉你关于反向映射,这是另一种选择,你可以保留重复的数据来查询使用HSCAN的哈希值,但它仍然是重复数据。