TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。5 b) o$ ] H$ p/ G
这种情况我觉得再使用上面那种方式来进行同步就有点浪费了,而且还提高了维护成本,虽然计划任务是通过puppet推送下去的。
1 m! ]! A" A4 U8 S `9 y# X于是我提出了整改方案,其中一个方案就是使用memcache来存储图片。nginx可以直接从memcahed中取出缓存展示给浏览器,从而提高性能。
+ b8 B+ k; k( C1 e# _memcached是nginx的核心模块,默认是可以直接使用。这个模块只能读,不能写,不过有第三方模块可以做到。
2 f7 I( X6 \& ^# y贴出示例:* T, _+ e$ D1 d* b) Z; f3 f
1) nginx的配置如下:
6 d' w0 c( O) t0 y/ _ L& w( E- location ^~ /images/ { 4 T8 N3 `6 `0 Q
- set $memcached_key "$uri"; #用URI作为key去memcached中去读取内容 . R9 `0 G, y/ w2 W0 {; C
- memcached_pass 127.0.0.1:11211;
" _! v( R7 F: Y$ T- ] - memcached_connect_timeout 5s;
; z1 j! m# s( ^" \8 Z - memcached_read_timeout 5s; 2 h( e5 `- N i) e l, O
- memcached_send_timeout 5s;
1 i. M# M$ [0 b% U& T( H8 ~' h - memcached_buffer_size 32k;
& I- ] x; t/ H* J( c - error_page 404 502 504 = @fallback;
$ A+ }$ q3 S/ W& u ]8 H3 _$ O - } 4 C5 l- N( R" S' i. Q
- location @fallback {
0 M$ f4 U& D0 ]( L. V - proxy_pass http://backend; # h3 ^) @/ y+ B
- }
复制代码
/ a4 E2 f* x0 t3 ?2) 使用PHP向memcached写入一张图片:8 h, Q6 [' O4 p2 K/ ^7 L3 B
- <?php - e, {3 P; |9 W
- $pic = file_get_contents('./test.jpg'); / o; V; e# S4 b( E- v
- $memcache = new Memcache; 8 e' ?1 N, b- H9 [
- $memcache->connect('localhost', 11211); & l6 c, R$ N% ]4 x! I9 h
- $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期 7 Q1 z# `0 E( }5 n
- $memcache->close();
复制代码 3 V: h$ M9 g1 J, r6 T; R
3) 使用浏览器访问:http://localhost/images/test.jpg& b, s2 Z+ i1 ^+ b
上面是单台memcached的示例,在生产环境中可以使用upstream模块调度多个memcached实例来达到高可用。& W8 }2 Q3 h; P$ \! I7 _
' y% }1 _: t% s9 U! s. W+ Z6 K2 V0 S# f/ L
|
|