参考手册   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. MySql 5.7.26(MySQL8)安装教程

    近期更换服务器,在此再记录一遍mysql 安装教程 1.下载 https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-commu ...

  2. AcWing 241. 楼兰图腾 (树状数组)打卡

    题目:https://www.acwing.com/problem/content/description/243/ 题意:给你n个点,问你 V 和  ^的图腾有多少个 思路:比如V 其实就是找当前点 ...

  3. BZOJ5484: [Usaco2018 Dec]Sort It Out

    5484: [Usaco2018 Dec]Sort It Out https://www.lydsy.com/JudgeOnline/problem.php?id=5484 Sol. 考虑没有在被喊叫 ...

  4. Python基础一(格式化输出、流程控制)

    (1)格式化输出(%% 第一个% 转译) # 格式化 输入 输出 name = input("Name:") age = input("Age:") job = ...

  5. win10在bios上还原系统

    遇到两次,win10系统,自动更新后,c盘好像被格式化了,桌面啥都没了,那个气啊.记录下怎么恢复的. 参考https://www.kafan.cn/edu/50206642.html,中的方法1. 通 ...

  6. python字符串比较大小

    zfill函数 xs = ['] print (sorted(xs))

  7. 10 面向对象(package关键字的概述及作用)

    10.01_面向对象(package关键字的概述及作用) A:为什么要有包 *开发时有很多类,如果放在一个文件夹中不方便管理,而且容易重复 将字节码(.class)进行分类存放 包其实就是文件夹 B: ...

  8. 2019牛客多校第⑨场J Symmetrical Painting(思维,离散化)

    原题:https://ac.nowcoder.com/acm/contest/889/J 题意: 二维平面上有n个矩形,每个矩形左下角是(i−1,Li)(i−1,Li), 右上角是(i,Ri)(i,R ...

  9. Vue环境搭建及第一个helloWorld

    Vue环境搭建及第一个helloWorld 一.环境搭建 1.node.js环境安装配置  https://www.cnblogs.com/liuqiyun/p/8133904.html 或者 htt ...

  10. dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作

    dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...