TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。7 [, `, U3 C7 |' o l
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。
! _! n3 {' H. ^5 Q2 K于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。5 u) s) c9 g+ a4 P
memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。9 a5 Y9 o; D5 A, x/ P( M
贴出示例:* @* g: A3 G: Z( j8 d* e" E( K( @
1) nginx的配置如下:
9 X2 Y( E& H) Z. L- location ^~ /images/ {
. J8 ^7 e# D; x! y - set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 % ~; W: h4 x: D5 L# @
- memcached_pass 127.0.0.1:11211; / ]3 L8 {9 V7 a
- memcached_connect_timeout 5s; * Y: ~+ N7 k, M3 O7 m. y5 g G+ Z
- memcached_read_timeout 5s; . s1 x- j* c( d5 T- w
- memcached_send_timeout 5s;
# f0 z5 p0 C$ r- ]" Q$ ?) W - memcached_buffer_size 32k; # C8 P: y* d4 g
- error_page 404 502 504 = @fallback; 2 s7 f& [' q+ s/ h3 U2 X5 Q# z
- }
4 y( d* ~& R+ |# \! a' ^* \ - location @fallback { 5 R# {" E$ o2 U S. g" j; A4 ~
- proxy_pass http://backend;
- S) L. k( ^! v" T- W - }
复制代码
# Z B ]$ o2 I8 Y/ ]3 B2) 使用PHP向memcached写入一张图片:
- H5 n% z( \' X. x9 z: U5 J! q- <?php 6 [ h( U9 s9 t
- $pic = file_get_contents('./test.jpg'); ( }( G1 @! W& i/ m2 J6 n0 D
- $memcache = new Memcache; 9 X. J) v/ q& M6 M f+ ]) x
- $memcache->connect('localhost', 11211); 6 @3 W/ U5 Y) r; B
- $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期
9 x: j. ?9 E) P$ G: _3 Z3 s - $memcache->close();
复制代码
" p9 ~4 ]: V3 Z/ W3 Z3) 使用浏览器访问:http://localhost/images/test.jpg
6 L' g1 N( D$ ]# t: U H上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。
5 b0 V/ p( |- `/ v) @, U: P* `! x, {9 g' V+ S
* i- M1 [) E& A& c9 N
|
|