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 相关文章推荐
php5 and xml示例
Nov 22 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 PHP
解析isset与is_null的区别
Aug 09 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
php时间戳转换的示例
Mar 31 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
php实现记事本案例
Oct 20 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
php设计模式之委托模式
2016/02/13 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JQuery实现图片轮播效果
2015/09/15 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python and、or以及and-or语法总结
2015/04/14 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python 同时读取多个文件的例子
2019/07/16 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python中栈的原理及实现方法示例
2019/11/27 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
农救科工作职责
2013/11/27 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
社团招新策划书
2014/02/04 职场文书
农村改厕实施方案
2014/03/22 职场文书
遗产继承公证书
2014/04/09 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书