Java面试必考点--第08讲:高并发架构基石 - 缓存

本篇博客深入探讨了Java面试中关于缓存的重要知识点,包括缓存类型、淘汰策略、Memcache和Redis的详细对比。文章详细介绍了Memcache的内存结构与钙化问题,以及Redis的持久化、高可用性及其丰富的数据结构。同时,讨论了缓存的常见问题,如数据不一致、缓存穿透、击穿和雪崩,提供了应对策略。
摘要由CSDN通过智能技术生成

本课时介绍缓存相关的知识点以及 Memcache 和 Redis 这两个最常使用的缓存。重点学习以下三个方面的内容:

  1. 使用缓存时常遇到的典型问题;

  2. Memcache 的内存结构;

  3. Redis 相关的知识点以及 Redis 常用结构的实现。

缓存知识点
类型

缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。

本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache 这样的工具来实现。本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。

分布式缓存可以很好得解决这个问题。分布式缓存一般都具有良好的水平扩展能力,对较大数据量的场景也能应付自如。缺点就是需要进行远程请求,性能不如本地缓存。

为了平衡这种情况,实际业务中一般采用多级缓存,本地缓存只保存访问频率最高的部分热点数据,其他的热点数据放在分布式缓存中。

淘汰策略

不管是本地缓存还是分布式缓存,为了保证较高性能,都是使用内存来保存数据,由于成本和内存限制,当存储的数据超过缓存容量时,需要对缓存的数据进行剔除。一般的剔除策略有 FIFO 淘汰最早数据、LRU 剔除最近最少使用、和 LFU 剔除最近使用频率最低的数据几种策略。

Memcache

注意后面会把 Memcache 简称为 MC。

先来看看 MC 的特点:

  • MC 处理请求时使用多线程异步 IO 的方式,可以合理利用 CPU 多核的优势,性能非常优秀;

  • MC 功能简单,使用内存存储数据,只支持 K-V 结构,不提供持久化和主从同步功能;

  • MC 的内存结构以及钙化问题后面会详细介绍;

  • MC 对缓存的数据可以设置失效期,过期后的数据会被清除;

  • 失效的策略采用延迟失效,就是当再次使用数据时检查是否失效;

  • 当容量存满时,会对缓存中的数据进行剔除,剔除时除了会对过期 key 进行清理,还会按 LRU 策略对数据进行剔除。

另外,使用 MC 有一些限制:

  • key 不能超过 250 个字节;

  • value 不能超过 1M 字节;

  • key 的最大失效时间是 30 天。

Redis

先简单说一下 Redis 的特点,方便和 MC 比较。

  • 与 MC 不同的是,Redis 采用单线程模式处理请求。这样做的原因有 2 个:一个是因为采用了非阻塞的异步事件处理机制;另一个是缓存数据都是内存操作 IO 时间不会太长,单线程可以避免线程上下文切换产生的代价。

  • Redis 支持持久化,所以 Redis 不仅仅可以用作缓存,也可以用作 NoSQL 数据库。

  • 相比 MC,Redis 还有一个非常大的优势,就是除了 K-V 之外,还支持多种数据格式,例如 list、set、sorted set、hash 等。

  • Redis 提供主从同步机制,以及 Cluster 集群部署能力,能够提供高可用服务。

详解 Memcache(MC)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值