文档章节

ThinkPHP扩展,实现Redis的CURD操作。

强子啊
 强子啊
发布于 2016/11/22 16:32
字数 2126
阅读 808
收藏 37

接下为将以ThinkPHP作为MVC开发框架,详细介绍Redis的CURD操作。需要说明的是,在ThinkPHP中本身并不支持Redis开发环境,只支持使用Redis开发简单的数据缓存功能。所以我们必须要通过扩展功能,实现Redis的编程支持。为了方便读者学习,笔者临时开发了相应的模块扩展及数据库扩展。 下载址为 http://beauty-soft.net/book/php_mvc/code/thinkphp_redis.html 解压下载后的压缩包,将得到DbRedis.class.php文件及RedisModel.class.php文件。将DbRedis.class.php文件复制到ThinkPHP/Extend/Driver/Db目录;将RedisModel.class.php文件复制到ThinkPHP/Extend/Model目录。然后在项目配置文件中加入Redis数据库连接信息,如以下代码所示。

Redis 配置 'REDIS_HOST'=>'192.168.0.2', 'REDIS_PORT'=>6379, 'REDIS_AUTH'=>123456, 'REDIS_DB_PREFIX'=>'',

1、增加数据

这里的增加数据包括Redis五大数据类型的数据添加。由于篇幅所限,这里不再详细介绍操作的实现原理,将通过代码演示操作方式。如以下代码所示。

<?php 
/** 
* redis添加数据 
* Enter description here ... 
* @author Administrator 
* 
*/ 
class AddAction extends Action{ 
    /** 
     * list类型 
     * Enter description here ... 
     */ 
    public function lists(){ 
        $Redis=new RedisModel("list11"); 
        //一次只能推送一条       
        echo $Redis->add("ceiba"); 
    } 
     /** 
     * 字符串类型 
     * Enter description here ... 
     */ 
    public function string(){ 
        $Redis=new RedisModel(); 
        $data=array( 
            "str1"=>"ceiba", //一个key,对应一个值 
            "str2"=>"李开湧", 
            "str3"=>"李明", 
        ); 
        echo $Redis->type("string")->add($data); 
    } 
    /** 
     * HASH类型 
     * Enter description here ... 
     */ 
    public function hash(){ 
        $Redis=new RedisModel("user:1"); 
             $data=array( 
               "field1"=>"ceiba", //一个key,对应一个值 
               "field2"=>"李开湧", 
               "field3"=>"李明", 
             ); 
             //支持批量添加 
             echo $Redis->type("hash")->add($data);        
    } 
     /** 
     * 集合类型 
     * Enter description here ... 
     */ 
    public function sets(){ 
             $Redis=new RedisModel("sets:1"); 
        //一次只能推送一条       
        echo $Redis->type("sets")->add("ceiba"); 
    } 
      /** 
     * 有序集合 
     * Enter description here ... 
     */ 
    public function zset(){  
        $Redis=new RedisModel("zset:1"); 
        //支持批量添加 
        $data=array( 
            //排序=>值 
            "10"=>"ceiba", 
            "11"=>"李开湧", 
            "12"=>"李明" 
        );       
        echo $Redis->type("zset")->add($data); 
    } 
} 
?> 
<?php  
/**  
 * redis添加数据  
 * Enter description here ...  
 * @author Administrator  
 *  
 */  
