TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。, Y0 n O: M! s- o) ^
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。
9 _5 C, G6 C- g+ d* J于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。& f: v( w$ G. L% A }7 z
memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。+ Z0 k* R$ W& R) h. v
贴出示例: l# n+ b5 [* j- V1 q
1) nginx的配置如下:1 j% U9 w% f# L# o0 e5 y
- location ^~ /images/ {
. b/ b; ~0 H! U0 l - set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容
, ^+ k9 [" \) Y$ V* m - memcached_pass 127.0.0.1:11211;
4 j5 @" z$ }8 M# k) _. q - memcached_connect_timeout 5s; , U/ E1 J6 E$ | K
- memcached_read_timeout 5s;
9 v9 P6 ]. i& t - memcached_send_timeout 5s; 3 |; K# D$ K2 ]. ^( `
- memcached_buffer_size 32k; / w2 N. K+ a2 o, R K
- error_page 404 502 504 = @fallback; 5 U" G. Q. C7 ]
- }
$ u* L- D' \3 P - location @fallback { % ^. T1 K; S4 K" |) l1 N
- proxy_pass http://backend; 2 j9 R; H) k7 C: k) m4 U
- }
复制代码 ) `7 z7 q8 u" i5 I* x7 {, R
2) 使用PHP向memcached写入一张图片:, D/ B( ~ Q$ s4 ]$ [, O: F+ V4 n5 n
- <?php $ [1 A! z8 A" x$ d3 i
- $pic = file_get_contents('./test.jpg');
/ ?+ M+ R2 Y/ _/ j, ~* q% @ - $memcache = new Memcache;
# o2 F O: }( @( z* S - $memcache->connect('localhost', 11211);
6 b2 X: h( [3 i - $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期
6 b/ I* M6 f. v C! H - $memcache->close();
复制代码
$ {$ i0 C' B2 P+ Q$ [5 {6 I' e# X3) 使用浏览器访问:http://localhost/images/test.jpg( k" [* L2 r: s" p% ?- d1 {' V- t S3 d' T
上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。5 E' A, g/ O2 t0 R# B, I
4 Y! ?4 D& Q1 |8 u& P1 c) k8 s
7 \. H$ I* s. K6 M4 t# { W
|
|