使用redis实现关系型数据库表设计

很多年前随手写的 没想到这么多人阅读 我抽空修改一下吧 尽量清晰一点

 

前言

最近有一个需求,设计一款文件系统,而该文件系统会对不同文件进行不同的转码操作,如rmvb转码成mp4 mp3 与m3u8格式,ppt文件转码为swf pdf与h5。

经过调研以后发现,如果以关系型数据库来实现,单表会出现很多冗余字段,如上述两种文件,需要设计6个字段来存储相关转码信息,但对特定的一种文件来说,只利用了三个字段。

而如果使用分表方式可以避免冗余,单表结果变复杂,后去扩容修改都不容易,因此决定选择一款nosql作为db,至于为什么最后选择redis,有多方面原因,在此就不多说了

在每一个栗子中,我都会分别使用redis自带工具的命令与php脚本完成(redis自带工具在为安装目录下的redis-cli,命令不区分大小写)

 

自增主键设计

我们都知道关系型数据库有主键这个概念,常用的都是实数int类型的,为了避免重复,这个主键往往还是自增的,那么,而redis是使用key=>value存储的格式,如果使用redis来设计,那么,这个自增主键如何来设计呢?

 

redis提供一个整形自增命令 incr ,每次执行将对应的key增加1 ,并返回对应key增加后的值   格式 incr key

 

php代码如下:

 

$redis = new \Redis();
$connect = $redis->connect("127.0.0.1",6379);
$id=$redis->incr('key');


每次运行都将得到一个唯一的id,如此我们就完成了自增主键的设计。

 

 

 

 

 

字段设计

关系型数据库中,字段是预先定一好的,也就是说你不能给一个没有预先定义的字段中插入数据,而在redis中则没有这个限制,即用即存就是他的优点

比如 对所有文件来说,filename(文件名称),filepath(存储路径),filetype(文件类型)等字段是共有的,而对ppt文件来说额外的字段为mp4 mp3 与m3u8格式

对视频文件来说,额外的字段为swf pdf与h5.

 

 

查询索引设计

对于关系型数据库来说,每个字段,都可以用来作为查询条件,而对于redis来说,是不行的。为什么呢?上面说过,redis的字段是即用即存的,也就是说,两条数据,

它们的字段数可能是不一样的。如此特性决定了,redis的查询字段都需要预先定义,而且需要选择那些所有数据均有的字断做为

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值