PHP默认就支持保存session到redis,不需任何额外代码。
Redis保存session用的命令是setex,用redis-cli monitor实时监测可以检测到。
setex命令的语法:
setex(key, time, value)
其中,key是键值,time是过期时间,value是字符串类型的值。
具体步骤如下。
要用Redis保存session,首先必须要满足下面的条件:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $count = $redis->exists('count') ? $redis->get('count') : 1; echo $count; $redis->set('count', ++$count);
刷新页面,如果看到数字不断增加,说明Redis环境正常。
安装了Redis扩展后,phpinfo()输出中会看到session的支持句柄,其中包含了redis,如下:
有一点要注意的是,Redis的过期时间最大值为2147483647,也就是十六进制的7fffffff。
所以,session配置中回收时间session.gc_maxlifetime的值不能超过这个数字。
否则Redis用setex命令保存session时,过期时间time为负数,相当于直接删除了这个key。
这样不仅不会保存成功,PHP还会返回下面的错误:
Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (127.0.0.1:6379) in Unknown on line 0
接着,修改php配置,总共有3种方法,如下选择其中一种即可:
打开 php.ini 文件,设置下面两个值:
session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"
如果Redis有密码,用下面的配置:
session.save_path = "tcp://127.0.0.1:6379?auth=password"
配置完成后,重启PHP-FPM。
PHP-FPM的配置文件/etc/php-fpm.conf或者/etc/php-fpm.d/*.conf中,也有session的配置。
它们的session配置优先级比php.ini高,会覆盖php.ini中的配置。
所以,也直接在这里面改:
php_value[session.save_handler] = redis php_value[session.save_path] = "tcp://127.0.0.1:6379"
如果用php.ini的配置,则需要把这两行用;注释掉。
然后重启PHP-FPM。
也可以在运行的PHP代码中配置session,如下。
ini_set('session.save_handler', 'redis'); ini_set('session.save_path', 'tcp://127.0.0.1:6379');
写一段PHP测试代码,如下:
session_start(); $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1; echo $count; $_SESSION['count'] = ++$count;
如果刷新页面看到数字不断增加,说明配置Redis保存session成功。
参考资料:
我在跑步 在我的redis cli上,如果至少有一个键发生了更改,则每10分钟保存一次,但是它给了我: 我在redis官方网站上举了一个例子:http://redis.io/topics/persistence 我做错了什么?
问题内容: 语境 我正在使用redis。数据库小于100 MB。 但是,我想进行每日备份。 我也在Ubuntu Server 12.04上运行 输入时: redis-cli 保存 我不知道dump.rdb保存在哪里(因为redis是作为服务启动的,而不是在我的本地目录中)。 问题: 我如何找到Redis将我的dump.rdb保存到哪里? 是否可以指定一个文件名来“保存”,所以我输入如下内容: re
我无法用redis数据库中的数据创建docker redis容器的图像。目前,我正在这样做: 很明显,我对一些基本的东西不太了解。docker commit不是从现有容器创建新映像吗? 好吧,我一直在挖掘。hub上的默认redis图像。docker使用一个数据卷,然后将其装入容器中的/data。为了在容器之间共享此卷,必须使用以下参数启动一个新容器: 请注意,参数的顺序很重要,否则docker r
关闭没有备份的笔记本电脑和存储的数据。也许如果你拉电池,它不会保存)Redis上传数据到内存本身?如何设置自动保存后,每次更改?还是更容易运行一个命令手动?
问题内容: 在写入Redis()期间,出现以下错误: MISCONF Redis配置为保存RDB快照,但当前无法持久保存在磁盘上。禁用了可能修改数据集的命令。请检查Redis日志以获取有关该错误的详细信息。 基本上,我了解到问题在于redis无法将数据保存在磁盘上,但是不知道如何解决该问题。 同样,以下问题也有相同的问题,它很久以前就被抛弃了,没有答案,很可能没有尝试解决该问题。 问题答案: 万一
在写入Redis()的过程中,我收到以下错误: MISCONF Redis配置为保存RDB快照,但当前无法在磁盘上持久保存。禁用可能修改数据集的命令。有关该错误的详细信息,请查看Redis日志。 基本上,我知道问题是redis不能在磁盘上保存数据,但不知道如何解决这个问题。 下面的问题也有同样的问题,它很久以前就被放弃了,没有答案,很可能也没有试图解决问题。