我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > nginx下memcached图片缓存
总共48086条微博

动态微博

查看: 1420|回复: 0

nginx下memcached图片缓存

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-11-22 11:59:55 |只看该作者 |倒序浏览
    今天整理存储的时候发现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
    1. location ^~ /images/ {
      . b/ b; ~0 H! U0 l
    2.     set $memcached_key  "$uri"; #用URI作为key去memcached中去读取内容
      , ^+ k9 [" \) Y$ V* m
    3.     memcached_pass      127.0.0.1:11211;
      4 j5 @" z$ }8 M# k) _. q
    4.     memcached_connect_timeout 5s; , U/ E1 J6 E$ |  K
    5.     memcached_read_timeout 5s;
      9 v9 P6 ]. i& t
    6.     memcached_send_timeout 5s; 3 |; K# D$ K2 ]. ^( `
    7.     memcached_buffer_size 32k; / w2 N. K+ a2 o, R  K
    8.     error_page    404 502 504 = @fallback; 5 U" G. Q. C7 ]
    9. }
      $ u* L- D' \3 P
    10. location @fallback { % ^. T1 K; S4 K" |) l1 N
    11.     proxy_pass    http://backend; 2 j9 R; H) k7 C: k) m4 U
    12. }
    复制代码
    ) `7 z7 q8 u" i5 I* x7 {, R
    2) 使用PHP向memcached写入一张图片:, D/ B( ~  Q$ s4 ]$ [, O: F+ V4 n5 n
    1. <?php $ [1 A! z8 A" x$ d3 i
    2. $pic = file_get_contents('./test.jpg');
      / ?+ M+ R2 Y/ _/ j, ~* q% @
    3. $memcache = new Memcache;
      # o2 F  O: }( @( z* S
    4. $memcache->connect('localhost', 11211);
      6 b2 X: h( [3 i
    5. $memcache->add('/images/test.jpg', $pic, false, 0); //这里设置缓存不过期
      6 b/ I* M6 f. v  C! H
    6. $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

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表