缓存的分类

缓存主要分为四类,如下图:

分布式缓存_缓存

分布式缓存

指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存。

设计理念

由于是分布式系统,其对内存的使用也有别于传统系统,首先要考虑到多个实例之间内存的同步,同时由于业务逻辑前移到Java端,不可避免的增加了对数据库的访问次数,合理使用缓存机制,将大大提升系统的整体性能。但考虑到传统的缓存机制面临的一些问题,以及结合业界的最新发展趋势,galaxy采用分布式缓存来承载分布式系统对缓存的诉求。

缓存使用场景

对于分布式缓存而言,其等同于数据库一样的基础设施,而不是传统系统中的应用中的内存的一部分。经过对金融行业的业务进行分析,分布式缓存的使用场景主要包括如下几种:

  • 系统级参数:对于系统级参数等信息,在平台启动时就可以自动加载到分布式缓存中,这样在运行时多个实例就可以从一个地方快速的访问,对其的维护可以通过独立的交互业务进行统一维护。
  • Session 级共享数据:某些交易如果涉及多个实例,在前面实例中产生的中间数据就可以存储到分布式缓存中,后续其它实例就可以从分布式缓存中直接使用这些数据。
  • 跨交易的共享数据:有些关联交易虽然是两个不同的交易,但前一个交易产生的数据有可能在后续的交易中使用,这种场景也可以将前面交易产生的数据存储在分布式缓存中,然后后面的交易可以直接从分布式缓存中直接读取需要的业务数据进行后续操作,操作完成后可以将该缓存信息直接删除,或者采用定时删除的策略进行删除。
  • 业务热点数据长久缓存:有些业务的数据访问的频率很高,也就是也一些业务的热点数据,可以较长时间的存储到分布式缓存中,可以减少很多交易跟数据库的访问次数。

Memcached

Memcached 是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 Hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcached 的特点如下图:

分布式缓存_数据_02

Memcached 的基本架构如下图:

分布式缓存_缓存_03


缓存数据过期策略:LRU(最近最少使用)到期失效策略,在 Memcached 内存储数据项时,可以指定它在缓存的失效时间,默认为永久。

当 Memcached 服务器用完分配的内存时,失效的数据被首先替换,然后是最近未使用的数据。

数据淘汰内部实现:懒淘汰机制为每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做 TTL 比较来判断是否过期。

分布式集群实现:服务端并没有 “ 分布式 ” 功能。每个服务器都是完全独立和隔离的服务。Memcached 的分布式,是由客户端程序实现的。

分布式缓存_分布式缓存_04


分布式缓存_分布式缓存_05

Redis

Redis 是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。


 

它可以存储键值对与 5 种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能。


 

Redis 还可以使用客户端分片来扩展写性能,内置了 复制(replication),LUA 脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence)。


 

并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。

Redis 的数据模型如下图:

分布式缓存_缓存_06

Redis 的数据淘汰策略如下图:

分布式缓存_分布式缓存_07

Redis 的数据淘汰内部实现如下图:

分布式缓存_数据_08

Redis 的持久化方式如下图:

分布式缓存_缓存_09

Redis 与Memcached 的比较如下图:

分布式缓存_缓存_10


关注公众号 soft张三丰 

分布式缓存_缓存_11