在使用Redis过程中,我们发现了不少Redis不同于Memcached。也不同于MySQL的特征。

(本文主要讨论Redis未启用VM支持情况)

1. Schema

MySQL: 需事先设计

Memcached: 无需设计

Redis: 小型系统能够不用。可是假设要合理的规划及使用Redis,须要事先进行类似例如以下一些规划

  • 数据项: value保存的内容是什么。如用户资料
  • Redis数据类型: 如String, List
  • 数据大小: 如100字节
  • 记录数: 如100万条(决定是否须要拆分)
  • ⋯⋯

上面的规划就是一种schema,为什么Redis在大型项目须要事先设计schema?由于Redisserver有容量限制。数据容量不能超出物理内存大小,同一时候考虑到业务数据的可扩充性,记录数会持续增多、单条记录的内容也都会增长。因此须要提前规划好容量。数据架构师就是通过schema来推断当前业务的Redis是否须要“分库分表”以满足可扩展需求。

2. 容量及带宽规划

容量规划

MySQL: < 硬盘大小

Memcached: < RAM

Redis: < RAM

带宽规划

因为Redis比MySQL快10倍以上。因此带宽也是须要事先规划。避免带宽跑满而出现瓶颈。

3. 性能规划(QPS)

当系统读写出现瓶颈。通常怎样解决?

MySQL

写: 拆分到多server

读: (1) 拆分 (2) 写少也能够通过添加Slave来解决

Memcached

读写: 都通过hash拆分到很多其它节点。

Redis:

写:拆分

读: (1) 拆分 (2) 写少也能够通过添加Slave来解决

4. 可扩展性

MySQL: 分库分表

Memcached: hash分布

Redis:也能够分库,也能够hash分布

小结

通过以上分析,Redis在非常多方面同一时候具备MySQL及Memcached使用特征,在某些方面则更像MySQL。

因为Redis数据不能超过内存大小,一方面须要进行事先容量规划,保证容量足够;另外一方面设计上须要防止数据规模无限制添加,进而导致Redis不可扩展。

Redis须要象MySQL一样预先设计好拆分方案。

小问题

在MySQL中。通过预先建立多表或者库能够在业务增长时候将这些表或库一分为二部署到很多其它server上。

在Redis中,“分库分表”应当怎样实现?有什么好的设计模式?

Redis, Memcache, Mysql差别的更多相关文章

  1. 如何使用Redis做MySQL的缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  2. 使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  3. [转]Redis 与Mysql通信

    http://blog.csdn.net/hpb21/article/details/7852934 找了点资料看了下.学习心得如下: 1 Mysql更新Redis Mysql更新Redis借鉴mem ...

  4. Redis.Memcache和MongoDB区别?

    Memcached的优势: Memcached可以利用多核优势,单吞吐量极高,可以达到几十万QPS(取决于Key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右.)适用 ...

  5. mongodb,redis,mysql 简要对比

    本篇内容大部分不是原创,转载的会贴有链接. 准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块. 当下主流的要数NoSql数据库了,拥有强大的高并发能力. mongo ...

  6. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  7. Redis与MySQL的结合

    Redis与MySQL的结合 目前大部分互联网公司使用MySQL作为数据的主要持久化存储,那么如何让Redis与MySQL很好的结合在一起呢?我们主要使用了一种基于MySQL作为主库,Redis作为高 ...

  8. 利用redis协助mysql数据库搬迁

    最近公司新项目上线,需要数据库搬迁,但新版本和老版本数据库差距比较大,关系也比较复杂.如果用传统办法,需要撰写很多mysql脚本,工程量虽然不大,但对于没有dba的公司来说,稍微有点难度.本人就勉为其 ...

  9. 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求

    在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架构,使用H ...

随机推荐

  1. openstack 监控 - 整合nagios 调研总结

    https://blog.csdn.net/soft_lawrency/article/details/8590562

  2. android 使用 LocalStorage

    PS:本身是.net 出身 因为项目需要 研究了好几天安卓 这个方法网上也有 自己也写出来 有时间自己看看 和 给还没有解决问题的朋友借鉴下,下面有标个重点 是允许使用localstorage 的关键 ...

  3. JquerySession使用

    添加数据 $.session.set('key', 'value') 删除数据 $.session.remove('key'); 获取数据 $.session.get('key'); 清除数据 $.s ...

  4. vi / vim 设置

    一.vi下方向键输入后,出现ABCD,解决方法: 在vi中输入:set nocp 按回车即可. 二.设置TAB缩进4个空格: 为了vim更好的支持python写代码,修改tab默认4个空格有两种设置方 ...

  5. 陕西师范大学第七届程序设计竞赛网络同步赛D ZQ的睡前故事【约瑟夫环1-N数到第k个出队,输出出队顺序/ STL模拟】

    链接:https://www.nowcoder.com/acm/contest/121/D来源:牛客网 题目描述 ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡 ...

  6. servlet之request

    1. request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到 ...

  7. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  8. La 4976 Defense lines

    蓝书紫书上都有的一道题...这里就懒得说题解了. 但是我竟然WA了6次!为什么呢??? 一开始没看见连续子序列..... 后来插入的时候忘判断了是不是比前驱大.... 所以我们只需要维护一个权值递增( ...

  9. Springboot默认加载application.yml原理以及扩展

    Springboot默认加载application.yml原理以及扩展 SpringApplication.run(...)默认会加载classpath下的application.yml或applic ...

  10. 设计模式之桥接模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern /** * 桥接模式 * 优点: * 1.分离抽象接口及其实现部分.提高了比继承更好的解决方案. * ...