Skip to content

Latest commit

 

History

History
76 lines (55 loc) · 5.39 KB

File metadata and controls

76 lines (55 loc) · 5.39 KB

Redis

PS:待开发中。。。。

作者网页:www.jcohy.com

我的学习笔记,记录学习过程中的笔记以及遇到的问题,以及我的一些经验总结。如果出现链接失效,或者想知道更多的内容等情况可以提交 Issues 提醒我修改相关内容。 Ps:在学习Redis之前,先简单介绍一些关于NoSql相关的知识。

NoSql入门和概述

为什么使用NoSql

    在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。 使用的架构也比较简单。比如一个网站开发,最开始一般都是使用的LAMP(Linux+Apache+MySql+PHP)。使用单个数据库足以应付。但这样的架构,他的数据库瓶颈是什么?

  • 数据量的大小一个数据库放不下时。
  • 数据的索引(B+树)一个机器内存放不下时。
  • 读写混合一个实例不能接受时。

如果满足上面的一个或者多个,这个时候,我们就要对这种架构进行演化。

  • 使用缓存技术(Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端)
  • 优化数据结构和索引
  • 对数据库进行垂直拆分(即多个数据库)

因为Memcached等只能缓存数据库的读取能力,而写的压力不断增加。如果将读写集中在一个实例上,数据库将不堪重负。大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。

  • 数据库主从读写分离

在Memcached的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM引擎使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎(使用行锁)代替MyISAM。 同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。

  • 使用集群

即便如此,这种关系型数据库也有他的瓶颈,MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时 候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小, 如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。 MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。

尤其是在这个大数据的时代,传统的关系型数据库已经不满足与我们的需求。NoSql也就顺势而出了。

什么是NoSql

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”
泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

NoSql的特点

  • 易扩展

数据之间无关系,这样就非常容易扩展。

  • 大数据量高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。 这得益于它的无关系性,数据库的结构简单。 一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache, 在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的, 是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了

  • 灵活性

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里, 增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦

NoSql的分类

  • Redis
  • memcache
  • Mongdb
  • ......