class AddAction extends Action{  
    /**  
     * list类型  
     * Enter description here ...  
     */  
    public function lists(){  
        $Redis=new RedisModel("list11");  
        //一次只能推送一条        
        echo $Redis->add("ceiba");  
    }  
     /**  
     * 字符串类型  
     * Enter description here ...  
     */  
    public function string(){  
        $Redis=new RedisModel();  
        $data=array(  
            "str1"=>"ceiba", //一个key,对应一个值  
            "str2"=>"李开湧",  
            "str3"=>"李明",  
        );  
        echo $Redis->type("string")->add($data);  
    }  
    /**  
     * HASH类型  
     * Enter description here ...  
     */  
    public function hash(){  
        $Redis=new RedisModel("user:1");  
             $data=array(  
               "field1"=>"ceiba", //一个key,对应一个值  
               "field2"=>"李开湧",  
               "field3"=>"李明",  
             );  
             //支持批量添加  
             echo $Redis->type("hash")->add($data);         
    }  
     /**  
     * 集合类型  
     * Enter description here ...  
     */  
    public function sets(){  
             $Redis=new RedisModel("sets:1");  
        //一次只能推送一条        
        echo $Redis->type("sets")->add("ceiba");  
    }  
      /**  
     * 有序集合  
     * Enter description here ...  
     */  
    public function zset(){   
        $Redis=new RedisModel("zset:1");  
        //支持批量添加  
        $data=array(  
            //排序=>值  
            "10"=>"ceiba",  
            "11"=>"李开湧",  
            "12"=>"李明"  
        );        
        echo $Redis->type("zset")->add($data);  
    }  
}  
?>  

2、查询数据

<?php 
// redis查询数据 
class IndexAction extends Action { 
    public function page(){ 
        $this->display(); 
    } 
    /** 
     * 列表类型,默认类型 
     * Enter description here ... 
     */ 
    public function lists(){ 
        //dump(C("REDIS_HOST"));  
        $Redis=new RedisModel("list1"); 
        $field=array( 
            "nmae","age","pro" 
        ); 
        $data=$Redis->field($field)->select(); 
        dump($data); 
        //获得队列中的记录总数 
        $count=$Redis->count(); 
        dump($count); 
    } 
    /** 
     * 字符串类型 
     * Enter description here ... 
     */ 
    public function string(){ 
            $Redis=new RedisModel(); 
            //field 表示每个key名称 
            $rows=$Redis->type("string")->field(array("str1","str2"))->select(); 
            dump($rows); 
    } 
    /** 
     * HASH类型 
     * Enter description here ... 
     */ 
    public function hash(){ 
            $Redis=new RedisModel("h9"); 
            //默认显示所有HASH字段,可以通过field连惯操作限制 
            $rows=$Redis->type("hash")->field(array("field1"))->select(); 
            dump($rows); 
            //统计总记录 
            $count=$Redis->type("hash")->count(); 
            dump($count);        
    } 
    /** 
     * 集合类型 
     * Enter description here ... 
     */ 
    public function sets(){ 
            $Redis=new RedisModel(); 
            $arr=array( 
            "s3","s4" 
            ); 
       $rows=$Redis->type("sets")->field($arr)->where("sinterstore")->select();//求交集 
          dump($rows); 
          $rows=$Redis->type("sets")->field($arr)->where("sunion")->select();//求并集 
          dump($rows); 
          $rows=$Redis->type("sets")->field($arr)->where("sdiff")->select();//求差集 
          dump($rows); 
          $Redis=new RedisModel("s3"); 
          $rows=$Redis->type("sets")->select(); //返回单个集合列表中的所有成员 
          dump($rows); 
          //统计记录 
          $Redis=new RedisModel("s3"); 
          $count=$Redis->type("sets")->count();  
          dump($count);      
    } 
    /** 
     * 有序集合 
     * Enter description here ... 
     */ 
    public function zset(){  
        $Redis=new RedisModel("z2");  
        //默认显示0到20      
        $data=$Redis->type("zset")->limit("0,-1")->select(); 
        dump($data); 
        //使用zRevRange显示数据,数组第2个参数为true时显示排序号 
         $data=$Redis->type("zset")->limit("0,-1")->order(array("zRevRange",true))->select(); 
        dump($data); 
        //不设置limit时,将统计所有记录 
        $count=$Redis->type("zset")->limit("0,1")->count(); 
        dump($count); 
         
    } 
} 

