在使用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. CONTINUE...?【构造/分析】

    CONTINUE...? Time Limit: 1 Second Memory Limit: 65536 KB Special Judge DreamGrid has classmates numb ...

  2. 洛谷——P2862 [USACO06JAN]把牛Corral the Cows

    P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...

  3. Qt如何学习(参考官方文档)

    Designers who are familiar with web development can start with QML 一共有四种安装工具 You have following opti ...

  4. 前端html第三方登录

    首先推荐一下,这个博客主的文章:https://www.cnblogs.com/v-weiwang/p/5732423.html 很不错,基本靠他的博客. 我这里记一点自己调试过程中的报错等: 1,微 ...

  5. the-swift-programming-language 学习笔记

    常量和变量 常量是定义是不可以修改的,在类中定义的常量,可以在构造函数中赋值.let修饰变量是可以修改的.var修饰字符串中字符的遍历for code in string {}for codeunit ...

  6. Chromium和Chrome的区别

    1.Chromium是谷歌的开源项目,开发者们可以共同去改进它,然后谷歌会收集改进后的Chromium并发布改进后安装包.Chrome不是开源项目,谷歌会把Chromium的东西更新到Chrome中. ...

  7. Request.Url.Port 获取不到正确的端口号

    今天遇到一个很奇怪的事情,用request.url.port来获取一个请求的端口,返回是80 ,很纳闷啊我的请求上面是http://www.XX.com:8088 啊,怎么会是80啊,太不可思议了! ...

  8. SQL Server Profiler和数据库引擎优化顾问

    原文:SQL Server Profiler和数据库引擎优化顾问  简介 说到Sql的[性能工具]真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底 ...

  9. IE8下 input标签内padding失效

    在做网页兼容时 发现在ie8下的input内用padding失效 为了达到居中文字的效果 使用line-height可以解决问题

  10. [转]C++函数模板与模板函数

      1.函数模板的声明和模板函数的生成   1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. ...