網站首頁 編程語言 正文
緩存
- 緩存的基本思想是利用客戶端訪問的時間局限性,將客戶端訪問過的內容做一個副本,在一定時間內存放到本地,當改數據下次被訪問時,不必連接到后端服務器反復去查詢數據,而是由本地保存的副本響應數據。
- 保存在本地的這些副本具有一個過期時間,超過該時間將會更新。判斷一個副本數據是否為過期數據的辦法有很多,可以使用保留時間來判斷,也可以使用數據完整度來判斷。
- 許多Web服務器還具有校驗功能,就是當某些副本數據過期以后,先向后端服務器發(fā)送校驗請求,后端服務器對這些數據進行校驗,如果發(fā)現原數據和副本沒有差別,則將過期副本重新置為可用副本。
緩存的好處
- 減輕服務器負載
- 提供網頁響應效率
- 降低網絡阻塞,增強網絡可擴展性
為什么使用緩存?
- 服務器處理能力以及負載能力出現瓶頸,響應效率大大降低
- 為了減少網絡傳輸延遲,提升響應效率
- 能夠避免因為后端服務器出現異常以及網絡故障,客戶端請求數據副本能夠及時響應
nginx的緩存機制
proxy模塊指令
以上nginx配置結合使用:
http {
.
.
.
proxy_cache_path /cache/nginx levels=1:2 keys_zone=imooc_cache:10m max_size=5g inactive=60m use_temp_path=off;
.
.
.
server {
.
.
.
location /api/ {
proxy_cache imooc_cache;
proxy_pass 127.0.0.1:81/api/;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
include proxy_params;
}
}
}
proxy_params文件的配置如下:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
訪問一次頁面,并向 http://192.168.148.168:8000/api/ 發(fā)起一個接口數據請求,查看/cache/nginx目錄下的緩存結果:
[root@localhost 02]# cat 9563faff155b9fcfbf3fb1b16c253021
?]n`?????????′m`?t>
KEY: 192.168.148.170/api/index.php
HTTP/1.1 200 OK
Date: Wed, 07 Apr 2021 13:34:55 GMT
Server: Apache/2.4.46 (Unix) PHP/7.4.16
X-Powered-By: PHP/7.4.16
Content-Length: 31
Connection: close
Content-Type: text/html; charset=UTF-8
this is 192.168.148.170_php_new[root@localhost 02]#
清除緩存
ngx_cache_purge是nginx的第三方模塊,能夠幫助我清除nginx中的緩存。
如果啟動了緩存,沒有安裝這個模塊(ngx_cache_purge),重啟nginx會出現異常:
2021/04/18 10:15:36 [emerg] 12180#0: unknown directive “proxy_cache_purge” in /vhost/test_170.cc.conf:20
這個異常是在指示我們,找不到該指令的驅動,需要按照相關模塊。
ngx_cache_purge只是nginx的第三方模塊,并不是某個特殊的軟件,所以我們需要對nginx重新進行編譯,操作如下:
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/home/pcre-8.44 --with-zlib=/home/zlib-1.2.11 --with-openssl=/home/openssl-1.1.1g --add-module=/home/ngx_cache_purge-2.3
make -j2
make install
配置nginx:
location ~ /clear_cache(.*) {
allow all;
proxy_cache_purge imooc_cache $host$1$is_args$args;
}
緩存清除測試
訪問:http://192.168.148.170:8000/clear_cache//api/index.php, 訪問這個鏈接將會清除接口:http://192.168.148.170:8000//api/index.php 的緩存數據。
成功清除緩存返回結果如下
沒有緩存返回結果如下
控制nginx緩存
proxy_no_cache
# set 指令為變量設置,proxy_no_cache參數中的值可以設置多個,但是多個值中,只要有一個是不為0的,就會通過緩存響應數據
server
{
.
.
.
location /api/ {
set $a 0; #設置初始值
if ( $request_uri ~ /api/noapi/(.*) ){
set $a 1; #如果滿足不緩存 設置為1
}
proxy_no_cache $a;//
.
.
.
}
location ~ /clear_cache(.*) {
allow all;
proxy_cache_purge imooc_cache $host$1$is_args$args;
}
}
查看proxy_cache指令詳解
原文鏈接:https://blog.csdn.net/sinat_38926283/article/details/115821450
相關推薦
- 2022-09-09 OpenSSL生成v3證書方法及配置文件詳解_其它綜合
- 2022-11-03 React狀態(tài)管理器Rematch的使用詳解_React
- 2023-01-17 python?PyQt5(自定義)信號與槽使用及說明_python
- 2022-05-20 如何搭建雙 M 結構的主從備份?
- 2022-12-21 Python?eval()和exec()函數使用詳解_python
- 2022-04-01 SQL?Server?數據庫基礎編程詳解_MsSql
- 2022-04-06 python中matplotlib的顏色以及形狀實例詳解_python
- 2023-01-13 Go?cobra庫使用教程_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支