分布式缓存

使用场景

  1. DB缓存,减轻服务器压力

  2. 提高系统响应

  3. 做Session分离

    img

  4. 分布式锁(Redis)

    多个进程(JVM)在并发时也会产生问题,也要控制时序性,使用Redis实现 sexNX

  5. 乐观锁(Redis)

    同步锁和数据库中的行锁、表锁都是悲观锁,悲观锁的性能是比较低的,响应性比较差

    高性能、高响应(秒杀)采用乐观锁,Redis可以实现乐观锁 watch + incr

不同架构看缓存

  • 单体架构imgimg

  • 集群架构

    • 演进imgimgimg
  • 微服务架构img

分类

  • 系统级缓存

    • CPU缓存

      • L1缓存

        • 数据缓存(L1d Cache)

        • 指令缓存(L1d Cache)

  • 客户端缓存

    • 页面缓存

      • 页面自身对某些元素或全部元素进行缓存

        • html5:Cookie、WebStorage(SessionStorage和LocalStorage)、WebSql、indexDB、Application Cache等
      • 服务端将静态页面或者动态页面进行缓存,然后给客户端使用

    • 浏览器缓存img

    • App缓存

      • Android

        • 轻量级缓存框架:ASimpleCache

        • 可以缓存:JSon、BitMap、序列化的Java对象和二进制数据等

      • iOS

        • sDWeblmage

        • NsCache

  • 服务端缓存

    • 数据库缓存

      • 如MySQL的查询缓存Query Cache

      • K-V结构,Key:select语句的hash值,Value:查询结果

      • InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引及数据块

    • 平台级缓存(带有缓存功能的专用库,或者具有缓存特性的框架)

      • 分类

        • Ehcache

          • 多级缓存策略

          • 缓存的数据在内存和磁盘当中

          • 缓存数据在虚拟机重启的过程中写入磁盘

          • 可以通过RMl或接口的方式实现分布式缓存

          • 允许注册事件来侦听缓存

        • Guava Cache

          • Guava是一套java工具包

          • 相对于CurrentHashMap,限制内存的使用,会自动回收元素

        • SpringCache

          • 通过少量的配置就可以使得既有代码支持缓存

          • 不用安装和部署额外第三方组件就可以使用缓存

          • 支持Spring Express Language

          • 支持Aspecty

          • 支持自定义key,具有相当的灵活性和扩展性

        • Jboss Cache

          • 支持树状结构

          • 支持集群

          • 支持事务的缓存框架

          • 缓存加载器

          • 驱逐策略

          • 缓存钝化

          • 并发

        • OSCache

          • 缓存任何对象

          • 拥有全面的API

          • 永久缓存

          • 支持集群

          • 缓存过期

      • 特点

        • 基于应用程序的缓存库

        • 具有一定的分布式能力

        • 数据不能保证强一致性

        • 无法保证高可用

      • 选型

        • Spring Cache不仅可以自己使用还可以与其他缓存框架做做整合img
    • 应用级缓存

      • Redis和Memcached

        • 最重要的区别是Redis键值不宜过大,会影响性能
      • CDN缓存

        • Content Delivery Network(内容分发网络)

        • 优点

          • 本地Cache加速

          • 实现跨运营商的网络加速

          • 远程加速

          • 带宽优化

          • 集群抗攻击

读写模式

  • 旁路缓存Cache Aside Pattern(常用)

    • img

    • 更新img

  • Read/Write Through Pattern

    • 应用程序只操作缓存,缓存操作数据库

    • Read-Through(穿透读模式/直读模式)

      • 应用程序读缓存,缓存没有,由缓存回源到数据库,并写入缓存
    • Write-Through(穿透写模式/直写模式)

      • 应用程序写缓存,缓存写数据库
    • 该种模式需要提供数据库的handler,开发较为复杂。

  • Write Behind Caching Pattern

    • 应用程序只更新缓存。

    • 缓存通过异步的方式将数据批量或合并后更新到DB中

    • 不能时时同步,甚至会丢数据

posted @ 2022-01-10 23:02  请务必优秀  阅读(485)  评论(0编辑  收藏  举报