在使用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. 在C#中将数字转换成中文

    上篇我们讲了在MSSQL中将数字转换成中文,这篇我们讲讲在C#中将数字转换成中文 下篇将讲一下如何将金额转换成中文金额,废话不多说,具体代码如下: /// <summary> /// 数字 ...

  2. Flash 3D学习计划

    1.理解并记住3D渲染的一般管线流程(一天). 2.理解世界,取景,投影变换,并理解投影坐标系(一天). 3.学习VB,IB相关,理解三角形顶点顺序:在屏幕上显示2D矩形,并实现缩放,平移,旋转(三天 ...

  3. Linux下安装PHP的GD支持库

    Linux下安装PHP的GD支持库   1.安装 zlib  wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/zlib-1.2.3.tar.gz ...

  4. 详细解析ASP.NET中Request接收参数乱码原理

    起因:今天早上被同事问了一个问题:说接收到的参数是乱码,让我帮着解决一下. 实际情景: 同事负责的平台是Ext.js框架搭建的,web.config配置文件里配置了全局为“GB2312”编码: < ...

  5. 有关奇葩的mex编程时的matlab出现栈内存错误的问题

    错误提示信息 (ntdll.dll) (MATLAB.exe中)处有未经处理的异常:0xC0000374:堆已损坏 该错误的表现是,matlab调用.mexw64函数时,第一次调用正常,第二次调用出现 ...

  6. mailkit----163邮箱登录拉取邮件的坑

    在使用mailkit的ImapClient拉取邮件的时候,如果我们使用的是网易的邮箱(如:163.126等),如果你没有按照网易的设置去打开IMAP协议,那么将无法登录邮箱,并且发送一封使用不安全的客 ...

  7. js封装的一行半显示省略号。(字数自由控制)

    $(function() { //控制一行半隐藏 (function ($) { $.fn.displayPart = function (opts) { $(this).each(function ...

  8. 设计模式之建造者模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern/** * 建造者模式 * 将一个复杂对象的建造与调用者分离.调用者只需要给出指定对象的类型和内容,建 ...

  9. Linux用ps命令查找进程PID再用kill命令终止进程的方法

    使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即 ...

  10. Linux增加挂载盘

    命令:fdisk /dev/sdb, m 命令:m,n,e,1,p,w 命令:mkfs -t ext4 /dev/sdb,y 挂载命令:mount -t ext4 /dev/sdb /data 获取U ...