2013年2月5日
摘要: Redis提供了丰富的数据类型,比起关系型数据库或者简单的Key-Value存储(比如Memcached)来,Redis的数据模型与实际应用的数据模型更相近。比如下面说到的好友关系的存储,原作者使用了Redis的 Sets(集合)数据结构。具体存储方式如下:对于每一个用户,其关注关系存储两份列表,一份为此用户关注的人的UID列表,另一份为此用户粉丝的UID列表,这两个列表都使用Sets(集合)。比如对于用户ID为123的用户,graph:user:123:following 保存的是其关注人的列表,graph:user:1:followed_by 保存的是关注他的人的列表。下面是一个PHP代码 阅读全文
posted @ 2013-02-05 11:58 一个人的天空@ 阅读(848) 评论(0) 推荐(0) 编辑
摘要: 丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。下面举一些常见适合kv数据库的例子来谈谈键值的设计,并与关系型数据库做一个对比,发现关系型的不足之处。用户登录系统记录用户登录信息的一个系统, 我们简化业务后只留下一张表。关系型数据库的设计mysql> select * from login;+---------+----------------+-------------+------------------- 阅读全文
posted @ 2013-02-05 11:25 一个人的天空@ 阅读(6034) 评论(3) 推荐(3) 编辑
摘要: 本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就是要判断此IP的所有地。这个问题引来了Redis作者Salvatore Sanfilippo(@antirez)的回答。解答如下:例如有下面两个范围,10-20和30-40A_start 10, A_end 20B_start 30, B_end 40我们将这两个范围的起始位置存在Redis的Sorted Sets数据结构中,基本范围起始值作为score,范围名加start和end为其value值 阅读全文
posted @ 2013-02-05 11:03 一个人的天空@ 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题。Redis复制流程概述Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你的系统内存容量规划,原因可以参考我上一篇文章中提到的Redis磁盘IO问题。Redis复制流程在Slave和Master端各自是一套状态机流转,涉及的状态信息是:Slave 端:REDIS_REPL_NONEREDIS_REPL_CONNECTREDIS_REPL_CONNECTEDMaster端 阅读全文
posted @ 2013-02-05 10:54 一个人的天空@ 阅读(830) 评论(0) 推荐(0) 编辑