热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java高并发--缓存

Java高并发--缓存主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记在下图中每一个部分都可以使用缓存的技术。缓存的特征缓存命中:直接通过缓存获取

Java高并发--缓存

主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记

在下图中每一个部分都可以使用缓存的技术。

缓存的特征

  • 缓存命中:直接通过缓存获取到数据

  • 命中率:命中数 / (命中数+ 未命中数)

  • 最大元素(空间):超过最大空间将触发缓存清空策略

  • 清空策略:FIFO(先进先出)、LFU(最少使用)、LRU(最近最少使用)、过期时间、随机

缓存的粒度越小,缓存命中率越高,对比缓存一整个集合和集合中的某一个元素,或者一整个对象和对象的其中一个属性。

缓存适合的业务场景:读多写少,实时性要求越低,越适合缓存。因为实时性高,数据经常会表更新修改。

缓存的分类

  • 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache。与程序耦合性高,各个应用需要维护自己的本地缓存
  • 分布式缓存:Memcache、Redis。与程序是隔离的,缓存自身就是一个独立的应用。多个应用可以共享缓存。

缓存一致性

对数据实时性高的应用,要求数据库和缓存中的数据一致,这就比较依赖缓存的更新和更新策略了,一般在会在数据更改的时候主动更新缓存中的数据或者移除最近的缓存,这时候就可能出现缓存一致性问题。一般有以下四种情况。

缓存并发问题

缓存未命中时会尝试从后端数据库获取数据,在高并发的场景下可能会给数据库造成极大的冲击甚至导致缓存雪崩的现象,此外在某个缓存的key在被更新时,会被大量请求获取,也可能造成缓存一致性问题。如何解决呢?可以使用类似于锁的机制。在缓存更新或者过期的情况下,某个请求尝试获得锁,其他的请求必须等待,当从数据库获取完毕后再释放锁。

缓存穿透

在高并发场景下,对某个key的并发访问,没有命中缓存,出于容错性的考虑会从后端数据库中获取数据,导致大量请求对后端数据库的访问。当该key对应的数据本身是空的情况下,使得数据库中进行了大量不必要的查询操作,从而产生了大量的冲击和压力。

可以有以下几种策略:

  • 对于空对象也进行缓存,这样避免请求穿透到数据库了。需要保证缓存数据的时效性。这种实现简单,比较适合命中不高但可能被频繁更新的数据。
  • 单独过滤处理,对所有对应数据为空的key进行统一的存放,并在请求前作拦截,避免请求穿透到后端数据库。这种实现相对复杂,比较适合命中不高且更新不频繁的数据。

缓存雪崩

在说缓存雪崩时,先看看缓存抖动。缓存抖动比缓存雪崩更轻微的故障,通常是由于缓存结点的故障导致,推荐的做法是通过一致性哈希算法解决。缓存并发、缓存穿透、缓存抖动等都有可能导致缓存雪崩的发生。

缓存雪崩是由于缓存的原因导致大量请求到达后端数据库,从而导致数据库崩溃的灾难。


推荐阅读
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • java线程池的实现原理源码分析
    这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • Java编程思想一书中第21章并发中关于线程间协作的一节中有个关于汽车打蜡与抛光的小例子(原书的704页)。这个例子主要展示的是两个线程如何通过wait ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
  • http:simple-is-better.comnews1047Firefly是免费、开源、稳定、快速扩展、能“热更新”的分布式游戏服务器端框架,采用Python编 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
author-avatar
l38484676
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有