架构--缓存知识
缓存体系是根据http体系来写的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | nginx代理缓存配置 mkdir -p /data/cdn_cache ---------------------------------------------------------------------------------------------------------- [root@linux-node1 ~] #/etc/nginx/conf.d/proxy.conf #CDN proxy_temp_path /data/cdn_cache/proxy_temp_dir ; proxy_cache_path /data/cdn_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404; ---------------------------------------------------------------------------------------------------------- [root@linux-node1 ~] # /etc/nginx/conf.d/upstream.conf upstream www.example.com.pool { server 192.168.56.12:8080 weight=10 max_fails=3; } ---------------------------------------------------------------------------------------------------------- [root@linux-node1 ~] # vim /etc/nginx/conf.d/www.example.com.conf server { listen 80; server_name www.example.com; access_log logs /www .example.com-access.log main; location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)$ { #Proxy proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http: //www .example.com; #Use Proxy Cache proxy_cache cache_one; proxy_cache_key "$host$request_uri" ; add_header Cache "$upstream_cache_status" ; proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; proxy_cache_valid any 2d; } location / { proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http: //www .example.com; client_max_body_size 40m; client_body_buffer_size 128k; proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } } ------------------------------------------------------------------------------------------------ [root@linux-node2 ~] vim vhost.example.com.conf server { listen 8080; server_name www.example.com; location / { root /data/www/www ; index index.html index.htm; } error_log logs /error_www .example.com.log error; access_log logs /access_www .example.com.log main; } windoes 绑定主机名访问 www.example.com,返回node1服务器发现有缓存了 |
如果用户访问后就回有缓存,但是如果网页文件跟新了,但是用户还是访问的缓存这样就回出现问题,则需要删缓存流程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!/bin/bash cache_purge(){ PURGE_URL=$1 URL_NAME=$( echo -n $PURGE_URL | md5sum | awk '{print $1}' ) FILE_NAME=$( echo $URL_NAME | awk '{print "/data/cdn_cache/proxy_cache_dir/"substr($0,length($0),1)"/"substr($0,length($0)-2,2)"/"$0}' ) rm -rf $FILE_NAME } purge_file(){ PURGE_FILE=$1 for url in $( cat $PURGE_FILE); do cache_purge $url done } purge_url(){ PURGE_URL=$1 cache_purge $PURGE_URL } usage(){ echo $ "Usage: $0 <url_file | 'url'>" } main (){ if [ "$#" - ne 1 ]; then usage; else if [ -f $1 ]; then purge_file $1; else purge_url $1; fi fi } main $1 |
[root@node1 ~]# sh a.sh www.example.com/index.html
通过MD5的方式找到缓存池的缓存,并把缓存删了
####web缓存
操作码缓存 ----php配置可以开启opcache http://www.php.net/manual/zh/book.opcache.php
http://www.php.net/manual/zh/opcache.configuration.php
web服务器缓存--apache(mod_cache),nginx(fastCGI缓存,proxy cache)
####应用层
|----动态内容缓存 缓存动态输出
应用服务--- |----页面静态化 动态页面静态化,需要专门用于静态化的CMS
|----local cache 应用本地缓存,php(yac,xcache) java (ehcache)
|----分布式缓存 mamcache,radis等
数据层----- |----数据库mysql mysql自身缓存,innodb缓存,MYISAM缓存
系统层----- |---操作系统-----cpu cache L1(数据缓存,指令缓存)L2 L3
-----内存 cache 内存高速缓存,page cache
物理层----- | ----raid卡-----raid cache 磁盘整列缓存(raid卡可以控制是否实用磁盘高速缓存)
| ----磁盘 ---- disk cache 磁盘高速缓存
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构