【问题标题】:How to model this data structure in redis?如何在redis中对这种数据结构进行建模?
【发布时间】:2013-09-28 09:57:19
【问题描述】:

我在mysql中有两个表,tasks和users。如何在 redis 中建模?使用哪种数据结构?

例如,

tasks
-------------------------------------------
id  name assigned_to cretead_at
-------------------------------------------
1   task1  1          2012-09-10 00:00:00
-------------------------------------------
2   task2  2          2013-09-11 00:00:00
--------------------------------------------


users
-------------------
id  name email 
-------------------
1   user1  abc@xyz.com          
--------------------
2   user2  efg@xyz.com          
-------------------

我的要求是,我有用户 ID 并希望将所有字段加载到 php 数组中。我不想只获取用户名之类的单个字段。我想为特定用户ID加载用户所有信息在php数组中,例如

$user[1] = array("name" => "user1", "email" => "abc@xyz.com");

如果我可以将它分类为不同的集合,例如“用户”和“任务”,而不是将其存储在许多键中,那就更好了。

【问题讨论】:

  • 这取决于 - Wnat 结构是您想要显示给用户的数据?
  • @BenjaminGruenbaum,更新了我的问题。你能帮忙吗?
  • 所以您唯一的用例是通过assigned_to 获取用户?这是唯一认为您的应用程序可以做到的?
  • 这只是我的应用程序的一个类似用例。我想在redis中缓存用户数据并通过id获取。

标签: php caching nosql redis


【解决方案1】:

Redis 是一个 Key:Value 存储系统,因此您可以通过键存储(和获取)值。

要按类别(用户、任务等)将所有数据存储在一个组中,您可以使用List。以 phpredis 为例:

// To store lset(key index value)
$redis->lSet('users', $user[$id]['id'], json_encode($user[$id]));
// To get lget(key, index)
$redis->lGet('users', $id)

【讨论】:

  • 我有用户、任务和许多其他我可能希望缓存的实体。所以我正在寻找对它进行分类,让我们说“用户”、“任务”等键。我知道它不是数据库,我希望为不同的实体缓存一些记录。
  • 你可以序列化所有你想要的,所以如果你想要一个大的用户记录你可以做 $redis->set($id, json_encode($user[$id]));存储一个用户作为密钥,或者 $redis->set('users', json_encode($user));字符串的最大大小为 512Mb,因此如果您的用户表较大,我建议您使用集合 (redis.io/commands#set)。
  • 我不想使用 $redis->set($id, json_encode($user[$id]));因为我想将其分类为“用户”、“任务”等。我想使用 $redis->set('users', json_encode($user));但我如何通过用户的 id 访问用户?我想要的结构是 "users" --> user_id --> json_encode($user);我怎样才能做到这一点?
  • 带列表:$redis->lSet('users', $user[$id]['id'], json_encode($user[$id]));并使用 $redis->lGet('users', $id); /* 'X' */
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 2017-11-28
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多