我是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
答案 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
的哈希值,但它仍然是重复数据。