TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。' l: ~6 _. Z9 ]' v5 g' Z
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。
8 e' A5 I) ?0 X* B7 R于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。
- k' g; q( c0 D# u/ [1 E9 Cmemcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。
# A9 [: q% d& I0 h& I) Z9 s8 Z0 i贴出示例:
7 l, A( K; s% L0 `' R* b1) nginx的配置如下:# E6 @- U7 r3 w$ M
- location ^~ /images/ {
; ]# C& p( k ~; |# ?% d# x - set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 / l# \0 ~: H9 P# E ~
- memcached_pass 127.0.0.1:11211; ! `- \6 S) Y, p z. |
- memcached_connect_timeout 5s;
& B% b- I/ u8 O7 X% Q - memcached_read_timeout 5s; 7 { m- r$ e4 g! q
- memcached_send_timeout 5s;
6 B ~3 s5 T- i: G; H - memcached_buffer_size 32k;
& S; W6 j8 p6 h+ ] F, r - error_page 404 502 504 = @fallback; . r, E2 h+ f- ?$ r* e P- O
- } 5 F! W8 P$ {, u d: ]$ `
- location @fallback {
% x" {: e6 Z- p9 l% { - proxy_pass http://backend;
/ e7 E5 w5 M/ O - }
复制代码 . n1 k) A h# g2 h6 a6 P: ~9 s
2) 使用PHP向memcached写入一张图片:
# O: p% r* H2 r' i1 O: W. c& _- <?php / J l1 M9 s! t. _8 e2 O' q3 ~3 t
- $pic = file_get_contents('./test.jpg'); , _7 O" a0 \5 o" \9 q% K. D
- $memcache = new Memcache;
/ t* u) w& x9 G K - $memcache->connect('localhost', 11211);
/ `0 k9 R/ b( A' Z' `! I - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 7 o- f, [8 Z% ]2 I8 H0 Q6 I
- $memcache->close();
复制代码 ' X9 u: `, `3 v" |. n) b) D
3) 使用浏览器访问:http://localhost/images/test.jpg
4 G( n* q* n- l' C上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。
/ ~2 n! C0 |. _0 _9 u
& c6 t& G6 [. s% u. _
+ |1 W$ P1 J7 A( L |
|