广联达怎么设置梁支座中梁如何设置后缀

ThinkPHP自定义Redis处理SESSION的实现方法,thinkphpredis-android100学习网
ThinkPHP自定义Redis处理SESSION的实现方法,thinkphpredis
ThinkPHP自定义Redis处理SESSION的实现方法,thinkphpredis本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法。分享给大家供大家参考,具体如...
ThinkPHP自定义Redis处理SESSION的实现方法,thinkphpredis
本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法。分享给大家供大家参考,具体如下:
日常中我们都会使用到session来保存用户登录的信息,常用的session的保存方式有:文件保存(默认)、数据库保存、Redis保存、memcached等。这里主要记录一下在用ThinkPHP处理session用Redis来保存session的用法。
1.在配置项中定义:
'SESSION_TYPE' =& 'Redis', //session保存类型
'SESSION_PREFIX' =& 'sess_', //session前缀
'REDIS_HOST' =& '127.0.0.1' //REDIS服务器地址
'REDIS_PORT' =& 6379, //REDIS连接端口号
'SESSION_EXPIRE' =& 3600, //SESSION过期时间
可以ThinkPHP/Common/functions.php文件中找到定义session的方法,大约在1179行左右读取session驱动的判断。如果我们定义了配置项SESSION_TYPE,则会new一个Redis对象并调用会话存储函数session_set_save_handler()。
2.在ThinkPHP\Library\Think\Session\Driver目录下新建Redis.class.php文件
文件内容如下:
namespace Think\Session\D
class Redis {
Redis连接对象
Session过期时间
* 打开方法
* @param type $path
* @param type $name
* @return type
public function open($path, $name) {
$this-&expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime');
$this-&redis = new Redis();
return $this-&redis-&connect(C('REDIS_HOST'), C('REDIS_PORT'));
* @return type
public function close() {
return $this-&redis-&close();
* @param string $id
* @return type
public function read($id) {
$id = C('SESSION_PREFIX') . $
$data = $this-&redis-&get($id);
return $data ? $data : '';
* @param string $id
* @param type $data
* @return type
public function write($id, $data) {
$id = C('SESSION_PREFIX') . $
return $this-&redis-&set($id, $data, $this-&expire);
* @param string $id
public function destroy($id) {
$id = C('SESSION_PREFIX') . $
$this-&redis-&delete($id);
* 垃圾回收
* @param type $maxLifeTime
* @return boolean
public function gc($maxLifeTime) {
至此就完成了Redis对session的处理。
memcached的方法和Redis差不多一样!
补充:小编在这里推荐一款本站的php格式化美化的排版工具帮助大家在以后的PHP程序设计中进行代码排版:
php代码在线格式化美化工具:http://tools.jb51.net/code/phpformat
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。1641人阅读
redis(7)
最近公司的项目越做越大,数据量越来越大,逐渐地要开始支持分布式的数据库,当然包括要缓存。经过了各种的讨论和认证,决定用redis服务器作为数据缓存的服务器,除了支持丰富的数据类型,string,list,hash,set ,sort set ,还有持久化的数据的功能。这一方面确实比memcache好很多。下面是我的整个测试过程(tp3.2以上)。
注意:首先要安装phpredis和配置好redis的主从复制,并且要启动各个redis的实例。
与tp自带的redis.class.php的缓存驱动不同,实现功能
1、可以实现主从分布,多个slave
2、master主要负责写,slave负责随机读
3、单例模式,一次实例化所有的redis,包括master,slave。不需要每操作一次redis,就连接redis一次,那样严重浪费资源。
4、自由拓展,可以根据自己的需要继续添加redis的API操作。
一、tp的redis配置
// REDIS配置
'DATA_CACHE_TYPE' =&'Redis',
'DATA_REDIS_HOST' =&'localhost,localhost',
'DATA_REDIS_PORT' =&'',
'DATA_CACHE_TIME' =&30,
'DATA_CACHE_PREFIX' =&'redis_',
'DATA_PERSISTENT' =&true&/span&默认第一个是master,其余的是slave。
二、redis的缓存驱动
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c)
All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st &&
// +----------------------------------------------------------------------
namespace Think\Cache\D
use Think\C
defined('THINK_PATH') or exit();
* Redis缓存驱动
* 要求安装phpredis扩展:/nicolasff/phpredis
* @category
* @package
* @subpackage
* @author huangzengbing
class Redisrw extends Cache {
*类对象实例数组
*共有静态变量
*@param mixed $_instance存放实例
private static $_instance=array();
*每次实例的句柄
protected $
*redis的配置
*全局 静态变量
*静态的方法里调用静态变量和静态方法只能用self,不能出现$this
static $option=array();
*架构函数,必须设置为私有,防止外部new
*实例化redis驱动的实例,寄一个socket
private function __construct($host,$port,$auth) {
if(!$this-&handler) {
$this-&handler= new \R
$func = self::$option['persistent'] ? 'pconnect' : 'connect';
if(self::$option['timeout'] === false) {
$this-&handler-&$func($host,$port);
$this-&handler-&$func($host,$port,self::$option['timeout']);
if($auth){
$this-&handler-&auth($auth);
*实例函数,单例入口
*共有,静态函数
public static function getInstance($options=array()) {
// 判断是否存在redis扩展
if ( !extension_loaded('redis') ) {
E(L('_NOT_SUPPERT_').':redis');
if(empty($options)) {
$options = array (
'host'
=& C('DATA_REDIS_HOST') ? C('DATA_REDIS_HOST') : '127.0.0.1',
'port'
=& C('DATA_REDIS_PORT') ? C('DATA_REDIS_PORT') : 6379,
'timeout'
=& C('DATA_CACHE_TIME') ? C('DATA_CACHE_TIME') : false,
'persistent'
=& C('DATA_PERSISTENT') ? C('DATA_PERSISTENT') : false,
'auth'
=& C('DATA_REDIS_AUTH') ? C('DATA_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];
self::$option =
self::$option['expire'] =
isset($options['expire']) ?
$options['expire']
C('DATA_EXPIRE');
self::$option['prefix'] =
isset($options['prefix']) ?
$options['prefix']
C('DATA_CACHE_PREFIX');
self::$option['length'] =
isset($options['length']) ?
$options['length']
// 一次性创建redis的在不同host的实例
foreach(self::$option['host'] as $i=&$server) {
$host=self::$option['host'][$i];
$port=self::$option['port'][$i];
$auth=self::$option['auth'][$i];
if(!(self::$_instance[$i] instanceof self)) {
self::$_instance[$i]=new self($host,intval($port),$auth);
// 默认返回第一个实例,即master
return self::$_instance[0];
*判断是否master/slave,调用不同的master或者slave实例
public function is_master($master=true) {
if($master) {
$count=count(self::$option['host']);
if($count==1) {
$i=rand(1,$count - 1);
//返回每一个实例的句柄
return self::$_instance[$i]-&
* 读取缓存,随机从slave服务器中读缓存
* @access public
* @param string $name 缓存变量名
* @return mixed
public function get($name) {
$redis=$this-&is_master(false);
N('cache_read',1);
$value = $redis-&get(self::$option['prefix'].$name);
= json_decode( $value, true );
//检测是否为JSON数据 true 返回JSON解析数组, false返回源数据
return ($jsonData === NULL) ? $value : $jsonD
* 写入缓存,写入master的redis服务器
* @access public
* @param string $name 缓存变量名
* @param mixed $value
* @param integer $expire
有效时间(秒)
* @return boolean
public function set($name, $value, $expire = null) {
$redis=$this-&is_master(true);
N('cache_write',1);
if(is_null($expire)) {
self::$option['expire'];
self::$option['prefix'].$
//对数组/对象数据进行缓存处理,保证数据完整性
(is_object($value) || is_array($value)) ? json_encode($value) : $
if(is_int($expire) && $expire & 0) {
$result = $redis-&setex($name, $expire, $value);
$result = $redis-&set($name, $value);
if($result && self::$option['length']&0) {
// 记录缓存队列
$this-&queue($name);
* 删除缓存
* @access public
* @param string $name 缓存变量名
* @return boolean
public function rm($name) {
$redis=$this-&is_master(true);
return $redis-&delete(self::$option['prefix'].$name);
* 清除缓存
* @access public
* @return boolean
public function clear() {
$redis=$this-&is_master(true);
return $redis-&flushDB();
*禁止外部克隆对象
private function __clone() {
//可以根据需要,继续添加phpredis的驱动api.
* 关闭长连接
* @access public
public function __destruct() {
if (self::$option['persistent'] == 'pconnect') {
// 关闭master的长连接,不可以写,但slave任然可以读
$redis=$this-&is_master(true);
$redis-&close();
3、CONTROLLER中用法
$redis=\Think\Cache\Driver\Redisrw::getInstance();
$redis-&set('address','beijing');
$result=$redis-&get('address');
dump($result);
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:130144次
积分:2393
积分:2393
排名:第14521名
原创:96篇
转载:44篇
评论:27条
(1)(2)(3)(5)(5)(4)(4)(1)(6)(5)(5)(9)(8)(2)(5)(9)(4)(17)(19)(8)(2)(8)(3)(9)1715人阅读
开源系统及开发API(18)
原本感觉 Redis 应该像是作为的一种被拿来操作的,可是实际上 thinkphp 3.2 是把 redis 作为缓存的一种方式来进行解析的,从 redis 文件被存放的位置就可以看出来:
\ThinkPHP \Library \Think \Cache \Driver
是作为 Cache,缓存方式的一种被拿来使用的,可是经过我们前面的学习,我们发现 Redis 不光光能做这些。
还有一个发现是这样的,假设我在 thinkphp 的控制器中执行如下代码:
namespace Home\C
use Think\C
class IndexController extends Controller {
public function index() {
// 配置 redis 缓存
$set = array(
'type' =&'redis' ,
'host'=&'127.0.0.1' ,
'port'=&6379,
$redis=S($set);
// 存储数据
$redis-&name=&hello world again&;
$redis-&id=1;
之后我们到 redis-cli.exe 中查看以下存储的结果:
接下来换种方式存储:
namespace Home\C
use Think\C
class IndexController extends Controller {
public function index() {
// 配置 redis 缓存
$set = array(
'type' =&'redis' ,
'host'=&'127.0.0.1' ,
'port'=&6379,
// 设置要存储的数据
$message = array(
'name' =&'yang' ,
'id'=&1
S('message',$message,$set);
再来查看缓存结果:
从上述实验我们可以得出结论,thinkphp 官方给出的源码中只是把 redis 作为一个缓存的工具,如果我们需要实现更加丰富的操作的话,就需要自己封装类了。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:91277次
积分:2963
积分:2963
排名:第10974名
原创:206篇
转载:44篇
评论:11条
(1)(1)(1)(12)(16)(17)(18)(36)(38)(67)(25)(17)(5)&&&&&&&&&&&
Redis是一种常用的非关系型数据库,主要用作数据缓存,数据保存形式为key-value,键值相互映射.它的数据存储跟MySQL不同,它数据存储在内存之中,所以数据读取相对而言很快,用来做高并发非常不错.
ThinkPhP5.0自带了Redis扩展,在使用之前先下载php_redis.dll 网址 http://windows.php.net/downloads/pecl/releases/redis/2.2.7/ ;根据自己windows操作系统选择相应的版本,我自己是系统64位,安装的是VC2012 所以下载的是
下载好压缩包之后,把里面的php_redis.dll 解压到D:\wamp\bin\php\php5.6.25\ext (根据自己wamp所在的盘自己选择),然后在php.ini里面添加extension=php_redis.dll,重新启动apache就可以了;
下面是我自己测试的代码,可以使用,封装的不多,可以根据自己的需求去动手封装
extend 是thinkPHP5.0的扩展类库目录,可以自己去定义
namespace My;  //目录我放在thinkphp5.0/extend/My
class RedisPackage
protected static $handler =
protected $options = [
'host' =& '127.0.0.1',
'port' =& 6379,
'password' =& '',
'select' =& 0,
'timeout' =& 0,    //关闭时间 0:代表不关闭
'expire' =& 0,
'persistent' =& false,
'prefix' =& '',
public function __construct($options = [])
if (!extension_loaded('redis')) {
//判断是否有扩展(如果你的apache没reids扩展就会抛出这个异常)
throw new \BadFunctionCallException('not support: redis');
if (!empty($options)) {
$this-&options = array_merge($this-&options, $options);
$func = $this-&options['persistent'] ? 'pconnect' : 'connect';
//判断是否长连接
self::$handler = new \R
self::$handler-&$func($this-&options['host'], $this-&options['port'], $this-&options['timeout']);
if ('' != $this-&options['password']) {
self::$handler-&auth($this-&options['password']);
if (0 != $this-&options['select']) {
self::$handler-&select($this-&options['select']);
* 写入缓存
* @param string $key 键名
* @param string $value 键值
* @param int $exprie 过期时间 0:永不过期
* @return bool
public static function set($key, $value, $exprie = 0)
if ($exprie == 0) {
$set = self::$handler-&set($key, $value);
$set = self::$handler-&setex($key, $exprie, $value);
* 读取缓存
* @param string $key 键值
* @return mixed
public static function get($key)
$fun = is_array($key) ? 'Mget' : 'get';
return self::$handler-&{$fun}($key);
* 获取值长度
* @param string $key
* @return int
public static function lLen($key)
return self::$handler-&lLen($key);
* 将一个或多个值插入到列表头部
* @param $key
* @param $value
* @return int
public static function LPush($key, $value, $value2 = null, $valueN = null)
return self::$handler-&lPush($key, $value, $value2, $valueN);
* 移出并获取列表的第一个元素
* @param string $key
* @return string
public static function lPop($key)
return self::$handler-&lPop($key);
namespace app\index\
use think\C
use My\RedisP
class Redis extends Controller
function redis()
$redis=new RedisPackage();
$redis::set('dede','我就笑笑');
echo $redis::get('dede');
阅读(...) 评论()如何在thinkphp3.2.3里面设置redis - ThinkPHP框架
$redis&=&new&\Redis();
$redis-&connect('127.0.0.1',6379);
$redis-&set('test','hello&world!');
echo&$redis-&get(&test&);
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

我要回帖

更多关于 广联达梁拉筋设置 的文章

 

随机推荐