<?php  
// redis查询数据  
class IndexAction extends Action {  
    public function page(){  
        $this->display();  
    }  
    /**  
     * 列表类型,默认类型  
     * Enter description here ...  
     */  
    public function lists(){  
        //dump(C("REDIS_HOST"));   
        $Redis=new RedisModel("list1");  
        $field=array(  
            "nmae","age","pro"  
        );  
        $data=$Redis->field($field)->select();  
        dump($data);  
        //获得队列中的记录总数  
        $count=$Redis->count();  
        dump($count);  
    }  
    /**  
     * 字符串类型  
     * Enter description here ...  
     */  
    public function string(){  
            $Redis=new RedisModel();  
            //field 表示每个key名称  
            $rows=$Redis->type("string")->field(array("str1","str2"))->select();  
            dump($rows);  
    }  
    /**  
     * HASH类型  
     * Enter description here ...  
     */  
    public function hash(){  
            $Redis=new RedisModel("h9");  
            //默认显示所有HASH字段,可以通过field连惯操作限制  
            $rows=$Redis->type("hash")->field(array("field1"))->select();  
            dump($rows);  
            //统计总记录  
            $count=$Redis->type("hash")->count();  
            dump($count);         
    }  
    /**  
     * 集合类型  
     * Enter description here ...  
     */  
    public function sets(){  
            $Redis=new RedisModel();  
            $arr=array(  
            "s3","s4"  
            );  
       $rows=$Redis->type("sets")->field($arr)->where("sinterstore")->select();//求交集  
          dump($rows);  
          $rows=$Redis->type("sets")->field($arr)->where("sunion")->select();//求并集  
          dump($rows);  
          $rows=$Redis->type("sets")->field($arr)->where("sdiff")->select();//求差集  
          dump($rows);  
          $Redis=new RedisModel("s3");  
          $rows=$Redis->type("sets")->select(); //返回单个集合列表中的所有成员  
          dump($rows);  
          //统计记录  
          $Redis=new RedisModel("s3");  
          $count=$Redis->type("sets")->count();   
          dump($count);       
    }  
    /**  
     * 有序集合  
     * Enter description here ...  
     */  
    public function zset(){   
        $Redis=new RedisModel("z2");   
        //默认显示0到20       
        $data=$Redis->type("zset")->limit("0,-1")->select();  
        dump($data);  
        //使用zRevRange显示数据,数组第2个参数为true时显示排序号  
         $data=$Redis->type("zset")->limit("0,-1")->order(array("zRevRange",true))->select();  
        dump($data);  
        //不设置limit时,将统计所有记录  
        $count=$Redis->type("zset")->limit("0,1")->count();  
        dump($count);  
          
    }  
}   

3、删除数据

<?php 
/** 
* Redis删除数据 
* Enter description here ... 
* @author Administrator 
* 
*/ 
class DeleteAction extends Action{ 
    /** 
     * list类型 
     * Enter description here ... 
     */ 
    public function lists(){ 
        $Redis=new RedisModel("mylist"); 
            //根据索引号,删除指定的list元素          
        echo $Redis->where(3)->delete(); 
        //ltrim区间批量删除,保留4~5之间的记录 
echo $Redis->type("list")->where(array("4","5"))->delete("ltrim");  
        //lpop单条顺序弹出     
echo $Redis->type("list")->delete("lpop");  
         
    } 
     /** 
     * 字符串类型 
     * Enter description here ... 
     */ 
    public function string(){ 
           $Redis=new RedisModel(); 
           //直接删除key,这各方式适用于所有数据类型 
           echo $Redis->type("string")->field(array("str1","str2"))->delete(); 
    } 
    /** 
     * HASH类型 
     * Enter description here ... 
     */ 
    public function hash(){ 
        $Redis=new RedisModel("user:1");         
             //删除指定hash中的指定字段(field),不支持批量删除 
             echo $Redis->type("hash")->where("field1")->delete();  
     
    } 
     /** 
     * 集合类型 
     * Enter description here ... 
     */ 
    public function sets(){ 
             $Redis=new RedisModel("s1"); 
        //删除sets:1集合中名为age的value     
        echo $Redis->type("sets")->where("age")->delete(); 
    } 
    /** 
     * 有序集合 
     * Enter description here ... 
     */ 
    public function zset(){  
        $Redis=new RedisModel("z1"); 
        //根据集合元素value进行删除 
        echo $Redis->type("zset")->where("two")->delete();  
        //根据排序号进行区间批量删除,保留2~3之间的记录 
        echo $Redis->type("zset")->where(array("1","4"))->delete("zremRangeByScore");  
        //根据索引号进行区间批量删除,保留2~3之间的记录 
        echo $Redis->type("zset")->where(array("1","3"))->delete("zRemRangeByRank");  
    } 
} 
?> 
<?php  
/**  
 * Redis删除数据  
 * Enter description here ...  
 * @author Administrator  
 *  
 */  
