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 进度条实现代码
Mar 10 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
php 多文件上传的实现实例
Oct 23 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php下将XML转换为数组
2010/01/01 PHP
PHP里的单例类写法实例
2015/06/25 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Django rest framework实现分页的示例
2018/05/24 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
咖啡厅创业计划书范本
2014/01/22 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
嘉宾邀请函
2015/01/31 职场文书
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android