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通用分页类page.php[仿google分页]
Aug 31 PHP
php 移除数组重复元素的一点说明
Nov 27 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
php实现的日历程序
Jun 18 PHP
百度地图API使用方法详解
Aug 25 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
js活用事件触发对象动作
2008/08/10 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
python 测试实现方法
2008/12/24 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
Python实现高效求解素数代码实例
2015/06/30 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python 负数取模运算实例
2020/06/03 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
管理失职检讨书
2014/02/12 职场文书
业务员简历自我评价
2014/03/06 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
检讨书大全
2015/01/27 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python