1  Redis架构分析

1.1   为什么要用nosqlàredis

1)存储方式的区别:

  nosql:使用K-V的方式存储数据

例如:mset   id 0001  name  zhangsan age   18

  关系型数据库:使用多表结构关联的方式存储数据

例如:

Id

Name

Age

0001

Zhangsan

18

 

2)读写方式的区别:

  nosql:可以把不同类型的数据通过k-v的方式进行快速的读写操作,无关系性、数据结构简单。

  关系型数据库:在不同类型的数据下需要进行多表关联的方式读写,造成性能上损耗     

wKiom1WEI1Sj3U50AAG1tbDFox0900.jpg

             

       3nosql的优缺点

优点:读写数据快,取决于他的无关系性,数据库结构简单。

              缺点:不支持sql工业化的数据操作,对于业务类型的数据使用不方便,并且最重要的是不支持对于事务的操作。不适合做数据安全性要求很高的数据存储。

1.2   为什么redis可以快速,并且替代memcache,占领市场

1.2.1  为什么要与memcache来比较

其他的缓存框架(如oscache)只是一个小型的jar包形式的框架,档次不够,而memcacheredis一样也是可以独立运行在服务器上,并且支持了分布式集群,但是我们今天的redis不光是独立运行,还支持了分布式集群,而且还支持持久化和丰富数据类型,并且在缓存上更加优秀。

1.2.2  了解Memcache实际应用中出现的问题

1)Memcache数据丢失问题:

为了防止意外(服务器宕机、断电),会把一个时间段缓存中的数据插入到DB中,这个过程会给服务器运行效率带来巨大的影响,如果这个时候在高并发的时间段,可能造成服务器压力过大出现死机,数据丢失,然而这种数据的丢失对于企业来说却是灾难性的,所以一般我们会把入库的时间与并发的时间分开(2-3个小时)。

2)数据一致性的问题:

在这个时差(2-3个小时)有的模块已经修改了DB中的数据,但是memcache还没有同步,所以数据就不一致了,为了解决数据一致和命中率的问题,在企业中通常让客户端请求读取不到的数据,去DB中读取,导致大量请求穿透到DB,导致DB无法支撑。

3)命中率低问题:

hash算法是有失误率的,可能在某一段时间的失误率很大导致在memcache中读取不到数据。同时为了解决命中率的问题,在企业中通常也会让客户端请求读取不到的数据,去DB中读取,也会导致大量请求穿透到DB,导致DB无法支撑。

4)业务量增加、访问量持续增长的问题:

导致DBmysql)表结构的变化,需要重新建表、拆表,memcache也需要扩容,这些工作会浪费很多的人力、物力,造成资源上的浪费。

1.2.3  Memcache+mysql  vs redis

1redis支持了数据持久化的功能(相当于数据库),我们可以配置让从服务器来做RDBAOF

 a)可以在很大的程度上防止了数据的丢失。

 bredis提供了持久化(相当于数据库),可以设计实现前后台数据分离,数据一致性和命中率的问题完全由redis解决。redis存储数据结构简单,建表拆表的情况不存在。

2)数据类型

(a)memcache只支持string类型。

(b)Redis支持5种数据类型,企业使用更加方便。

3)缓存性能

a)缓存性能比memcache优(在数据结构、内存使用上进行了优化调整,所以比memcache性能优)

b)内存使用区别:

Memcache:使用内存池的方式,可以省去申请/释放内存的开销,但是在空间上就有了浪费,因为他不能释放空闲内存空间。当内存空间不够的时候,memcache即便是新数据也会被剔除。

Redis:现场申请内存的方式来存储数据。所以不存内存空间的浪费。当内存空间不够的时候,即便是导致swap(替换),也不会剔除数据(非临时数据)。所以Redis更适合作为存储而不是cache

1.3   Redis在企业架构中的应用

l  redis在电商网站中存储的是门户数据,用来处理大数据,高并发的问题

l  关系型数据库在电商网站中存储的是后台业务类型的数据。

wKioL1WEJayhfQSSAAE7qyb-wK8688.jpg

1.4   Redis应用场景

l  应用范围:电商购物商品信息缓存、商品抢购、购票系统的队列、新浪微博对于大量不同数据类型的操作、实时聊天信息平台、游戏排行榜

  可用场景:数据量比较大且数据内容变化大的场合,需要进行数据快速的读写。并且对数据的安全性要求不高。

  不可用的场合:对于数据安全性要求绝对高的情况,比如:银行转账、存取款。

1.5   总结:

1.nosql->redis与关系型数据库差别:

存储方式:数据存储结构简单,不存在表关联

读写速度:速度快,取决于结构简单、无关系型

2.针对于同级别的缓存框架而言,与memcache的对比

              --缓存性能比memcache

              --数据类型丰富

              --持久化

3.memcache+mysqlredis对比

              业务数据量的不断增加,和访问量的持续增长,遇到的问题:

                   --mysql需要建表拆表,memcache需要扩容

                    --数据一致性(持久化)

                          --访问穿透到DB