TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。& l6 h, o$ ? |4 T! R0 B9 a
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。9 v. M3 ]2 @6 \4 r9 g% E
于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。5 z! j. \' }% P4 v$ d
memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。
! }' l& W# w6 p. n7 N- N贴出示例:- o# Z+ D& D' j, H- K
1) nginx的配置如下: p; A& _& G# ?2 q; I
- location ^~ /images/ { . g! }& u% J6 p! u/ Z6 a
- set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 ' r0 U( |6 [4 M4 ]9 z* t
- memcached_pass 127.0.0.1:11211;
; Z) j8 P6 v+ t( [2 W% p S - memcached_connect_timeout 5s; 5 I8 e5 D- Z y. H ?3 M8 B
- memcached_read_timeout 5s;
+ E; K% x& x4 z3 F7 Z+ b - memcached_send_timeout 5s;
( q& x j0 h: j- o - memcached_buffer_size 32k; 8 }) C# [1 ^6 x+ S
- error_page 404 502 504 = @fallback;
2 p1 _" G; P2 c - } 9 R& v4 }, \0 e) g) ~/ S8 `6 C$ X8 x
- location @fallback { ' H7 s! [. s7 \: B5 a: l- v* B
- proxy_pass http://backend;
; t& G+ i, ^5 p( l - }
复制代码
, v8 P. s% g& C2) 使用PHP向memcached写入一张图片:0 y ^% }% N8 j" c3 g; R1 |
- <?php
% y' J' Y/ r+ ]4 z" g - $pic = file_get_contents('./test.jpg'); - V6 z, w5 U5 \. A3 y
- $memcache = new Memcache;
( A4 D" j! X! a+ j$ K. H - $memcache->connect('localhost', 11211);
! ~: b8 o6 e- @( F) \( u - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期
6 y: C/ D8 c) P/ f: b1 l - $memcache->close();
复制代码
C' Y% n) _4 R; H3) 使用浏览器访问:http://localhost/images/test.jpg
( `& t7 G$ b( V# s1 i$ ?上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。
' i/ m/ n' u Z3 b, V4 {2 N
3 A7 [; e9 @9 C* A: @. {3 e5 i# N% H, N `8 H3 p1 ]9 c
|
|