原文:http://segmentfault.com/q/1010000000316112

redis是什么

redis就是一个存储key-value键值对的仓库,如何使用redis在于如何理解你需要设计的系统的E-R的模型,然后合理的规划redis的数据库结构

场景

我举一个简单的消息系统的例子,业务需求:服务器端发送消息给用户
E-R模型:
1. 用户(uid,nickname,phone,mood)
2. 消息(mid,title,content,ts)

用户和消息之间是n:n的关系,一个消息可以发给多个用户,每个用户可以拥有多个消息

redis数据库设计

redis数据库设计的关键在于key的设计,我一般采用固定前缀+唯一后缀的方式,例如:
1. 消息实体是两层结构,考虑用redis的hash数据结构进行存储(ps:用基本的string也是没问题的),key为msg_[$mid],mid类似于mysql表的主key,在当前redis数据库要保证全局唯一,可使用redis的incr原子操作实现,value可以是array('title' => '标题', 'content' => '内容', 'ts' => '发布时间戳').这样,每次服务器端产生消息,构造这样一个key-value的键值对即可表示消息本身的内容
2. 用户实体,因为用户的信息需要更稳定的持久化存储,所以建议直接存储在mysql里,不需要进行迁移到redis中
3. 用户-消息关系,可以考虑redis的sets数据结构。key为unread_mids_[$uid]和read_mids_[$uid],value为mid的集合。每次消息发送给指定的用户时,只需要将消息放到对应的集合里即可

这样就能表示出消息系统对应的E-R模型了

总结

redis数据库如何使用,关键自于你如何设计和理解你要做系统的E-R模型,搞清楚实体之间的关系,在redis里设计相应的key-value键值对即可。至于那几种数据结构,对你设计redis数据库来说作用不大,只是起到更方便的效果,用memcache一样可以做到这些。
针对redis的提供的几种数据结构,我建议别浮在表面只是会调个api,一点技术含量都没有,建议去看一下源码实现,推荐链接:http://redisbook.com/

redis数据库设计(转)的更多相关文章

  1. 浅谈Redis数据库的键值设计(转)

    丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...

  2. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  3. 浅谈REDIS数据库的键值设计(转)

    add by zhj: 关系数据库表的一条记录可以映射成Redis中的一个hash类型,其实数据库记录本来就是键值对.这样,要比本文中的键设计用更少的键,更节省内存,因为每个键除了它的键值占用内存外, ...

  4. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  5. 【转】分析Redis架构设计

    一.前言 因为近期项目中开始使用Redis,为了更好的理解Redis并应用在适合的业务场景,需要对Redis设计与实现深入的理解. 我分析流程是按照从main进入,逐步深入分析Redis的启动流程.同 ...

  6. 分析Redis架构设计

    http://blog.csdn.net/a600423444/article/details/8944601 一.前言 因为近期项目中开始使用Redis,为了更好的理解Redis并应用在适合的业务场 ...

  7. 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  8. Redis --> Redis架构设计

    Redis架构设计 一.前言   Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列 ...

  9. [Redis]Redis的设计与实现-链表/字典/跳跃表

    redis的设计与实现:1.假如有一个用户关系模块,要实现一个共同关注功能,计算出两个用户关注了哪些相同的用户,本质上是计算两个用户关注集合的交集,如果使用关系数据库,需要对两个数据表执行join操作 ...

随机推荐

  1. android studio - 导入工程报错[Plugin with id 'com.android.application' not found]

    出错现象: 大概意思是找不到:com.android.application 插件,以上现象对于初学者来说会经常碰到,下面分析下产生的原因. 原因分析 首先来看看导入后的工程结构: 对于此工程结构,是 ...

  2. poj 3617 Best Cow Line (字符串反转贪心算法)

    Best Cow Line Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9284   Accepted: 2826 Des ...

  3. :(23, 7) in class Queen, multiple overloaded alternatives of constructor Queen define default arguments. class Queen private(val name:String,prop:Array[String],private[scala02] val age:Int = 18){

  4. 类似Unity的全新游戏引擎Godot

    http://www.godotengine.org/wp/ Godot是一个全新开发的游戏引擎,其功能集类似知名的跨平台游戏引擎Unity,可用于开发PC.主机.移动和Web游戏.开发者声称引 擎的 ...

  5. spring 集成 redis -- pub/sub

    redis除了常用的当做缓存外,还可以当做简单的消息中间件,实现消息发布订阅 spring集成redis,可以使用spring-data-redis 首先引入相关maven依赖(此处我spring相关 ...

  6. CTO俱乐部

    主持人:目前互联网金融行业存在哪些行业痛点?云信CreditCloud 是如何解决这些痛点的,过程中有哪些思考? 朱家波:目前这个行业有点乱象丛生, 投资人对行业的不信任是一个很大的痛点.解决不信任的 ...

  7. PHP实现懒加载

    寻常php的加载是通过include(),require()等方法来加载外部文件,之后再通过实例调用方法或直接调用静态方法,而这样子写引入语句实在很麻烦,有的框架会将特定路径的文件全部引入,直接实例化 ...

  8. Could not load type ‘System.ServiceModel.Activation.HttpModule’ from&

    1. 部署网站到IIS7.5,Window 2008的时候出现这个错误   2. 错误信息 Server Error in ‘/’ Application. Could not load type ‘ ...

  9. Oracle安装完成后,如何用命令行启动和关闭数据库?

    Oracle安装完成后,如何用命令行启动和关闭数据库? 解答: 打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ dat ...

  10. html input size maxlength

    最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此!   <p>Name: <inp ...