Redis容量及使用规划 – Tim[后端技术]
Posted onRedis容量及使用规划 – Tim[后端技术]
Tim[后端技术]
Tim's blog, 关于后端架构、互联网技术、分布式、大型网络应用、NoSQL、技术感悟等
Home | About | English version | 留言(Guestbook) | 订阅RSS
Email:
Similar Posts
- Friendfeed的MySQL key/value存储
- Ideas for creating a friendfeed like feed aggregator system
- Notes about Timelines @ Twitter
Most Commented
- C, Erlang, Java and Go Web Server performance test (85)
- About Tim Yang (83)
- Redis几个认识误区 (62)
- Memcache mutex设计模式 (47)
- 构建可扩展的微博架构(qcon beijing 2010演讲) (39)
- 某分布式应用实践一致性哈希的一些问题 (38)
- 为什么优秀开发者进入Google后就不参与开源了 (33)
- MacBook Air与工作效率 (32)
Recent Posts
- “connect the dots” 随想
- 跨领域人才
- 产品下线杂谈
- 当我谈演讲时候,我谈些什么
- 案例与故障的知识库
- 团队中的为师之道
- 有感Google的混合研究方法
- 谈技术人员“转正”
- 微信架构的启示
- MacBook Air与工作效率
- Notes about Timelines @ Twitter
- 技术工程师的能力与目标
- 技术方案评审
Recent Comments
- Redis几个认识误区 | 创造 on MemcacheDB, Tokyo Tyrant, Redis performance test
- 甄码农 on 团队中的为师之道
- 甄码农 on 跨领域人才
阿秀 on About Tim Yang
Categories
- Erlang
- Java
- Linux
- Lua
- Python
- SNS
- tech
- Web
- 产品
- 分布式
- 技术管理
- 架构
- 编程
- 随想
Archives
October 2012 (5)
- September 2012 (4)
- May 2012 (3)
- February 2012 (3)
- January 2012 (2)
- December 2011 (1)
- August 2011 (1)
- July 2011 (1)
- April 2011 (2)
- February 2011 (1)
- January 2011 (2)
- December 2010 (2)
- November 2010 (2)
- September 2010 (1)
- August 2010 (1)
- July 2010 (3)
- June 2010 (2)
- May 2010 (2)
- April 2010 (1)
- March 2010 (4)
- February 2010 (1)
- January 2010 (1)
- December 2009 (3)
- November 2009 (3)
- October 2009 (3)
- September 2009 (4)
- August 2009 (5)
- July 2009 (6)
- June 2009 (5)
- May 2009 (11)
- April 2009 (7)
- March 2009 (3)
- February 2009 (2)
- January 2009 (2)
- December 2008 (2)
Feeds
- Comments (RSS) *
Redis容量及使用规划
Wednesday, Jan 5th, 2011 by Tim | Tags: memcache, memcached, mysql, redis
在使用Redis过程中,我们发现了不少Redis不同于Memcached,也不同于MySQL的特征。 (本文主要讨论Redis未启用VM支持情况)
1. Schema
MySQL: 需事先设计 Memcached: 无需设计 Redis: 小型系统可以不用,但是如果要合理的规划及使用Redis,需要事先进行类似如下一些规划
- 数据项: value保存的内容是什么,如用户资料
- Redis数据类型: 如String, List
- 数据大小: 如100字节
- 记录数: 如100万条(决定是否需要拆分)
- ⋯⋯
上面的规划就是一种schema,为什么Redis在大型项目需要事先设计schema?因为Redis服务器有容量限制,数据容量不能超出物理内存大小,同时考虑到业务数据的可扩充性,记录数会持续增多、单条记录的内容也都会增长,因此需要提前规划好容量,数据架构师就是通过schema来判断当前业务的Redis是否需要“分库分表”以满足可扩展需求。
2. 容量及带宽规划
容量规划 MySQL: < 硬盘大小 Memcached: < RAM Redis: < RAM
带宽规划 由于Redis比MySQL快10倍以上,因此带宽也是需要事先规划,避免带宽跑满而出现瓶颈。
3. 性能规划(QPS)
当系统读写出现瓶颈,通常如何解决? MySQL 写: 拆分到多服务器 读: (1) 拆分 (2) 写少也可以通过增加Slave来解决
Memcached 读写: 都通过hash拆分到更多节点。
Redis: 写:拆分 读: (1) 拆分 (2) 写少也可以通过增加Slave来解决
4. 可扩展性
MySQL: 分库分表 Memcached: hash分布 Redis:也可以分库,也可以hash分布
小结
通过以上分析,Redis在很多方面同时具备MySQL及Memcached使用特征,在某些方面则更像MySQL。 由于Redis数据不能超过内存大小,一方面需要进行事先容量规划,保证容量足够;另外一方面设计上需要防止数据规模无限制增加,进而导致Redis不可扩展。 Redis需要象MySQL一样预先设计好拆分方案。
小问题
在MySQL中,通过预先建立多表或者库可以在业务增长时候将这些表或库一分为二部署到更多服务器上。 在Redis中,“分库分表”应当如何实现?有什么好的设计模式?
16 Comments »
- ciel says:
因为自己的项目可能会用到redis, 有个小问题想问问blog主. java+redis这样的组合有没有问题, jedis适合用到生产环境去了么?
- gyf19 says:
目前看来 redis VM 还不靠谱。
- 孙立 says:
由于redis使用内存,不方便事先建立,我觉得可以才行采用虚拟node的模式来实现拆分。
- empyreaner says:
redis的发展非常快,现在的这些问题可能等到几个月后就都不是问题了。 redis最近几天又加了个diskstorage分支,正在测试完全使用硬盘存储全部数据,内存只作为缓存。VM也许将在未来的版本中废弃。(作者的效率太高了) redis cluster也快要出来了,可以减少人工分库分hash的麻烦。
- 王道中强流 says:
我喜欢MongoDB多一点
- 神仙 says:
redis 2.0 已经可以只把部分数据放内存了,不知道效果怎样
- Zoom.Quiet says:
嗯嗯嗯,我们在大规模使用 Redis时,没有深入,直接在超过1kw 时就放棄了,
- 内存不足
- 速度成比例下降 直接使用自定义的内存结构体,速度提高30倍… 但凡是通用的 DB类服务,都内置了N多稳定性保证的机制, 整体上就无法满足极限状态中的响应… 只要业务稳定不变,及时替换成专用内存结构很靠谱;
- 但是,无法兼顾所有意外情况,内存泄漏问题将逐步爆发
- 慢慢追加各种保守措施后就发觉,其实又在实现另外一个 Redis 而已…
- yuping322 says:
在MySQL中,通过预先建立多表或者库可以在业务增长时候将这些表或库一分为二部署到更多服务器上。 在Redis中,“分库分表”应当如何实现?有什么好的设计模式?
个人看法. redis+zookeeper。 维持一致性在zookeeper里。
- tony says:
redis 消耗内存很严重,用不起。
- KnightE says:
用HASH把绝大部分GET/SET替换后,内存节约了很多。 性能上目前还没有遇到什么问题,目前有30多个节点在线上跑。 不过通过分片(节点)存储后,sort就无法很好的使用了,这是一个目前还需要从DB走的问题,不知道Tim有什么建议。
- redcreen says:
@KnightE: 数据分片后无法通过规则将需要sort的数据分布到同一个节点上么?
- eyu says:
把redis原型改造成了一个消息队列服务器,但是在释放大数据量的时候出现了速度严重下滑,替换成tcmalloc后恢复正常。另外貌似存在内存泄漏的问题。。。
- rjgcs123 says:
云集国内redis大佬的QQ群正在招募各路redis朋友,不管你是正在使用redis,还是在研究redis,或者是对redis感兴趣,你都可以加入到我们的阵营。大家一起讨论redis各类用法,key-value、list、set、map使用,redis优化、内存监控、主从配置等等问题,这里都会有高手给你解决。
注意啦,国内顶尖级别的redisQQ群是 43016055
- Sean says:
请问现在有没有人考虑用MemBase,貌似也支持持久化缓存的.
- Leric says:
Redis本来就不是设计作为通用数据库用的,想把所有数据都放在redis里的企图从一开始就是错误的。个人觉得Redis用纵向扩展就行了,空间不够加内存,性能不够换机器(估计性能问题会出现在网络IO上),能遇到更庞大的数据访问问题的地方,也就得人工shard数据了。Redis的主从的主要作用在高可用性上,性能上感觉意义不大。
RSS feed for comments on this post, TrackBack URI Cancel Reply
Leave a Comment
Name (required)
E-mail (required, never displayed)
URI
Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License