class DeleteAction extends Action{  
    /**  
     * list类型  
     * Enter description here ...  
     */  
    public function lists(){  
        $Redis=new RedisModel("mylist");  
            //根据索引号,删除指定的list元素           
        echo $Redis->where(3)->delete();  
        //ltrim区间批量删除,保留4~5之间的记录  
echo $Redis->type("list")->where(array("4","5"))->delete("ltrim");   
        //lpop单条顺序弹出      
echo $Redis->type("list")->delete("lpop");   
          
    }  
     /**  
     * 字符串类型  
     * Enter description here ...  
     */  
    public function string(){  
           $Redis=new RedisModel();  
           //直接删除key,这各方式适用于所有数据类型  
           echo $Redis->type("string")->field(array("str1","str2"))->delete();  
    }  
    /**  
     * HASH类型  
     * Enter description here ...  
     */  
    public function hash(){  
        $Redis=new RedisModel("user:1");          
             //删除指定hash中的指定字段(field),不支持批量删除  
             echo $Redis->type("hash")->where("field1")->delete();   
      
    }  
     /**  
     * 集合类型  
     * Enter description here ...  
     */  
    public function sets(){  
             $Redis=new RedisModel("s1");  
        //删除sets:1集合中名为age的value      
        echo $Redis->type("sets")->where("age")->delete();  
    }  
    /**  
     * 有序集合  
     * Enter description here ...  
     */  
    public function zset(){   
        $Redis=new RedisModel("z1");  
        //根据集合元素value进行删除  
        echo $Redis->type("zset")->where("two")->delete();   
        //根据排序号进行区间批量删除,保留2~3之间的记录  
        echo $Redis->type("zset")->where(array("1","4"))->delete("zremRangeByScore");   
        //根据索引号进行区间批量删除,保留2~3之间的记录  
        echo $Redis->type("zset")->where(array("1","3"))->delete("zRemRangeByRank");   
    }  
}  
?>  

在Redis中,更新数据与添加数据是可以相互转换的,所以这里不再介绍。更多的功能特性及使用方法,随着时间的推移,笔者会进行更新。本书读者可在配套网站中得到后续支持。

© 著作权归作者所有

下一篇: Widget扩展
强子啊
粉丝 16
博文 16
码字总数 15012
作品 0
长沙
高级程序员
私信 提问
加载中

评论(3)

tomener
tomener
多此一举
最初的-梦想
最初的-梦想
哦哦哦
言会咸
言会咸
写的好,给32个赞👍
适合PHP新手入门上手的开发框架-thinkphp

ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想...

big_cat
2013/06/15
0
0
thinkphp开发的框架的简单介绍

  说起来现在的互联网时代中用到thinkphp的地方也是很多的,这也是一项技术活,开发框架也是比较有难度的,下面就给大家简单地介绍一下。   ThinkPHP是一个免费开源的,快速、简单的面向...

孙智绘
2012/06/28
40
0
ThinkPHP的网友评论

ThinkPHP 是一个快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发 布,并且永久免费使用,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。借鉴了国外很多优秀的框架和...

红薯
2009/12/11
1K
7
ThinkPHP 2.0 版本正式发布

在经过5个月的重构和完善之后,ThinkPHP终 于发布了新的里程碑版本2.0,作为新版网站上线和祖国60周年华诞的献礼,我们送给大家这样一份惊喜。感谢为了新版的功能辛苦测试和完善的朋友们,感...

红薯
2009/10/16
1K
1
「ThinkPHP开发者周刊」第15期——ThinkPHP十三周年专刊

[ 本周读数 ] —— ThinkPHP十三周年庆 1月15日是ThinkPHP发布13周年纪念,真的是十年弹指一挥间,这个国民PHP框架是如何诞生和发展起来的,来看看ThinkPHP十三周年的报告吧! [ 新闻/资讯 ...

流年
01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
2
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
6
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部