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

Wesley13
• 阅读 453

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Stella981 Stella981
2年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这