像 SQL 一样设计 Redis 数据库表?

新手上路,请多包涵

假设我的数据库表结构是这样的

id name college address
1  xxx   nnn     xn
2  yyy   nnm     yn
3  zzz   nnz     zn

如果我想根据 sql 中的名称获取学生详细信息,例如 select * from student where name = ‘xxx’ 那么它在 redis 数据库中是如何可能的

原文由 Hari Haran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 777
2 个回答

Redis 与其他 NoSQL 数据存储一样,根据您将要执行的操作有不同的要求。

Redis 有几种数据结构,根据您的需要可能会有用。例如,如果您希望使用 select * from student where name = 'xxx' 您可以使用 Redis hash

 redis 127.0.0.1:6379> hmset student:xxx id 1 college nnn address xn
OK
redis 127.0.0.1:6379> hgetall student:xxx
1) "id"
2) "1"
3) "college"
4) "nnn"
5) "address"
6) "xn"

但是,如果您有其他查询,例如您想做同样的事情,但选择 where college = 'nnn' 那么您将不得不对数据进行非规范化。非规范化在 SQL 中通常是一件坏事,但在 NoSQL 中却很常见。

如果您的主要查询将针对名称,但您可能需要查询大学,那么您可能会执行类似添加 set 之类的操作。

 redis 127.0.0.1:6379> sadd college:nnn student:xxx
(integer) 1
redis 127.0.0.1:6379> smembers college:nnn
1) "student:xxx"

使用这样的数据结构,如果您想查找上大学 xn 的姓名的所有信息,您将首先选择 set ,然后根据返回的名称选择每个 hash set

您的要求通常会推动您使用的设计和结构。

原文由 sberry 发布,翻译遵循 CC BY-SA 4.0 许可协议

  • 在 SQL 数据库设计中,我们首先将所有内容放入数据库中,然后弄清楚我们将如何查询它

  • 在 Redis 设计中,我们首先弄清楚我们需要回答哪些查询,然后我们将构建我们的数据。

这就是 Redis 超级快的原因。在某些情况下,Redis 将数据存储为哈希。如果记录具有许多属性,在您的情况下,学生可能具有“年龄、姓名、班级”属性,因此将“学生”存储为哈希很有用。

在 Redis 中,当你构建你的应用程序时,你必须看看你要存储什么——用户、会话、产品——并且基于你的应用程序存储的那些东西,你必须计划使用哪些数据结构来存储每个东西.

原文由 Yilmaz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题