TA的每日心情 衰 2021-2-2 11:21
签到天数: 36 天
[LV.5]常住居民I
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。, N5 d5 r. C3 J# ]4 q6 J, S- T% Z
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。; `; E8 Q. w4 F( Z0 G
于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。
! s2 r, \+ U" L7 A5 q8 n D/ S memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。: D# c$ Y7 ~' q- H
贴出示例:
: v, M9 r- x# J4 ? 1) nginx的配置如下:
0 q3 S" \" l* @5 N9 T location ^~ /images/ {
8 r6 G! J: j' o; B$ A set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 ( o+ e5 S, W4 k" c
memcached_pass 127.0.0.1:11211;
& y# _2 |) ?' Q! M1 j memcached_connect_timeout 5s;
$ X+ z$ E8 |1 ]' D1 T memcached_read_timeout 5s; # ?1 n: x2 Q, r4 X5 y* k
memcached_send_timeout 5s; 0 _" M! x$ F( B( z5 z6 Y
memcached_buffer_size 32k;
& W' `* D3 _; p, R$ ~ error_page 404 502 504 = @fallback;
/ Y; C' h$ V6 R7 s Q }
! V' I: r$ Y' }, X/ ^; N8 v( T9 g% Y) | location @fallback { 5 k6 V j1 C7 A* d
proxy_pass http://backend;
+ {( U; u' J8 N } 复制代码 * @2 O1 i1 L0 K( M
2) 使用PHP向memcached写入一张图片:$ X8 W% F! k0 |2 j$ G
<?php " f, E5 c5 A O! s+ m* e* {
$pic = file_get_contents('./test.jpg'); 3 u6 d, |1 e: A# Y3 {/ `1 w
$memcache = new Memcache;
1 o. T8 l# \. B2 T! S9 P $memcache->connect('localhost', 11211);
6 H/ G! m# r g/ T5 G $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 " [1 g8 \3 L" `$ [4 g2 b
$memcache->close(); 复制代码
/ ? _) y, X7 D/ D0 u2 ^, T' A 3) 使用浏览器访问:http://localhost/images/test.jpg3 E) W; Y% L* n" Z5 U
上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。& _4 n' }1 d; I g
- p: T4 v7 ]0 S3 e
3 m6 m6 ?. h- _+ B4 E0 R8 O
我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关2、本站所有主题由该帖子作者发表,该帖子作者与我的日常 享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常 的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、我的日常 管理员和版主有权不事先通知发贴者而删除本文
JAVA爱好者①群:
JAVA爱好者②群:
JAVA爱好者③ :