原文:http://segmentfault.com/q/1010000000316112mysql
redis就是一个存储key-value键值对的仓库,如何使用redis在于如何理解你须要设计的系统的E-R的模型,而后合理的规划redis的数据库结构redis
我举一个简单的消息系统的例子,业务需求:服务器端发送消息给用户
E-R模型:
1. 用户(uid,nickname,phone,mood)
2. 消息(mid,title,content,ts)sql
用户和消息之间是n:n的关系,一个消息能够发给多个用户,每一个用户能够拥有多个消息数据库
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的集合。每次消息发送给指定的用户时,只须要将消息放到对应的集合里便可segmentfault
这样就能表示出消息系统对应的E-R模型了api
redis数据库如何使用,关键自于你如何设计和理解你要作系统的E-R模型,搞清楚实体之间的关系,在redis里设计相应的key-value键值对便可。至于那几种数据结构,对你设计redis数据库来讲做用不大,只是起到更方便的效果,用memcache同样能够作到这些。
针对redis的提供的几种数据结构,我建议别浮在表面只是会调个api,一点技术含量都没有,建议去看一下源码实现,推荐连接:http://redisbook.com/服务器