no sql 试用初步
2012-01-19    刘世伟   
打印自: 安恒公司
地址: HTTP://poe.anheng.com.cn/news/article.php?articleid=2377
no sql 试用初步
把session放进nosql数据库,作为使用nosql的切入点很合适。

我们选择redis数据库, 因为redis 在php有C的支持,并且库依赖很少, 安装使用都比较方便。

web集群运行php, 是一定要解决session的共享问题的, nfs文件共享等方案在速度和实时性上都不是很好。

安装redis后, 发现phpinfo里显示可以把session 存放在redis服务器里面。这样,在速度和实时性上就解决问题了。

redis安装和配置在debian下很简单, redis跟其它的库也没有什么依赖关系, debian6下的redis版本很低, 因为只依赖libc,所以可以把 debian7的二进制包直接拿过来用。

配置文件 /etc/redis/redis.conf   改一下使用内存大小,绑定端口, 就可以了。 

在使用redis存储session的过程中, 只出现过一次小问题,提示mediawiki不能open session文件,  mediawiki 会把 redis的url 当成文件目录来操作。
看mediawiki的includes/Globalfunction.php   发现它会强制修改session的存储方式为files, 但是存储path没有进行处理。
增加一句语句, 修正一下path:

--- mediawiki/includes/GlobalFunctions.php.orig 2012-03-19 17:26:22.647648907 +0800
+++ mediawiki/includes/GlobalFunctions.php  2012-03-19 17:28:55.866562219 +0800
@@ -2660,6 +2660,8 @@
        # If it's left on 'user' or another setting from another
        # application, it will end up failing. Try to recover.
        ini_set ( 'session.save_handler', 'files' );
+       if(substr(ini_get('session.save_path'),0,6) == 'tcp://')
+       ini_set('session.save_path', '/var/lib/php5');
    }
    $httpOnlySafe = wfHttpOnlySafe();
    wfDebugLog( 'cookie',

责任编辑: admin