相争不足 共享有余

用Nginx和Redis搭建琐碎文件下载站

编程开发 moonygao 370℃ 0评论

对于网站来说,琐碎文件是一个很鸡肋的问题。太多过小文件的管理总有这样那样的问题,特别是当文件数量到达临界时,甚至作一条ls或者rm都无法正常反应。而且正常情况下琐碎文件都会主动缓存,花费太多资源去实现意义也不大。

之前曾经通过nginx的memcache扩展,配合TokyoTyrant Server(每次都觉得很别嘴)这个即支持memcache协议,又可以持久化的Key-Value实现过琐碎文件的管理,但限于Memcache无法逾越的1M鸿沟,只能保存些小文件。

这些天看到一个Nginx第三方插件 HttpRedis, 本身仅仅只是计划用它来做一些短域名跳转之类的应用,忽然觉得Redis没有内容主体的限制,而且性能优良,完全可以用作琐碎文件的下载。

首先下载nginx——不知不觉nginx已经有了正式的1.0以上的版本了!

wget http://www.nginx.org/download/nginx-1.0.10.tar.gz

下载 http_redis:

wget http://people.freebsd.org/~osa/ngx_http_redis-0.3.5.tar.gz

开始编译,没什么复杂的:

tar vzxf nginx-1.0.10.tar.gz
tar vzxf ngx_http_redis-0.3.5.tar.gz

cd nginx-1.0.10
./configure –user=www –group=www –prefix=/app/nginx –add-module=../ngx_http_redis-0.3.5

make -j4 && make install //部分CPU无法通过编译,还是乖乖的make && make install

修改nginx的配置文件:

在http{}之中加入:

server {

listen 80;
server_name www.test.com;

location / {
set $redis_key CACHE_$request_uri;
redis_pass localhost:6379;

default_type text/html;
}
}

安装redis,还是老一套:

apt-get install redis-serve
/etc/init.d/redis-server start

比如你现在需要通过http://www.test.com/a.html访问一个页面,则可以直接通过下面的方法在redis中塞入一个值,依次类推:

redis-cli
redis > set CACHE_a.html “Hello World!”
OK

redis > set CACHE_/b/a.html “Hello World!”
OK

调试无误后就可以使用程序端直接向redis中写入数据了。

当然,也可以通过设置不同的“default_type”存放图片或者其他类型的文件。 由于此扩展支持redis连接池,而且redis本身也支持master-slaver数据同步,完全可以实现redis端的负载均衡(考虑到redis的性能,我觉得意义不大,除非为了热备份)。需要注意的是Redis是内存数据库,尽管它有定时将数据回写磁盘的机制,但如果不启用vm的话,内存是一个硬性的限制。

转载请注明:IT起义 » 用Nginx和Redis搭建琐碎文件下载站

喜欢 (0)or分享 (0)