TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。7 L3 I$ H `7 n! H$ ~
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。' W* u9 e8 T. x A# G" H k" S
于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。& A: q0 q4 A: j: r1 H. W" |9 q( L
memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。
( A! Q. b; s; m* V; |+ c' ^$ E贴出示例:
) G4 D8 p# p7 v& ~% |, W( j6 t1) nginx的配置如下: f" D; ?" t. X/ g% A: ~+ c" {
- location ^~ /images/ {
0 [( j9 x' Z9 M, V, F2 m$ I1 \ - set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 + j/ V3 L: z( f1 Z H& ?6 [
- memcached_pass 127.0.0.1:11211; : S3 Z \& v9 y: q4 v
- memcached_connect_timeout 5s;
% @, @1 A- m0 Y+ N - memcached_read_timeout 5s;
+ {# R- {% l5 A1 C - memcached_send_timeout 5s; + k8 h6 C6 l" M. P, ^6 Z7 U
- memcached_buffer_size 32k; j Q% x$ q+ f& p$ k
- error_page 404 502 504 = @fallback;
6 g& T' \: p) m - }
* \- @- p7 O) F' G - location @fallback {
# X2 m# I1 F9 b8 z4 J$ a - proxy_pass http://backend; 4 E- I& U8 B9 k6 S$ i5 @
- }
复制代码
( E# D3 V# ~1 S# t7 i' j. `2) 使用PHP向memcached写入一张图片:$ v3 p- ]& |8 F# l1 W, c$ \
- <?php ) Q U1 C7 f! O3 _# h% B' C; E
- $pic = file_get_contents('./test.jpg'); 1 s; A. X I8 h) L5 @
- $memcache = new Memcache; ) u8 F9 t, x! G- h$ o1 I7 u
- $memcache->connect('localhost', 11211);
2 x4 O# w8 ^- Z# _" P2 h9 u: a- C - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 9 w3 h: K8 B7 G: ~& ^: Z
- $memcache->close();
复制代码 9 [0 m& ]. S8 C$ Z
3) 使用浏览器访问:http://localhost/images/test.jpg$ n5 A% U. `) y8 j
上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。" p4 @/ d& l: ]. I
( \0 v4 v; u; B1 p7 `( S
5 Z" v! {! M' B |
|