参考手册   http://www.cnblogs.com/weafer/archive/2011/09/21/2184059.html

redis  几种数据类型选择,参考 :

  https://blog.csdn.net/xlgen157387/article/details/60958657

  https://www.cnblogs.com/George1994/p/7191011.html

PHP + redis 类库: https://www.cnblogs.com/whoamme/p/5379469.html

实际代码中应用:

参考 : http://www.runoob.com/redis/redis-data-types.html

整理如下:

数组 排序  array_multisort(array_column($list,'order_no'),SORT_DESC,$list); // 根据数组中某个字段 倒序排序

$findkey = $this->redis->Keys('product:news:'.$pro_id); // zset    或者 string

$this->redis->delete($findkey);

可直接 使用 $this->redis->del('product:news:1');    即指定key 进行删除 $this->redis->del('index_info');

删除 所有detail :

$ret = $this->redis->Keys('news:detail:*');

$this->redis->delete($ret);

几种常用数据类型

1.String  字符串类型, key value 的数据类型   (推荐/置顶  的几条数据)

当查询返回的数据$data是数组时,(单个值时,不需要json_encode … 处理)


注意:两数组合并时,避免null 影响合并,需转换数据类型。

$data=array_merge((array)$pushdata,(array)$data);   
[rɪˈkɜ:sɪv]   递归的

array_merge_recursive() 与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。

二维数组 选择某个字段 作为key  键名: 出处 https://blog.csdn.net/m0_38030271/article/details/80660271
$newArr= array_column($array,NULL,'某个字段');


==========

==========

赋值:$this->redis->set(‘news:topdata‘,json_encode($data));

取值:json_decode($this->redis->get(‘news: topdata’),true);  数据转换成数组

2.Hash 哈希 类型,一个string 类型的field ,value 的映射表,适合 存储对象(详情页detail时  利用该类型)

注意 :获取多条数据时,hMget;    单条数据时,hGet,例如 上下篇:

Json_decode($this->redis->hGet(‘news:list’,$preno),true); // 上下篇

==========

==========

删除: $this->redis->del(‘news:list’);// 删除 全部

移除某一条:$this->redis->hDel(‘news:list’, $id);  // 注意 hDel 需要传递两个参数

赋值:

  多条数据:$this->redis->hMset(‘news:list’,$data);// $data 即查询返回的二维数组

  单条数据:$this->redis->hSet(‘news:list’, $id , json_encode($data) );

判断news:list是否有数据 可使用:$this->redis->hLen(‘news:list’);

取值:$this->redis->hMget(‘news:list’,$ids);// 返回json 格式

$news = jsonToArray($news);// 转换成 数组

function jsonToArray($array)

{

  return array_map('arrayMapHandler',$array);

}

function arrayMapHandler($v){
  $res = json_decode($v,true);
  if($res || $v == '[]'){
    return $res; 
  }else{
    return $v;
  }
}

详情 detail

==========

==========

赋值:$this->redis->hMset(‘news:detail:’.$id,$detail);// …->field(‘…’)->find();

取值:$this->redis->hMget(‘news:detail:’.$id,[‘id’,’title’,’content’]);  //

  获取 某个字段的值

  $data= $this->redis->hMGet('solution:detail:213',['status']);  echo $data['status'];

  $stu = $this->redis->hGet('solution:detail:213','status');  echo $stu;

