服务端Web资源缓存
1.前言
虽然客户端缓存效果很好,但它有一个核心问题:要在本地提供资源,必须先将其存储在缓存中。因此,每个客户端都需要其缓存的资源。如果请求的资源需要大量计算,则无法扩展。服务器端缓存背后的理念是计算一次资源,然后从缓存中将其提供给所有客户端。
专用的服务器端资源缓存解决方案: Memcached,Varnish,Squid、Redis、Hazelcast。
2.演示
使用 Apache APISIX 来演示服务器端缓存。APISIX 依赖于代理缓存插件进行缓存。不幸的是,目前 APISIX 不与任何第三方缓存解决方案集成。它提供两种选项:基于内存和基于磁盘。
一般来说,前者速度更快,但内存昂贵,而后者速度较慢,但磁盘存储便宜。然而,在 OpenResty 中,由于 LuaJIT 处理内存的方式,磁盘选项可能更快。您可能应该从磁盘开始,如果速度不够快,请挂载/dev/shm。
2.1.创建新路由
apisix.yaml配置:
routes:- uri: /cacheupstream_id: 1plugins:proxy-rewrite:regex_uri: ["/cache(.*)", "/$1"]proxy-cache: ~
请注意,默认缓存键是主机和请求 URI,其中包括查询参数。
当然也可以通过修改路由配置绕过缓存,配置如下:
routes:- uri: /cache*upstream_id: 1proxy-cache:cache_bypass: ["$arg_bypass"]
curl -v localhost:9080/cache?bypass=please
2.2.默认proxy-cache配置
使用默认的基于磁盘的配置。
config-default.yaml配置:
proxy_cache: # Proxy Caching configurationcache_ttl: 10s # The default caching time in disk if the upstream does not specify the cache timezones: # The parameters of a cache- name: disk_cache_one # The name of the cache, administrator can specify# which cache to use by name in the admin api (disk|memory)memory_size: 50m # The size of shared memory, it's used to store the cache index for# disk strategy, store cache content for memory strategy (disk|memory)disk_size: 1G # The size of disk, it's used to store the cache data (disk)disk_path: /tmp/disk_cache_one # The path to store the cache data (disk)cache_levels: 1:2 # The hierarchy levels of a cache (disk)- name: memory_cachememory_size: 50m
启动对应的应用,即可进行后续的测试工作。
2.3.测试
2.3.1.测试命令
curl -v localhost:9080/cache
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 147
< Connection: keep-alive
< Date: Thu, 16 May 2024 06:35:00 GMT
< Last-Modified: Thu, 16 May 2024 07:41:00 GMT
< ETag: "637e271f-93"
< Server: APISIX/3.0.0
< Apisix-Cache-Status: MISS
< Accept-Ranges: bytes
2.3.2.MISS
.
.
.
Apisix-Cache-Status: MISS
.
.
.
2.3.3.HIT
如果我们curl再次在默认缓存过期时间(300 秒)之前,响应来自缓存
.
.
.
Apisix-Cache-Status: HIT
.
.
.
2.3.4.EXPIRED
.
.
.
Apisix-Cache-Status: EXPIRED
.
.
.
2.3.5.清除整个缓存
请注意,我们可以使用自定义 PURGE HTTP 方法显式清除整个缓存:
curl localhost:9080/cache -X PURGE
相关文章:

服务端Web资源缓存
1.前言 虽然客户端缓存效果很好,但它有一个核心问题:要在本地提供资源,必须先将其存储在缓存中。因此,每个客户端都需要其缓存的资源。如果请求的资源需要大量计算,则无法扩展。服务器端缓存背后的理念是计算一次资源…...

STM32-09-IWDG
文章目录 STM32 IWDG1. IWDG2. IWDG框图3. IWDG寄存器4. IWDG寄存器操作步骤5. IWDG溢出时间计算6. IWDG配置步骤7. 代码实现 STM32 IWDG 1. IWDG IWDG Independent watchdog,即独立看门狗,本质上是一个定时器,这个定时器有一个输出端&#…...

Android手动下载Gradle的使用方法
导入新项目通常会自动下载gradle版本,这种方式很慢而且经常下载失败,按照提示手动下载的gradle应该放在那里,如何使用,本篇文章为你提供一种亲测有效的方法: 在Android Studio打开Setting搜索Gradle找到Gradle的存放目…...

2024彩虹医械维修培训邀请
INVITATION 2024年5月20日 时间/TIME 地点/SITE (西安、成都) 随着我国医疗水平的提升,为适应现代医疗的发展步伐,提升医疗服务水平,各个医院在当下都开始重视医疗器械的维修。在医械行业,由于医疗器械…...

车辆超龄无法注册滴滴司机怎么办理账号
车辆超龄无法注册滴滴司机,别担心这个视频教你如何解决,滴滴司机注册过程中 车辆年限是一个常见的限制条件,如果您的车辆超过了8年,那么注册滴滴可能会遇到困难,但是不要因此而放弃成为滴滴司机的机会,《 …...

