thinkPHP框架通过Redis实现增删改查操作的方法详解


Posted in PHP onMay 13, 2019

本文实例讲述了thinkPHP框架通过Redis实现增删改查操作的方法。分享给大家供大家参考,具体如下:

一、概述

Redis是一个NoSQL数据库,由于其数据类型的差异,所以要在MVC框架中实现CURD操作,比较繁锁。事实上在ThinkPHP框架中,只能实现简单的缓存应用。而不像MongoDB那样能够实现常见数据库的CURD操作。本文章将通过扩展的方式,实现Redis的CURD操作,这样我们就可以像操作普通的Mysql数据库那样实现Redis的编程了。

二、实现过程

接下为将以ThinkPHP作为MVC开发框架,详细介绍Redis的CURD操作。需要说明的是,在ThinkPHP中本身并不支持Redis开发环境,只支持使用Redis开发简单的数据缓存功能。所以我们必须要通过扩展功能,实现Redis的编程支持。为了方便读者学习,笔者临时开发了相应的模块扩展及数据库扩展。

解压下载后的压缩包,将得到DbRedis.class.php文件及RedisModel.class.php文件。将DbRedis.class.php文件复制到ThinkPHP/Extend/Driver/Db目录;将RedisModel.class.php文件复制到ThinkPHP/Extend/Model目录。然后在项目配置文件中加入Redis数据库连接信息,如以下代码所示。

'REDIS_HOST'=>'192.168.0.2',
'REDIS_PORT'=>6379,
'REDIS_AUTH'=>123456,
'REDIS_DB_PREFIX'=>'',

读者可根据实际环境填写即可。通过前面步骤,至此就完成了在ThinkPHP中进行Redis开发的前期准备,接下来将结合示例代码,详细演示Redis的CURD操作。

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);
  }
}
?>

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);
  }
}

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");
  }
}
?>

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
PHP解决中文乱码
Apr 28 PHP
php 查找数组元素提高效率的方法详解
May 05 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
详解php协程知识点
Sep 21 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 #PHP
PHP使用Redis实现Session共享的实现示例
May 12 #PHP
如何让PHP编码更加好看利于阅读
May 12 #PHP
Yii2处理密码加密及验证的方法
May 12 #PHP
php和asp语法上的区别总结
May 12 #PHP
Laravel推荐使用的十个辅助函数
May 10 #PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 #PHP
You might like
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP处理postfix邮件内容的方法
2015/06/16 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
关于vue面试题汇总
2018/03/20 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
python记录程序运行时间的三种方法
2017/07/14 Python
pandas实现选取特定索引的行
2018/04/20 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
C#实现启动一个进程
2016/10/01 面试题
婚礼新郎父母答谢词
2014/01/16 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
竞聘上岗演讲
2014/05/19 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
小学教学工作总结2015
2015/05/13 职场文书
董事长致辞
2015/07/29 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