TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。
5 S d" J* i: J# ~7 P这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。" T+ E- w* Q8 n) D0 W
于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。
( f7 Q% g% T L$ S6 S2 ]! fmemcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。
8 j3 j7 v7 a/ H/ Y9 |2 Z& }贴出示例:5 Y2 D+ F" ]/ k5 _& a# W1 B
1) nginx的配置如下:
- M- ?0 q R) t+ g- location ^~ /images/ {
/ x& e- `/ h; s6 o - set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 ( `# d4 T( |+ [ N& x' g4 e
- memcached_pass 127.0.0.1:11211;
4 {' ^3 ^7 a. U- f) C: T5 n1 { - memcached_connect_timeout 5s; / y; n" L0 t# G. s r7 F* h
- memcached_read_timeout 5s; ; P5 j' x. U/ H5 D. S7 @: p4 N7 [: G
- memcached_send_timeout 5s; % a( Y% f; O$ H
- memcached_buffer_size 32k; $ Z( b; e+ U2 X% z- h$ W1 D) H5 F5 z
- error_page 404 502 504 = @fallback; 3 f, \. T3 c& T$ s/ b$ M. t- d& K
- } 9 }0 l/ U7 ?/ T6 Y; q9 x3 z' k0 Z
- location @fallback { 7 J+ ~# Q" s0 ^. q
- proxy_pass http://backend; 4 Z: D/ w7 M. ~: B" R
- }
复制代码
1 I4 R3 T$ I% q; T; v* \% u2) 使用PHP向memcached写入一张图片:, [1 d2 p$ }6 M7 x8 \: M
- <?php 8 W9 v9 F1 `& k R0 H
- $pic = file_get_contents('./test.jpg');
5 v) k) d) B- L; D% Y, E' V - $memcache = new Memcache; : G e1 T" k% [% p! G9 l8 b( e* k- |
- $memcache->connect('localhost', 11211);
. A" ~! k$ Q6 |. | - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 ) w( |& V$ ^1 p1 ] v# X
- $memcache->close();
复制代码
* ?; f0 k8 v s( f" J( u5 f3) 使用浏览器访问:http://localhost/images/test.jpg
2 t- u$ \1 A. h' G) ]& `) N上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。' K3 i6 j! U; l3 ~
8 t5 d* h, R [: d
6 m: U) X; g0 t: o( W- @
|
|