Redis概述
缓存数据库的兴起
-
时代的发展
随着进入CS架构+大数据时代;如果网站的数据量很大,一台机器是无法承载的!
关系型数据库单表数据量超过一定大小,就必须建立索引,否则查询效率极低
定位、热榜等数据实时变化且数据量大的服务逐渐兴起,MySQL等关系型数据库无法满足这些需求
-
Memcached + MySQL + 垂直拆分模式
多台数据库架构,需要进行数据库的备份,并不方便
-
网站80%的时间都在执行查询操作
缓存数据库十分适用于这样的场景!
-
网站数据模块的发展历程:
数据结构与索引的优化—>文件缓存(IO)—>Memcached
-
网站数据模块的发展历程:
数据结构与索引的优化—>文件缓存(IO)—>Memcached
网站数据库模块的发展历程
-
数据结构与索引的优化—>文件缓存(IO)—>Memcached
-
分库分表 + 水平拆分 + MySQL集群
数据库引擎由MyISAM的表锁转为Innodb的行锁,解决了读的压力
分库分表则用于解决写的压力,例如微服务中每一个服务单独使用一个数据库
- 一个博客网站系统:用户数据用MySQL;
- 阅读量、点赞量数据用Redis,过一段时间进行持久化
- 多媒体数据用mongodb/fastDFS
NoSQL定义
- 定义:NoSQL = Not Only SQL 不仅仅是SQL,泛指非关系性数据库
- NoSQL在当今大数据环境下的发展十分迅速,而Redis是当前发展最快的NoSQL
- 很多的数据如社交网络、地理位置,这些数据的存储不需要一个固定的行列格式,而且不需要很多操作就可以进行横向扩展(集群),非常适合用Map<String,Object>这样键值对形式来控制
NoSQL特点
- 方便扩展(由于数据之间没有关系)
- 大数据量且高性能(Redis一秒可以写8万次,读取11万)
- 数据类型是多种多样的(不需要设计数据库,随用随取)
传统RDBMS与NoSQL
- 传统RDBMS
- 结构化组织
- 数据和关系都存在单独的表中
- 严格的SQL语句
- 基础的事务、严格的一致性
- NoSQL
- 没有固定的操作语言
- 存储方式多种多样:键值对存储、列存储、文档存储、图形数据库
- 高性能、高可用、高扩展
- 最终一致性
- CAP、BASE理论的应用
NoSQL的四大分类
- KV键值对:Redis、Tair、Memecache
- 文档型数据库:MongoDB(最像关系型数据库)、ConthDB
- 列存储数据库:HBase、分布式文件系统
- 图形关系数据库:Neo4j、InfoGrid
大型互联网应用的问题
- 数据类型非常多且数据源繁多
- 经常需要重构
- 数据进行改造时,大量接口、持久层代码需要改动
解决之道
- 在网站应用集群和底层数据源之间,构建一层代理:统一数据服务平台