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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
php模板中出现空行解决方法
Mar 08 PHP
php中对2个数组相加的函数
Jun 24 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
curl和libcurl的区别简介
Jul 01 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
PHP与Web页面的交互示例详解二
Aug 04 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
PHP4引用文件语句的对比
2006/10/09 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
文本加密解密
2006/06/23 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python:接口间数据传递与调用方法
2018/12/17 Python
Python中调用其他程序的方式详解
2019/08/06 Python
python 实现多维数组转向量
2019/11/30 Python
django框架auth模块用法实例详解
2019/12/10 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
货代行业个人求职简历的自我评价
2013/10/22 职场文书
库房主管岗位职责
2013/12/31 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
乐山大佛导游词
2015/02/02 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
如何利用React实现图片识别App
2022/02/18 Javascript