Redis缓存——入门

1.持久化数据库的缺点:

1)存储在部署数据库的硬盘上

也就是说我们日常使用的关系型数据库中的数据,全部存储在我们部署数据库的机器的硬盘中。

 2)访问速度

网站的运行速度与服务器的读写效率、服务器的宽带有关,这些因素可以通过升级的方式来解决。而服务器处理数据的速度,与数据查询、数据处理等和数据库处理速度有关。所以,提高数据库处理数据的能力很重要。

其实,sql语句优化可以提高处理效率。但是如果网站的访问量非常大的时候,我们的数据库压力就变大了。数据库的连接 池、处理数据的能力就会面临很大的挑战。此时就要使用高并发处理、负载均衡和分布式数据库了。但是,这些会花费很大的人力、资金。

2.缓存的含义:

 1)定义

          缓存就是将数据库数据备份在内存中,当数据没有发生本质变化的时候,我们不直接连接数据库,而是在内存中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度要比从数据库查询要快得多,也提高了查询效率。

 2)缓存的形式

          页面缓存(smarty静态化技术):页面缓存经常用在CMS(content manage system)内存管理系统里面。

          数据缓存:经常会用在页面的具体数据里面。

3、Redis介绍

Redis是Remote Dictionary Server(远程数据服务)的缩写,Redis是基于内存,也可以基于磁盘持久化nosql数据库,使用c语言开发的一款内存高速缓存数据库,数据存储结构:key-value。它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。

 Redis作为一个高性能的key-value数据库具有以下特征: 

  • 多样的数据模型 
  • 持久化 
  • 主从同步  

Redis支持丰富的数据类型,最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。

Redis有一个很重要的特点就是它可以实现持久化数据(一边运行,一边把数据往硬盘中备份一份,防止断电等情况导致数据丢失,等断电情况恢复之后,Redis再把硬盘中的数据恢复到内存中),通过两种方式可以实现数据持久化:①使用RDB快照的方式,将内存中的数据不断写入磁盘;②使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。

4.Redis如何实现分布式可拓展性?

2.8以前的版本:与Memcached一致,可以在客户端实现,也可以使用代理,twitter已开发出用于Redis和Memcached的代理Twemproxy 。

3.0 以后的版本:相较于Memcached只能采用客户端实现分布式存储,Redis则在服务器端构建分布式存储。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,各个节点地位一致,具有线性可伸缩的功能。如图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个 key的数值域分成16384个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是16384

d4.jpg

5、为什么选择Redis

    1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    2)Redis支持master-slave(主-从)模式应用
    3)Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
    4)Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。

6.与Memcached的综合比较

 应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强大的功能。具体来说:

1.性能上:

     性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比

Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。

2.内存空间和数据量大小:

     MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。

3.操作便利上:

     MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。

4.可靠性上:

     MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。

5.应用场景:

     Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。

     Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

六、需要慎重考虑的部分

1.Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB

2.Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高

3.从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库,支持五种数据类型,因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用

4.新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求,各个节点可以交流,可拓展行、可维护性更强大。

猜你喜欢

转载自blog.csdn.net/weixin_38676357/article/details/82114903