判断detail 是否存在: If(!$this->redis->exists(‘news:detail:’.$id)){// 不存在,此时需要记入redis}

3.ZSET(sorted set :有序集合) 类型,和set 一样也是string类型元素的集合不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。成员是唯一的,但分数 score 却可以重复

==========

==========

删除:$this->redis->del(‘news:id’);// 多条

移除某一条:$this->redis ->zRem(‘news:id’, $id);

赋值:

  多条数据:

    $ids = $model->…->getField(‘order_no,id’);// 返回以 order_no 为key 的数组

    $this->redis->zAddArray (‘news:id’, $ids);

  $arr = $model->...->field('id,name,sex,sort,....')->order('sort desc')->select();

  $data = [];

  foreach($arr as $key =>$val){

    $arr[$val['sort']] = $val; // 返回 以sort 为主键的数组

  }

$this->redis->zAddArray("product:", $data );

 单条数据:$this->redis->zAdd(‘news:id’, $cur_orderno, $cur_id);

获取个数 或者 判断news:id 是否存在,可使用:$sum = $this->redis->zCard(‘news:id’);// zCard  返回有序集合的成员数

取值: 取新闻为例,分页读取新闻列表数据时

$page = I(‘get.page’,1,’intval’);

$row =10;

$start = ($page-1)*$row;

$end = $start +($row-1);

$ids = $this->redis->zRevRange(‘news:id’, $start , $end);// 返回 有序集中指定区间内成员,通过索引,分数从高到低

【$ids = $this->redis->zRevRange('news:id',0,-1)】 即返回全部

$news = $this->redis->hMget(‘news:list‘,   $ids);

$news =jsonToArray($news);

上下篇处理

zRevRangeByScore :从高到低的分数排序 ,读取范围内的数据    http://blog.csdn.net/chwshuang/article/details/52834380

zRangeByScore : 读取范围内的数据

参数: 有序集合键名称,  max ,min, [WITHSCORES] [LIMIT offset count]

+inf和-inf分别表示Sorted-Sets中分数的最大值和最小值

$order_no = $this->redis->zScore('news:id',$id); // 返回名称为key的zset中元素 $id 的score

$nextno = $this->redis->zRevRangeByScore('news:id', $order_no, '-inf', ['limit'=>[1,1]] ); // 下一篇

$preno = $this->redis->zRangeByScore('news:id', $order_no, '+inf', ['limit'=>[1,1]] ); // 上一篇

zset   并集zUnion,交集 zInter

thinkphp 使用redis 整理(二) mark 一下的更多相关文章

  1. redis(二)高级用法

    redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...

  2. ThinkPHP 关联模型(二十)

    原文:ThinkPHP 关联模型(二十) ThinkPHP关联模型 两表关联查询:Message 和  user  关联条件uid(参考手册:模型->关联模型) 步骤: 一:创建Message表 ...

  3. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  4. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  5. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  6. redis(二)redis的主从模式和集群模式

    redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...

  7. 【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  8. Redis系列(二)-Hredis客户端设计及开源

    接上篇c#实现redis客户端(一),重新整理些了下. 阅读目录: 项目说明 Hredis设计图 单元测试场景 总结 项目说明 背景:因为有地方要用,而又没找到对sentinel良好支持的Net客户端 ...

  9. 【网页加速】lua redis的二次升级

    之前发过openresty的相关文章,也是用于加速网页速度的,但是上次没有优化好代码,这次整理了下,优化了nginx的配置和lua的代码,感兴趣的话可以看看上篇的文章: https://www.cnb ...

随机推荐

  1. GO 学习资源收集

     golang图书,在线阅读Go轻松学https://www.golang123.com/book/16 Go示例学https://www.golang123.com/book/17 Go Web 编 ...

  2. 【Shiro】五、Apache Shiro加密

    Shiro提供了更好封装,更好使用的加密算法API,可以作为平时使用的一个工具类的预选方案. Shiro的密码学 基本特性 接口驱动,基于POJO 对JCE(Java Cryptography Ext ...

  3. java.lang.ArrayIndexOutOfBoundsException 异常分析及解决

    参考:http://blog.csdn.net/javaeeteacher/article/details/4485834 这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么 ...

  4. 监听器、拦截器完成对session、cookie的会话控制

    package com.trsmedia.interceptor; import java.util.Date; import java.util.Timer; import java.util.Ti ...

  5. flask-sqlalchemy报错 Object '<User at xxxx>' is already attached to session '1' (this is '2')

    报错:  Object '<User at xxxx>' is already attached to session '1' (this is '2') 结论:      两个不同的db ...

  6. CCflow与基础框架组织机构整合

    SELECT No,Name,Pass,FK_Dept,SID FROM Port_Emp SELECT No,Name,ParentNo FROM Port_Dept SELECT No,Name, ...

  7. 一,Jetty启动

    一,Jetty安装 从官网download.eclipse.org/jetty/ 下载需要的版本,在指定目录解压即可,下面用$JETTY_HOME表示Jetty的解压目录,也就是安装目录.我用的版本是 ...

  8. 关于java使用json不能够使用报没有导包的问题,以及前后台交互json数据的使用

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/12/02/%e5%85%b3%e4%ba%8ejava%e4%bd%bf%e7%94%a8 ...

  9. Android组件内核之Fragment管理与内核(二)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从以下三个内容来介绍Fragment管理与内核: [Fragm ...

  10. iView的表单table

    // html<div class="exam-list"> <Table :columns="columns7" :data="d ...