分布式缓存入门

什么数据适合缓存
  • 经过复杂计算得出的数据。
  • 频繁访问的热点数据。

为了减轻数据库的访问次数和压力。
在这里插入图片描述

分布式缓存

分布式缓存是为了解决数据库服务器和Web服务器之间的瓶颈,如果一个网站流量很大,每次数据库查询耗费的时间将不容乐观。对于更新速度不是很快的站点,可以采用静态化来避免过多的数据查询,可使用Freemaker或Velocity来实现页面静态化。对于更新数据以秒级的站点,静态化不太理想,可通过分布式缓存系统来解决,如Redis、MemCache、SSDB等(都是K-V存储)。

用户群体广泛就必然存在高并发的问题,如果将引用系统部署在单节点服务器上,势必会对单服务器造成巨大的访问压力,因此需要将系统部署到不同的节点上,同时也要将不同的数据分散到不同的节点上

Redis

在Web开发中,经常要重复从数据库中获取相同的数据,这种重复的操作极大地增加了数据库的负载。缓存是解决这种问题最好的办法。

Redis就是一个高性能的、分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

在用户第一次发送请求时,从关系型数据库RDBMS中获取数据并返回,同时将该数据保存到分布式缓存系统中。当用户再次发送请求时,直接从分布式缓存系统中获取,以提高性能。
在这里插入图片描述

  • Redis特点突出,支持多种value数据类型,如String、Hash、Set、List、StoredSet,并且有高可用的解决方案和集群方案,支持水平扩容。也就解决了大部分企业的需求,而MemCache、SSDB相对来说,解决方案并不算那么完善。

  • 与MemCache的区别:

    • Redis使用单核而Memcache使用多核,也就是说,Redis属于单线程操作(避免频繁的上下文切换),MemCache属于多线程操作。在多个用户同时请求时,Redis是处理完一个请求以后再去处理下一个请求。而MemCache可以同时处理多个请求。
      平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也升级新版本3.0以上支持多核,但是3.0以上版本除了增加很多功能外,性能还不如老版本。
    • Redis和MemCache都是将数据存储在内存中,都属于内存数据库。但是MemCache服务宕机或重启后数据是不可恢复的,而Redis服务宕机或重启后可以恢复。因此Redis可以做持久化,它会将内存数据定期同步到磁盘中。
      提供两种主要的持久化策略:RDB快照和AOF日志。使得Redis可以保存比较重要的数据不怕断电后数据丢失,同时基于数据持久化的分布式主从架构也提升了Redis的可用性和性能问题。
    • Redis支持数据备份,需开启master-slave主从策略(数据可以从主服务器向任意数量的从服务器上同步)。
数据不一致问题
  • 缓存与数据库数据不一致(最终一致性)问题,主要原因有:
    1.并发的场景下,导致读取老的 DB 数据,更新到缓存中。
    2.缓存和 DB 的操作,不在一个事务中,可能只有一个操作成功,而另一个操作失败,导致不一致。

  • Cache Aside Pattern旁路缓存(CAP)
    目前比较常用的解决方法,具体逻辑如下:
    失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。

    命中:应用程序从cache中取数据,取到后返回。

    更新:先把数据存到数据库中,成功后,再让缓存失效。
    在这里插入图片描述

  • Read/Write Through Pattern
    在Cache Aside套路中,应用代码需要维护两个数据存储,一个是缓存(Cache),一个是数据库(Repository)。所以,应用程序比较啰嗦。而Read/Write Through套路是把更新数据库(Repository)的操作由缓存自己代理了,所以,对于应用层来说,就简单很多了。可以理解为,应用认为后端就是一个单一的存储,而存储自己维护自己的Cache。

    Read Through
    Read Through 套路就是在查询操作中更新缓存,也就是说,当缓存失效的时候(过期或LRU换出),Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的

    Write Through
    Write Through 套路和Read Through相仿,不过是在更新数据时发生。当有数据更新的时候,如果没有命中缓存,直接更新数据库,然后返回。如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作)。

【转载】
分布式缓存系统
memcache与redis有何区别,redis有哪些优势?
深入理解缓存之缓存和数据库的一致性

猜你喜欢

转载自blog.csdn.net/qq_36281031/article/details/108412831