thinkphp 使用redis 整理(二) mark 一下
参考手册 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 一下的更多相关文章
- redis(二)高级用法
redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...
- ThinkPHP 关联模型(二十)
原文:ThinkPHP 关联模型(二十) ThinkPHP关联模型 两表关联查询:Message 和 user 关联条件uid(参考手册:模型->关联模型) 步骤: 一:创建Message表 ...
- 单元测试系列之十:Sonar 常用代码规则整理(二)
摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- redis(二)redis的主从模式和集群模式
redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...
- 【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)
系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...
- Redis系列(二)-Hredis客户端设计及开源
接上篇c#实现redis客户端(一),重新整理些了下. 阅读目录: 项目说明 Hredis设计图 单元测试场景 总结 项目说明 背景:因为有地方要用,而又没找到对sentinel良好支持的Net客户端 ...
- 【网页加速】lua redis的二次升级
之前发过openresty的相关文章,也是用于加速网页速度的,但是上次没有优化好代码,这次整理了下,优化了nginx的配置和lua的代码,感兴趣的话可以看看上篇的文章: https://www.cnb ...
随机推荐
- layer icon对应图标
layer icon对应图标 信息框(msg.alert.open.confirm) icon:0 icon:1 icon:2 icon:3 icon:4 icon:5 icon:6 icon:16 ...
- CEF的备忘笔记
CEF: Chromium Embeded Framewrok; (Chromium嵌入式框架)可以在PC(Linux,MacOS,Windows)上把Chromium的内核嵌入到应用程序的框架: ...
- java.lang.ArrayIndexOutOfBoundsException 异常分析及解决
参考:http://blog.csdn.net/javaeeteacher/article/details/4485834 这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么 ...
- Redis入门很简单之二【常见操作命令】
Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...
- Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器
frozenset:不可变集合,无序,不重复 dict上的特性: 1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tup ...
- form表单submit事件
form表单submit事件同时会触发form表单中button按钮的click事件 <!DOCTYPE html> <html> <head> <meta ...
- mysql与navicat应用
下载安装配置 用法 1.连接本机数据库: 打开navicat选择连接---第一个mysql---在常规下自己明明连接名和密码----确定 我这边建立了本机测试库 2. 连接阿里云服务器上的mysql ...
- Spring Boot国际化支持
本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持,根据系统语言环境或者session中的语言来自动读取不同环境中的文字. 国际化自动配置 Spring Boot中已经 ...
- c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中
今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...
- aarch64 架构 交叉编译 tcpdump
1. 下载 tcpdump 源码 地址 :http://www.tcpdump.org/ (4.9.2) tcpdump 依赖 libpcap 源码 地址 : http://www.tcpdu ...