Thinkphpsession缓存没有redis类库

Redis.class.php放在Library/Think/Session/Driver/下:

<?php

/**
* +----------------------------------------------------------------------
* | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
* +----------------------------------------------------------------------
* | Copyright (c) 2006-2013 http://thinkphp.cn All rights reserved.
* +----------------------------------------------------------------------
* | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* +----------------------------------------------------------------------
* | @author guizhiming <sd2536888@163.com>
* +----------------------------------------------------------------------
* | @datetime 2014-4-1 14:11:24
* +----------------------------------------------------------------------
*/ namespace Think\Session\Driver; /**
* Redis Session驱动
* 要求安装phpredis扩展:https://github.com/nicolasff/phpredis
* @category Think
* @package Session
* @subpackage Driver
* @author guizhiming <sd2536888@163.com>
* @version TP3.2~TP3.2.1
*/
class Redis { /**
* Redis句柄
*/
private $handler;
private $get_result; public function __construct(){
if ( !extension_loaded('redis') ) {
E(L('_NOT_SUPPERT_').':redis');
}
if(empty($options)) {
$options = array (
'host' => C('SESSION_REDIS_HOST') ? C('SESSION_REDIS_HOST') : '127.0.0.1',
'port' => C('SESSION_REDIS_PORT') ? C('SESSION_REDIS_PORT') : 6379,
'timeout' => C('SESSION_CACHE_TIME') ? C('SESSION_CACHE_TIME') : false,
'persistent' => C('SESSION_PERSISTENT') ? C('SESSION_PERSISTENT') : false,
'auth' => C('SESSION_REDIS_AUTH') ? C('SESSION_REDIS_AUTH') : false,
);
}
$options['host'] = explode(',', $options['host']);
$options['port'] = explode(',', $options['port']);
$options['auth'] = explode(',', $options['auth']);
foreach ($options['host'] as $key=>$value) {
if (!isset($options['port'][$key])) {
$options['port'][$key] = $options['port'][0];
}
if (!isset($options['auth'][$key])) {
$options['auth'][$key] = $options['auth'][0];
}
}
$this->options = $options;
$expire = C('SESSION_EXPIRE');
$this->options['expire'] = isset($expire) ? (int)$expire : (int)ini_get('session.gc_maxlifetime');;
$this->options['prefix'] = isset($options['prefix']) ? $options['prefix'] : C('SESSION_PREFIX');
$this->handler = new \Redis;
} /**
* 连接Redis服务端
* @access public
* @param bool $is_master : 是否连接主服务器
*/
public function connect($is_master = true) {
if ($is_master) {
$i = 0;
} else {
$count = count($this->options['host']);
if ($count == 1) {
$i = 0;
} else {
$i = rand(1, $count - 1); //多个从服务器随机选择
}
}
$func = $this->options['persistent'] ? 'pconnect' : 'connect';
try {
if ($this->options['timeout'] === false) {
$result = $this->handler->$func($this->options['host'][$i], $this->options['port'][$i]);
if (!$result)
throw new \Think\Exception('Redis Error', 100);
} else {
$result = $this->handler->$func($this->options['host'][$i], $this->options['port'][$i], $this->options['timeout']);
if (!$result)
throw new \Think\Exception('Redis Error', 101);
}
if ($this->options['auth'][$i]) {
$result = $this->handler->auth($this->options['auth'][$i]);
if (!$result) {
throw new \Think\Exception('Redis Error', 102);
}
}
} catch ( \Exception $e ) {
exit('Error Message:'.$e->getMessage().'<br>Error Code:'.$e->getCode().'');
}
} /**
* 打开Session
* @access public
* @param string $savePath
* @param mixed $sessName
*/
public function open($savePath, $sessName) {
return true;
} /**
* 关闭Session
* @access public
*/
public function close() {
if ($this->options['persistent'] == 'pconnect') {
$this->handler->close();
}
return true;
} /**
* 读取Session
* @access public
* @param string $sessID
*/
public function read($sessID) {
$this->connect(0);
$this->get_result = $this->handler->get($this->options['prefix'].$sessID);
return $this->get_result;
} /**
* 写入Session
* @access public
* @param string $sessID
* @param String $sessData
*/
public function write($sessID, $sessData) {
if (!$sessData || $sessData == $this->get_result) {
return true;
}
$this->connect(1);
$expire = $this->options['expire'];
$sessID = $this->options['prefix'].$sessID;
if(is_int($expire) && $expire > 0) {
$result = $this->handler->setex($sessID, $expire, $sessData);
$re = $result ? 'true' : 'false';
}else{
$result = $this->handler->set($sessID, $sessData);
$re = $result ? 'true' : 'false';
}
return $result;
} /**
* 删除Session
* @access public
* @param string $sessID
*/
public function destroy($sessID) {
$this->connect(1);
return $this->handler->delete($this->options['prefix'].$sessID);
} /**
* Session 垃圾回收
* @access public
* @param string $sessMaxLifeTime
*/
public function gc($sessMaxLifeTime) {
return true;
} /**
* 打开Session
* @access public
* @param string $savePath
* @param mixed $sessName
*/
public function execute() {
session_set_save_handler(
array(&$this, "open"),
array(&$this, "close"),
array(&$this, "read"),
array(&$this, "write"),
array(&$this, "destroy"),
array(&$this, "gc")
);
} public function __destruct() {
if ($this->options['persistent'] == 'pconnect') {
$this->handler->close();
}
session_write_close();
} }

