session可以存放在文件中,可以存放在memcache中,本以为session是不可以存放到redis中了,今天尝试了一下,竟然可以。session存文件是没问题的,存memcache也是没有问题的,这个我测试过,请参考:web集群时利用memcache来同步session。但是redis是部分是走内存,部分是走文件的。我在想redis是怎么对待session的呢,费话不多了,看下文。
一,redis服务端,以及php扩展php-redis的安装
[root@mysqlMaster www]# yum install redis php-devel php-redis
如果找不到redis,php-redis包的话,换源。如果不想换源的,请参考:linux redis 安装配置, 以及redis php扩展
二,配置redis服务端
[root@mysqlMaster www]# mv /etc/redis.conf /etc/redis.conf_bak //备份原有redis配置文件 [root@mysqlMaster www]# cat /etc/redis.conf //添加以下内容 daemonize yes pidfile /var/run/redis/redis.pid port 6379 timeout 300 loglevel verbose logfile /var/log/redis/redis.log databases 16 save 900 1 save 300 10 save 60 10000 rdbcompression yes dbfilename dump.rdb dir /var/lib/redis/ slave-serve-stale-data yes appendonly no appendfsync everysec no-appendfsync-on-rewrite no vm-enabled no vm-swap-file /tmp/redis.swap vm-max-memory 0 vm-page-size 32 vm-pages 134217728 vm-max-threads 4 hash-max-zipmap-entries 512 hash-max-zipmap-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 activerehashing yes
参数说明:linux redis 安装配置, 以及redis php扩展,这篇博客里面有。
三,启动redis服务端,并且查看php-redis扩展
1,启动服务端
[root@mysqlMaster ~]# /etc/init.d/redis start
2,修改php.ini配置
session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"
3,查看redis的php扩展
查看一下phpinfo要有以下二样,才能将session存储到redis中,
有了redis扩展,还要看php.ini有没有配置好。
四,session存储到redis中测试
<?php session_start(); $_SESSION['redis'] = "aaaaaa"; echo session_id(); echo "<br>"; echo $_SESSION['redis']; echo "<br>"; $redis = new redis(); $redis->connect('192.168.1.108', 6379); echo $redis->get("PHPREDIS_SESSION:ruk5i2vlu2hvtmfr5hig4l55f6");//这个key我是通过telnet到redis查的。 ?>
echo session_id();显示出来是ruk5i2vlu2hvtmfr5hig4l55f6,开始的时候,echo $redis->get("ruk5i2vlu2hvtmfr5hig4l55f6");不管怎么样都取不到值,因为memcache这样是可以取到值的,所以我就想redis估计也是这样。telnet到redis看了一下,原来命名key值的方式是不一样的,看下图
到这儿session存储到redis是没有问题了,怎么同步呢。多服务器时,redis是可以配置同步的,当一台机子有session就可以准实时的同步到另一台。关于redis同步,请参考:redis 分布式,主从同步
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/cache/1434.html
如果使用redis当session共享存储,我想指定数据redis的,在tcp://127.0.0.1:6379?xxx
有这样的参数吗?
请问,redis存储session时,浏览器在不关闭的情况下如何设置session不过期?redis存储值可以设置存储时间和永久存储,如果设置了存储时间那么session值在redis中就丢失了,而设置永久存储会不会占用空间?并且如何清除失效的session值呢?