高并发之缓存

samuel1 samuel1     2023-01-10     278

关键词:

为何缓存?

目前磁盘IO和网络IO相对于内存IO的大幅度性能劣势,通过将高频使用的数据存储在离近CPU的位置,以减少传输时间,提高处理效率。

系统缓存:

  • CPU在从内存里读取数据的时候,会额外的读许多数据到内存里;
  • 各个输入输出之间用buffer保存一批数据统一发送和接收。

软件设计缓存:

  • web服务将静态资源提前部署到CDN;
  • 数据库缓存查询,一级缓存,二级缓存;

内存数据库(redis)把大量数据存在内存而非硬盘;

缓存Tips:

缓存穿透

收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。这里面有两个风险,一个是同时有好多请求访问同一个数据,然后业务系统把这些请求全发到了数据库;第二个是有人恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次请求都会被发送到数据库,可能导致数据挂掉。

解决方案:

  • 事先做校验,对恶意数据直接过滤掉,不要发到数据库层;
  • 缓存空结果,就是对查询不存在的数据仍然记录一条该数据不存在在缓存里,这样能有效的减少查询数据库的次数。

那么非恶意访问呢?这个要结合缓存击穿来讲

缓存击穿

对于热点数据,当数据失效,所有请求都死去数据库请求更新缓存,数据库被压垮。

解决方案:

  1. 全局锁,就是所有访问某个数据的请求都共享一个锁,获得锁的那个才有资格去访问数据库,其他线程必须等待。但是现在的业务都是分布式的,本地锁没法控制其他服务器也等待,所以要用到全局锁,比如用redis的setnx实现全局锁。
  2. 对即将过期的数据主动刷新,比如起一个线程轮询数据,比如把所有数据划分为不同的缓存区间,定期分区间刷新数据等等。

我们给所有的数据设置了同样的过期时间,然后在某一个历史性时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都被打到了数据库,数据库就崩了。

解决思路要么是分治,划分更小的缓存区间,按区间过期;要么是给每个key的过期时间加个随机值,避免同时过期,达到错峰刷新缓存的目的。

 

nginx高并发优化之静态文件缓存配置

一、配置httpopen_file_cachemax=65535inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses4;open_file_cache_errorson;二、说明NGINX虽然已经对静态内容做过优化。但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能。NGINX缓存将最... 查看详情

高并发缓存之缓存介绍redis基本应用介绍(代码片段)

前言本篇文章主要介绍缓存得概念、作用、场景、组件;以及redis介绍、应用场景分析常见客户端使用。以及spring缓存注解得介绍。缓存为什么需要缓存其实就是为了加强服务器检索效率;也是由于持久化层数据库访问数... 查看详情

高并发系统之限流特技

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,... 查看详情

聊聊高并发系统之限流特技(代码片段)

  在开发高并发系统时,有很多手段用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统处理能力,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉... 查看详情

聊聊高并发系统之限流特技-1开涛

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,... 查看详情

大流量高并发系统之限流特技

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂... 查看详情

高并发之网络io模型

你好,我是坤哥今天我们聊一下高并发下的网络IO模型高并发即我们所说的C10K(一个server服务1w个client),C10M,写出高并发的程序相信是每个后端程序员的追求,高并发架构其实有一些很通用的架构设计,如无锁化,缓存等,今... 查看详情

高并发多线程之线程基础中生命周期线程封闭cpu缓存(代码片段)

...的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一... 查看详情

大流量高并发量网站的之解决方案

...3、CPU周期优化方法:扩充内存4、内存带宽二、大流量高并发量网站的解决方案1、确认服务器硬件是否足够支持当前的流量。2、使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库... 查看详情

8.软件架构设计:大型网站技术架构与业务架构融合之道---高并发问题(代码片段)

第8章高并发问题8.1问题分类 8.1.1侧重于“高并发读”的系统 1.场景一:搜索引擎 读写的差异: a)数量级 b)响应时间 c)频率 2.场景二:电商的商品搜索 3.场景三:电商系统的商品描述,图片和价格 8.1... 查看详情

高并发系统设计之缓存(代码片段)

本文已收录至Github,推荐阅读👉Java随想录这篇文章来讲讲缓存。缓存是优化网站性能的第一手段,目的是让访问速度更快。说起缓存,第一反应可能想到的就是Redis。目前比较好的方案是使用多级缓存,如CPU... 查看详情

高并发缓存架构

mysql单机并发量:机器硬盘300并发SSD硬盘700并发redis单机并发量10万 tomcat单机最优并发2000 java高并发测试用例:  加锁  互斥锁: 缓存名:amount, 主动缓存(时间短)缓存名:amount_backup,被动缓存(时... 查看详情

高并发解决方案之actor——第一节

还在为状态的并发控制而痛苦吗? 还在因为数据库瓶颈而痛苦吗? 还在因为缓存的实时性控制而痛苦吗? 还在为了想分布式,但又不知道怎么下手而痛苦吗? Actor欢迎你!!! 一、什么是Actor? Actor提供... 查看详情

高并发多线程基础之线程池(代码片段)

高并发多线程之线程基础中生命周期、线程封闭、cpu缓存前言本篇文章描述我们jdk给我们提供的线程池;了解为什么使用线程池,有哪些优点,以及几种Executors中提供给我们的工厂创建方法等线程池的原理为什么要使... 查看详情

并发与高并发

二、CPU多级缓存2-1CPU高级缓存-缓存一致性(MESI协议)1.为什么需要CPU缓存?答:CPU的频率太快了,快到主存赶不上,这样在处理器时钟周期内,CPU常常要等待主存,浪费了资源。所以缓存的出现,是为了缓解CPU和内存之间速度不匹... 查看详情

高并发环境下构建缓存服务,你需要注意这6点

摘要:高并发环境下构建缓存服务需要注意哪些问题?本文分享自华为云社区《​​【高并发】高并发环境下构建缓存服务需要注意哪些问题?​​》,作者:冰河。缓存特征(1)命中率:命中数/(命中数+没有命中数)(2)最大... 查看详情

大厂面试01期高并发场景下,如何保证缓存与数据库一致性?

面试题:高并发场景下,如何保证缓存与数据库一致性?问题分析我们日常开发中,对于缓存用的最多的场景就像下图一样,可能仅仅是对数据进行缓存,减轻数据库压力,缩短接口响应时间。这种方案在不需要考虑高并发得去... 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情