参考手册   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. nodejs搭建服务器 和 操作数据库

    1.express框架:是一个简洁而灵活的 node.js Web应用框架.一般的项目都是基于这个框架开发的.http://www.runoob.com/nodejs/nodejs-express-f ...

  2. centos6编译安装php7

    https://www.cnblogs.com/wenwei-blog/p/6261637.html https://www.cnblogs.com/imzye/p/5109770.html cent ...

  3. windows下Mysql5.7表名不区分大小写问题

    前言 Windwos文件系统本身是不区分大小写的,但是Linux文件系统是支持大小写的.于是安装在Linux下的Mysql导出到windows下可能因为大小写问题导致错误,因此要开启window下My ...

  4. 59、salesforce实现数据的批量处理

    批处理,往自己的邮箱发一封邮件,批处理采用异步的处理方式处理数据,最多可以处理5000万条数据 global with sharing class MerchandiseBatch implement ...

  5. Jeecg_Jflow整合记录

    系统组织机构 t_s_deparselect * from t_s_departselect * from t_s_depart where id='402888fd6a8c24e9016a8c531 ...

  6. LeetCode N皇后 & N皇后 II

    题目链接:https://leetcode-cn.com/problems/n-queens/ 题目链接:https://leetcode-cn.com/problems/n-queens-ii/ 题 ...

  7. JVM(1):Java 类的加载机制

    原文出处: 纯洁的微笑 java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang. ...

  8. TP5截取部分字符串

    TP5截取超出的字符串,使用...显示 在公共文件common.php中 视图模板中调用

  9. 转 jmeter 等待时间 pacing think time

    第一部分:Request之间的等待时间的设置 先明确一些概念:1)定时器是在每个sampler(采样器)之前执行的,而不是之后:是的,你没有看错,不管这个定时器的位置放在sampler之后,还是之下, ...

  10. Centos 文件权限修改

    1.查看权限 # ls -l dirPath 2.修改权限,root权限执行(-R 子目录的权限都会改变) # chmod -R dirPath