TA的每日心情![](source/plugin/dsu_paulsign/img/emot/shuai.gif) | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。! Y% o8 H6 M2 Q6 i2 n# O7 n; e% D/ C+ i
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。
$ |5 K; c4 ~* g于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。) E& F8 t, u g4 n& P
memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。2 c4 _% q( E. i7 k% A9 j
贴出示例:9 I# H1 Q: g1 g- H$ r" {
1) nginx的配置如下:) z! \% ~; Q" k- Z z
- location ^~ /images/ { : q# I2 ~5 E+ K* G3 @* O( P3 n
- set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 9 p0 s( J, D% Y4 l* x
- memcached_pass 127.0.0.1:11211; ; K. {5 X0 E9 ^; L. n4 f* S) I* }+ M
- memcached_connect_timeout 5s; 2 l# {2 F9 }+ E7 ^0 c+ p
- memcached_read_timeout 5s; # D! \' J" _4 m4 I
- memcached_send_timeout 5s;
9 ], q3 @5 [4 I2 ~! d1 R - memcached_buffer_size 32k;
2 M" ]5 F4 R* ]5 B/ ~3 n) x8 U4 n - error_page 404 502 504 = @fallback; 8 [4 a4 w; B, W+ A9 W7 ^: s
- } # e# P" P h! |/ L& H# f
- location @fallback {
) I# m2 ?) q9 b2 k; J" k - proxy_pass http://backend; 4 v8 t. o1 s3 E; _4 ^
- }
复制代码
/ X3 \3 Q$ r! p+ f2 b" c4 u P' J2 O2) 使用PHP向memcached写入一张图片:
% \$ v- w3 K- q' E& g- <?php , ] K& P$ u+ Z) n# ~1 N
- $pic = file_get_contents('./test.jpg');
" C$ B1 [2 y9 T, }4 M- t1 n - $memcache = new Memcache;
. v# m9 i; l. y$ E- @; s - $memcache->connect('localhost', 11211);
^# V" ]8 S6 D* t4 u( \ - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 ' ] w3 @, K2 e% C! i8 z0 G1 Y
- $memcache->close();
复制代码
" P6 h$ w7 ?9 Y% @# W8 I" @3) 使用浏览器访问:http://localhost/images/test.jpg
& z, Y) i3 O9 K上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。
: N" `$ p( J- e" p9 m1 ^2 r6 z2 x/ F) T; d$ s
0 l$ X3 Q+ P% V* r# W# C5 q6 n |
|