同样加载配置文件:

    //redis操作session
'SESSION_AUTO_START' => true, // 是否自动开启Session
'SESSION_TYPE' => 'Redis', //session类型
'SESSION_PERSISTENT' => 1, //是否长连接(对于php来说0和1都一样)
'SESSION_CACHE_TIME' => 1, //连接超时时间(秒)
'SESSION_EXPIRE' => 300, //session有效期(单位:秒) 0表示永久缓存
'SESSION_PREFIX' => 'sess_', //session前缀
'SESSION_REDIS_HOST' => '服务器地址', //分布式Redis,默认第一个为主服务器
'SESSION_REDIS_AUTH' => 'shgc@123456',
'SESSION_REDIS_PORT' => '', //端口,如果相同只填一个,用英文逗号分隔

引入类库:

use Think\Session\Driver\Redis;

代码:

 $user = "哈哈哈";
$redis = new Redis();
$redis->write('user',$user);
echo $redis->read('user');

Thinkphp3.2 Redis缓存session的更多相关文章

  1. Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化

    Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...

  2. redis缓存+session 实现单点登录

    一.单点登录介绍 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系 ...

  3. thinkphp3.2.3 版本使用redis缓存的时候无法使用认证

    我在使用thinkphp3.2.3的时候 发现如果是使用redis缓存 设置了认证的redis能连接成功 却无法 set 操作 ,检查发现是没有认证导致的  $redis->auth这一步没有, ...

  4. 基于Redis缓存的Session共享(附源码)

    基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...

  5. thinkphp3.2.3 版本使用redis缓存添加认证

    我在使用thinkphp3.2.3的时候 发现如果是使用redis缓存 设置了认证的redis能连接成功 却无法 set 操作 ,检查发现是没有认证导致的  $redis->auth这一步没有, ...

  6. [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...

  7. redis缓存web session

    redis缓存web session 首先说下架构图.使用Redis作为会话服务器,统一管理Session.如图,集群里的WEB服务器共享存放在REDIS里面全部的客户端SESSION. 当然,反向代 ...

  8. 在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    在nodejs使用Redis缓存和查询数据及Session持久化(Express) https://segmentfault.com/a/1190000002488971

  9. django memcached/redis缓存 =====缓存session

    全站使用 例如 博客等缓存,通过中间件实现全站缓存. 加缓存中间件,那么多中间件加在什么位置? 请求时:缓存加在中间件里的最后一个,比如一次经过1.2.3.4中间件,加在4 返回事:缓存加在中间件里的 ...

随机推荐

  1. 解决postgresql在docker中无法保存状态的问题

    PS:最佳解决方式是将目录挂载到宿主机,容器出问题了,数据还在,以下方式容器出问题会丢失数据,以下思想只供参考!!! 用过docker的人都知道,docker是不适合来放数据库的,这也不是绝对的.如果 ...

  2. Python 运算符Ⅳ

    Python比较运算符 以下假设变量a为10,变量b为20: 以下实例演示了Python所有http://www.xuanhe.net/比较运算符的操作: 以上实例输出结果: Python赋值运算符 ...

  3. 引用自定义的css或者js文件

    用script标签,src是js文件路径 <script type="text/javascript" src="./js/udc.js">< ...

  4. Cassandra 安装部署

    Linux 系统安装Cassandra 一.Cassandra需要安装jdk支持,首先安装jdk 自行百度查找安装 二.下载Cassandra 官网地址: https://cassandra.apac ...

  5. HTTP与HTTPS区别(详细)

    转:http://blog.sina.com.cn/s/blog_6eb3177a0102x66r.html 1.减少http请求(合并文件.合并图片)2.优化图片文件,减小其尺寸,特别是缩略图,一定 ...

  6. jeesite安装时Perhaps you are running on a JRE rather than a JDK

    使用自己本地安装的maven,启动jeesite报错: No compiler is provided in this environment. Perhaps you are running on ...

  7. Module not found: Error: Can't resolve ' vue-resource'

    问题: 在学习vue的过程中出现了这个问题,说明VueResource模块没有安装. 解决方法: 打开终端,进入当前项目所在目录,输入指令 npm install vue-resource --sav ...

  8. iOS 自定义一对UI表现相反的按钮

    假如有一对按钮[重置][提交],要让他们的默认UI和点击的UI表现刚好相反 [提交]按钮,默认橙色,点击边框是橙色,字体是橙色,背景变白色 [重置]按钮,默认白色橙色,边框是橙色,点击字体是白色,背景 ...

  9. @清晰掉 Sizeof与字符串

    Sizeof与字符串 1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符 如在代码中写  "abc",那么编译器帮你存储的是"abc/0" 2 ...

  10. SQL Server Availability Group Failover 测试

    兼容性测试: 测试脚本: 环境:windows failover cluster 主库执行脚本: USE [master]GOALTER AVAILABILITY GROUP [test_AG]MOD ...