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

时间:2014-01-25 06:19:50

标签: sql redis nosql

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

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

如果我想根据sql中的名称获取学生详细信息 从学生中选择*姓名=' xxx' 那么如何在redis数据库中实现它

7 个答案:

答案 0 :(得分:16)

与其他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 = 'nnn',那么您将不得不对数据进行非规范化。非规范化在SQL中通常是一件坏事,但在NoSQL中它很常见。

如果您的主要查询是针对该名称的,但您可能需要针对该大学进行查询,那么除了哈希之外,您可能还需要添加set

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

如果您的数据结构如下,如果您想查找上大学xn的所有信息,请先选择set,然后根据返回的名称选择每个hashset

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

答案 1 :(得分:13)

只有6条原则(我收集了here),一个思想敏捷的人很容易适应Redis方法。简而言之,他们是:

  
      
  1. 最重要的是,不要害怕产生大量的键值对。因此,请随意将表格的每一行存储在另一个键中。
  2.   
  3. 使用Redis'哈希映射数据类型
  4.   
  5. 通过分隔符(例如":")
  6. 从表格的主键值形成键名称   
  7. 将其余字段存储为哈希
  8.   
  9. 如果要查询单个行,请直接形成密钥并检索其结果
  10.   
  11. 如果要查询范围,请使用wild char" *"朝你的钥匙。
  12.   

该链接仅提供一个简单的表示例以及如何在Redis中对其进行建模。遵循这6条原则,您可以像普通表一样继续思考。 (当然没有一些不那么相关的概念,如CRUD,约束,关系等)。

答案 2 :(得分:2)

对于普通,香草redis,其他答案是完全正确的,但是,昨天(2016年12月 - 2016年)redis 4-rc1已经发布。

redis v4提供了对模块的支持,我刚刚写了一个小模块,将SQLite嵌入到redis本身; rediSQL

使用该模块,您实际上可以在redis实例中使用功能齐全的SQL数据库。

答案 3 :(得分:1)

希望现在还不算太晚,因为最初的问题已经有六年了。您可以尝试使用我的dbx插件:https://github.com/cscan/dbx 它支持简单的SQL来维护REDIS中的哈希。像这样:

127.0.0.1:6379> dbx.select name, tel from phonebook where gender = 'F' order by age desc

或从外壳调用

$ redis-cli "dbx.select name, tel from phonebook where gender = 'F' order by age desc" 

希望获得帮助。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可以尝试使用searchbox框架。 searchbox提供了使用Criteria api查询redis数据的简便方法。

答案 6 :(得分:0)

OnceDB是基于Redis的全文本搜索内存数据库。它支持数据管理,例如SQL关系数据库和NoSQL无模式数据库。

OnceDB不会更改Redis的数据存储结构,并且与Redis完全兼容。 Redis数据库文件可以直接在OneDB中操作,然后返回给Redis使用。

OnceDB通过运算符自动创建辅助索引:

= Ordinary field value, no index
@ Primary key
? Grouping index
* Keyword grouping index, separated by ',' between keywords
\ Sort index, the score weight of the index is the value of the field

例如,执行以下命令以添加用户数据:

upsert user username @ dota password = 123456 title ? SDEI skills * java,go,c
> OK

您可以由操作员从索引中进行搜索,例如搜索包含c关键字的用户数据,并打印用户名和密码字段。

find user 0 -1 username = * password = * skills * c
find user 0 -1 username = * password = * skills * c
1) (integer) 1
2) "user:dota"
3) "dota"
4) "123456"
5) "java,go,c"

了解更多:OnceDB quick start