MATLAB车辆动力学建模 ——《控制系统现代开发技术》
引言 在上这门课之前,我已经用过CasADi 去做过最优化的相关实践,其中每一步迭代主要就是由:对象系统优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 ,因为它是每一步迭代中重要的一环——“优化求解”会获得控制…...

复杂json解析(其中有一个key的value是json格式的字符串)
app上报的参数如下: {"clientId": "8517895440514039afcf6d3e5d7832ae","dua": "SNDOCKCJPH90_GA&VN900042418&BN0&VCXiaomi&MOM2012K11AC&RL1080_2239&CHIDunknown_unknown&LCID&RV&OSAndroid13&…...

线程池的一些问题
核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…...

企业或者个体户为什么会经营异常?
在复杂多变的市场经济环境中,无论是企业还是个体工商户,都可能遭遇经营异常的情况。及时识别这些预警信号并采取有效措施,对于避免潜在风险、保持健康发展至关重要。本文将深入探讨企业与个体户常见的经营异常类型、识别方法以及应对策略&…...

ROS从入门到精通4-3:制作Docker镜像文件Dockerfile
目录 0 专栏介绍1 为什么需要Dockerfile?2 Dockerfile书写原则3 Dockerfile常用指令3.1 FROM3.2 MAINTAINER3.3 RUN3.4 ADD3.5 COPY3.6 CMD3.7 ENV3.8 EXPOSE3.9 WORKDIR3.10 ARG 4 Dockerfile构建ROS工程实例 0 专栏介绍 本专栏旨在通过对ROS的系统学习࿰…...
【CV】计算机视觉是什么?
计算机视觉是一门研究如何使机器“看”的学科,旨在实现从图像或视频中获取信息的技术和方法。它涵盖了图像处理、模式识别、机器学习等多个领域,是人工智能领域的重要分支之一。以下是计算机视觉的一般概要介绍: 概要介绍: 图像…...
如何在Vue中实现鼠标悬浮展示与隐藏弹窗的功能
如果你需要鼠标在元素和弹窗上时保持弹窗显示,而鼠标离开这两者时隐藏弹窗,你可以使用一个稍微复杂的逻辑来处理鼠标的进入和离开事件。 这通常涉及到延时关闭弹窗,以便给用户足够的时间从元素移动到弹窗上,而不触发弹窗关闭。以…...

03 Linux编程-进程
1、进程的相关概念 1.1 程序与进程 程序是静态的概念,进程是程序的一次运行活动。 1.2 查看系统中有哪些进程 ps #只显示一小部分进程 ps -aux #会打印当前所有进程 ps -aux|grep init #使用grep筛选出只含有init的进程top #运行显示的进程有点类似windows…...

Hbuild-X运行ios基座app
一、说明 ios真机第一次运行的时候需要下载插件,这个都是自动监测,自动下载的,不用多说。ios真机运行是需要签名的,不然就会报以下错误。如何制作免费的签名证书呢,需要借助爱思助手来完成。 二、安装爱思助手 &…...

Node.js基础:从入门到实战
初识 Node.js 与内置模块 (初识) 1、知道什么是node.js 2、知道node.js可以做什么 3、node.js 中js的组成部分 (内置模块) 4、用 fs 模块读写操作文件 5、使用 path 模块处理路径 6、使用http 模块写一个基本的web服务器 初识 N…...
考研408笔记总结~
目录 一.数据结构 二.计算机组成原理 三.操作系统 四.计算机网络 私以为边看视频,边做笔记会更专注些,大家需要自取。欢迎大家和我一起探讨考研的问题,包括不仅限于专业课,数学,英语等等......,想说什么…...
使用在线工具等方式下载推特视频
使用在线工具等方式下载推特视频 使用在线工具 Visit a Twitter video downloader website: Websites like twdown.net, twittervideodownloader.com, and savevideo.me offer services to download Twitter videos.Paste the Twitter video URL into the designated input bo…...
性能优化:几方面考虑
我们可以继续再考虑下关于性能优化,我们还能从哪些方面着手呢? 1. 代码层面: 使用更高效的数据结构和算法。使用缓存避免多次数据库交互减少不必要的计算和内存分配。利用并行和异步编程提高性能。使用性能分析工具定位和优化瓶颈。 2. We…...
学习大数据:论学习Spark的重要性
随着科技的不断发展,大数据已经成为了当今社会的热门话题。大数据技术的出现,为我们提供了处理海量数据的新方法,使得我们能够从这些数据中挖掘出有价值的信息。在众多的大数据处理框架中,Apache Spark无疑是最为出色的一种。本文…...
学习java第七十一天
DI:依赖注入 依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象(可能包含了B类型中需要依赖对象),此时spring在创建B对象的时候…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
【设计模式】1.简单工厂、工厂、抽象工厂模式
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 简单工厂模式、工厂方法模式 和 抽象工厂模式 的 Python 实现与对比,结合代码示例和实际应用场景说明: 1. 简单工厂模式&a…...