加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

thinkphp 使用redis 整理(二) mark 一下

发布时间:2020-12-13 17:33:11 所属栏目:PHP教程 来源:网络整理
导读:参考手册?? ?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 类库

参考手册???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‘,-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‘,‘+inf‘,1]] ); // 上一篇

zset? ?并集zUnion,交集?zInter??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读