redis&memcached&SQL&NoSQL

丶灬走出姿态 提交于 2019-12-07 16:26:03

Why

  1. 一个应用肯定有两部分逻辑:数据逻辑和业务逻辑。
    • 数据逻辑包括各种I/O,和内部的数据的处理,也就是在内部如何组织数据结构,变量也属于这一部分。
  2. 当一个应用变成一个进程,它负责数据逻辑的部分就有了两个选择:
    • 将数据存在内存中,存在内存中的数据如果变得很重要,就需要保存进磁盘,所以有可能需要持久化的逻辑。为了更好的使用数据,需要有很好的数据结构建模,虽然基本的数据结构,甚至一些复杂的在程序语言或者库中都有集成,但是语言不负责执行,所以执行这一块还是进程自己在做。
    • 将数据存在磁盘中,这需要有存/取得逻辑,在取的这一部分,基于业务可能要有强大的检索逻辑
  3. 当应用的数据规模变得很大,相应的数据逻辑和业务逻辑也会变得很复杂
    1. 从效率上来说,是时候考虑分布式了,所以我们有必要将和数据有关的逻辑独立出去,比如磁盘上的检索,内存中数据的持久化等。
    2. 从开发和维护的角度来说,集中精力在业务而不是数据,可以使得代码量变少,开发速度和可维护性都大大提高。

How

  1. 显然要将数据逻辑尽可能独立出去,就要用到工具软件,redis、memcached、Sql,NoSql都是这个目的的工具
  2. redis、memcached 侧重于内存中的数据
    • 内存中的数据都有时效性,所以这两个工具都支持expire
    • memcached 只负责 数据的存、取和超时,在取得部分也不考虑复杂得检索逻辑
    • redis则更强大,它支持了5中数据结构,针对这些数据结构得操作也可以分离给它,同时还支持持久化,更强大的还支持主备、集群,可见它为分布式做了很好的工作。
  3. Sql、NoSql 侧重于磁盘侧数据
    • 需要存在磁盘的往往是重要数据,这些数据更偏现实,是人类可读的,不像内存中的数据比如堆栈、整型这样的。这种数据我们称之为用户数据,又或者事务数据。这类数据往往很大,所以检索成了一个基本要求。
    • NoSql 提供简单的检索,或者说基于算法的检索,比如hash、值比较、正则匹配等
    • Sql 则提供复杂的检索,或者说基于事物的检索,而事务是复杂,很难一次建模的,为此我们用现实分类的方式建表,将数据冗余的存于多个表,从而获得强大的事务描述能力,称之为关系型数据库,关系即是现实的数据模型的复杂联系。关系型数据库使得我们事务数据建模的难度大大降低,也就使得开发和维护的程度大大降低。另一方面,Sql集成了强大的数据分析能力,使得数据分析的使用门槛降低很多。
    • 不管是Sql还是NoSql都是C/S架构,很显然也使得分布式变得很容易

When

  1. 从上面可以看出偏内存的,选择redis或者memcache,偏磁盘的选择Sql、NoSql
  2. Nosql能做的,Sql都能做,memcached能做的redis都能做
    • Nosql 更简单,面向不是很复杂的事务数据模型,用不到很复杂的检索和建模,选择Nosql可以更快开发和检索。比如图书关的检索系统,图书的数据模型很简单,也不需要很事务的检索,这些检索用NoSql就可以做。这时候用NoSql速度快,开发快。
    • memcached又比redis简单,如果仅仅是数据量大,比如一个Web后端它对连接的一些记录例如cookie等,还有为了加快速度做的一些缓存,数据简单,设计的算法反倒不复杂,我们选memcached就很合适,速度更快,开发更快。
    • 在需要数据持久化的时候,memcached不适合,这时候选redis。
    • 在一些分布式架构中选redis,是因为它为分布式做了更多的工作,比如甚至提供了Publish/Subscribe 功能。memcached在分布式中最大做缓存,而redis是可以承接类似“中立交换语言”如json、xml所起的作用。
  3. 可以用redis或者memcached的场合,理论上SQl、NoSql也可以做,但是前者在内存中,速度肯定快很多。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!