Redis概述

缓存数据库的兴起

  • 时代的发展

    随着进入CS架构+大数据时代;如果网站的数据量很大,一台机器是无法承载的!

    关系型数据库单表数据量超过一定大小,就必须建立索引,否则查询效率极低

    定位、热榜等数据实时变化且数据量大的服务逐渐兴起,MySQL等关系型数据库无法满足这些需求

  • Memcached + MySQL + 垂直拆分模式

    多台数据库架构,需要进行数据库的备份,并不方便

  • 网站80%的时间都在执行查询操作

    缓存数据库十分适用于这样的场景!

  • 网站数据模块的发展历程:

    数据结构与索引的优化—>文件缓存(IO)—>Memcached

  • 网站数据模块的发展历程:

    数据结构与索引的优化—>文件缓存(IO)—>Memcached

网站数据库模块的发展历程

  1. 数据结构与索引的优化—>文件缓存(IO)—>Memcached

  2. 分库分表 + 水平拆分 + MySQL集群

    数据库引擎由MyISAM的表锁转为Innodb的行锁,解决了读的压力

    分库分表则用于解决写的压力,例如微服务中每一个服务单独使用一个数据库

    • 一个博客网站系统:用户数据用MySQL;
    • 阅读量、点赞量数据用Redis,过一段时间进行持久化
    • 多媒体数据用mongodb/fastDFS

NoSQL定义

  • 定义:NoSQL = Not Only SQL 不仅仅是SQL,泛指非关系性数据库
  • NoSQL在当今大数据环境下的发展十分迅速,而Redis是当前发展最快的NoSQL
  • 很多的数据如社交网络、地理位置,这些数据的存储不需要一个固定的行列格式,而且不需要很多操作就可以进行横向扩展(集群),非常适合用Map<String,Object>这样键值对形式来控制

NoSQL特点

  1. 方便扩展(由于数据之间没有关系)
  2. 大数据量且高性能(Redis一秒可以写8万次,读取11万)
  3. 数据类型是多种多样的(不需要设计数据库,随用随取)

传统RDBMS与NoSQL

  • 传统RDBMS
    1. 结构化组织
    2. 数据和关系都存在单独的表中
    3. 严格的SQL语句
    4. 基础的事务、严格的一致性
  • NoSQL
    1. 没有固定的操作语言
    2. 存储方式多种多样:键值对存储、列存储、文档存储、图形数据库
    3. 高性能、高可用、高扩展
    4. 最终一致性
    5. CAP、BASE理论的应用

NoSQL的四大分类

  1. KV键值对:Redis、Tair、Memecache
  2. 文档型数据库:MongoDB(最像关系型数据库)、ConthDB
  3. 列存储数据库:HBase、分布式文件系统
  4. 图形关系数据库:Neo4j、InfoGrid

大型互联网应用的问题

  • 数据类型非常多且数据源繁多
  • 经常需要重构
  • 数据进行改造时,大量接口、持久层代码需要改动

解决之道

  • 在网站应用集群和底层数据源之间,构建一层代理:统一数据服务平台