sql - redis缓存 - mongodb知乎




设计像SQL一样的Redis数据库表? (4)

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

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

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

如果你还有其他的疑问,就像你想做同样的事情,但选择where college = 'xn'那么你将不得不非法化你的数据。 非规范化在SQL中通常是一件坏事,但在NoSQL中非常常见。

如果您的主要查询将违背名称,但是您可能需要查询大学,那么您可以执行一些操作,例如添加哈希值。

redis 127.0.0.1:6379> sadd college.xn xxx
(integer) 1
redis 127.0.0.1:6379> smembers college.xn
1) "xxx"

如果你的数据是这样构建的,如果你想找到所有的名字到大学xn的信息,你首先选择这个set ,然后根据set返回的名字选择每个hash

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

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

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

如果我想要得到学生的详细信息基于这样的SQL名称像这样select * from student where name ='xxx'那么如何在redis数据库中可能


Redis和它有一些基本的数据结构,NoSQL和SQL是不同的世界。 但是,您可以像使用某些计划的SQL数据存储一样使用Redisgithub上有一个有趣的程序Redisql ,它试图通过SQL和Redis一起玩,Redisql背后的想法就是@sberry提到的。


你可以试试searchbox框架。 searchbox提供了使用Criteria API来查询redis数据的简单方法。


只有6个原则(我在这里收集的),一个SQL头脑的人很容易适应Redis的方法。 简而言之,他们是:

  1. 最重要的是,不要害怕产生大量的键值对。 所以请随意将表格的每一行存储在不同的键中。
  2. 使用Redis的哈希映射数据类型
  3. 使用分隔符(例如“:”)从表格的主键值构成键名
  4. 将剩余的字段存储为散列
  5. 当你想查询单行时,直接形成键并检索其结果
  6. 当你想查询一个范围时,对你的密钥使用通配符“*”。

链接只是给出了一个简单的表格示例,以及如何在Redis中对其进行建模。 遵循这6条原则,你可以继续像普通表一样思考。 (当然,没有一些与CRUD,限制,关系等不那么相关的概念)





nosql