文档章节

php对redis的zset(有序集合)操作

mrmusic
 mrmusic
发布于 2016/03/03 14:39
字数 978
阅读 71
收藏 0
<?php
require('redistest.php');

class zsetcache extends cache{

   /**
    *向名称为keyzset中添加元素memberscore用亍排序。如果该元素已经存在,则根据score更新该元素的顺序。
    *ZADD命令的返回值是新加入到集合中的元素个数
    *
    * @param $key string 集合名称
    * @param $score int 分数
    * @param $member string
    * @return int 返回插入的个数
    */
   public function zAdd($key,$score,$member){

       return $this->redis->zAdd($key,$score,$member);
   }

   /**
    * 返回名称为keyzset(元素已按score从小到大排序)中的indexstartend的所有元素
    * ZRANGE命令会按照元素分数从小到大的顺序返回索引从startstop之间的所有元素(包
    * 含两端的元素)。ZRANGE命令与LRANGE命令十分相似,如索引都是从0开始,负数代表从后
    * 向前查找(-1表示最后一个元素)
    *
    * @param $key string 集合名称
    * @param $start int 开始
    * @param $end   int  结束
    * @param bool $withscores 是否查找分数
    * @return array 返回集合的的数组
    */
   public function zRange($key,$start,$end,$withscores=False){
       if($withscores){
           return $this->redis->zRange($key,$start,$end,true);
       }else{
           return $this->redis->zRange($key,$start,$end);
       }
   }

   /**
    * 删除名称为keyzset中的元素member,返回删除的个数
    *作用同zDelete
    *
    * @param $key string 集合
    * @param $member string 元素
    * @return int 删除的个数
    */
   public function zRem($key,$member){

       return $this->redis->zRem($key,$member);
   }

   /**
    * zRange功能一样,只是zRevRange返回的元素是按score从大到小排序的
    *
    * @param $key string 集合名称
    * @param $start int 开始
    * @param $end  int  结束
    * @param bool $withscores 是否查找分数
    * @return array 返回集合的的数组
    */
   public function zRevRange($key,$start,$end,$withscores=False){

       if($withscores){
           return $this->redis->zRevRange($key,$start,$end,true);
       }else{
           return $this->redis->zRevRange($key,$start,$end);
       }
   }

   /**
    * @param $key string 集合名称
    * @param $start int 开始
    * @param $end  int  结束
    * @param $limit
    * @param bool|False $withscores 是否查找分数
    * @return mixed
    */
   public function zRangeByScore($key,$start,$end,$limit,$withscores=False){
       if($withscores){
           return $this->redis->zRangeByScore($key,$start,$end,array('$withscores'=>TRUE,'limit'=>$limit));
       }else{
           return $this->redis->zRangeByScore($key,$start,$end,array('limit'=>$limit));
       }
   }

   /**
    * 返回名称为keyzsetscore >= starscore <= end的所有元素的个数
    *
    * @param $key string 集合名称
    * @param $start int 开始
    * @param $end  int 结束
    * @return int
    */
   public function zCount($key,$start,$end){

       return $this->redis->zCount($key,$start,$end);
   }

   /**
    *删除名称为keyzsetscore >= starscore <= end的所有元素,返回删除个数
    *
    * @param $key string 集合名称
    * @param $start int 开始
    * @param $end  int 结束
    * @return int
    */
   public function zRemRangeByScore($key,$start,$end){

       return $this->redis->zRemRangeByScore($key,$start,$end);
   }

   /**
    * 返回名称为keyzset的所有元素的个数
    * 作用同zCard
    * @param $key 集合名称
    * @return Int 返回个数
    */
   public function zSize($key){

       return $this->redis->zSize($key);
   }

   /**
    * 返回集合key中元素member的分数
    *
    * @param $key string 集合
    * @param $member string 元素
    * @return float|bool 分数(如果不存在就返回false)
    */
   public function zScore($key,$member){

       return $this->redis->zScore($key,$member);
   }

   /**
    *返回名称为keyzset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“0”
    * 就是返回比元素$member分数小的元素的个数
    *
    * @param $key string 集合
    * @param $member string 元素
    * @return int
    */
   public function zRank($key,$member){

       return $this->redis->zRank($key,$member);
   }

   /**
    * 就是返回比元素$member分数大的元素的个数
    * @param $key string 集合
    * @param $member string 元素
    * @return int
    */
   public function zRevRank($key,$member){

       return $this->redis->zRevRank($key,$member);
   }

   /**
    * 如果在名称为keyzset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
    *
    * @param $key 集合
    * @param $increment 分数
    * @param $member 元素
    * @return int 增加的分数
    */
   public function zIncrBy($key,$increment,$member){

       return $this->redis->zIncrBy($key,$increment,$member);
   }

   /**
    * 求有序集合的并集
    *
    * @param $output要保存的集合
    * @param $zsetkey 求并集的集合
    * @return int 集合的数目
    */
   public function zUnion($output,$zsetkey){

           return $this->redis->zUnion($output,$zsetkey);

   }

   /**
    * 求有序集合的交集
    *
    * @param $output要保存的集合
    * @param $zsetkey 求并集的集合
    * @return int 集合的数目
    */
   public function zInter($output,$zsetkey){

       return $this->redis->zInter($output,$zsetkey);

   }
   
}


© 著作权归作者所有

mrmusic
粉丝 11
博文 34
码字总数 23901
作品 0
数据库管理员
私信 提问
ThinkPHP扩展,实现Redis的CURD操作。

接下为将以ThinkPHP作为MVC开发框架,详细介绍Redis的CURD操作。需要说明的是,在ThinkPHP中本身并不支持Redis开发环境,只支持使用Redis开发简单的数据缓存功能。所以我们必须要通过扩展功能...

VHUOI
2016/11/22
713
3
【Redis源码剖析】 - Redis数据类型之有序集合zset

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51231967 Redis源码剖析系列文章汇总:传送门 这周事情比较多,原本计划每周写两篇文章的任务看来是完不成了。今天为...

xiejingfa
2016/04/24
0
0
Redis数据类型详解(五种)

Redis支持五种数据类型,即string(字符串)、hash(哈希)、list(列表)、set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数据类型汇总表 类型 简介 ...

云吞铺子
03/20
0
0
Redis中有序集合与列表占用内存分析

在说正题之前需要先了解几种定义:字典、压缩列表与跳跃表。 字典:非常常见的数据结构,key-value结构。 常见的实现有红黑树(stl中的map),哈希表(stl中的unordered_map)。红黑树的查找...

苗永超
2015/02/12
0
5
Redisbook学习笔记(3)数据类型之有序集合

REDIS_ZSET (有序集) 是ZADD 、ZCOUNT 等命令的操作对象, 它使用 REDISENCODINGZIPLIST 和REDISENCODINGSKIPLIST 两种方式编码: 编码的选择 在通过ZADD 命令添加第一个元素到空key 时,程...

shayang88
2014/03/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark Streaming的优化之路——从Receiver到Direct模式

          作者:个推数据研发工程师 学长 1 业务背景 随着大数据的快速发展,业务场景越来越复杂,离线式的批处理框架MapReduce已经不能满足业务,大量的场景需要实时的数据处理结果来...

个推
今天
3
0
壮丽70年·奋斗新时代|蒸妙集团熏蒸中会阴熏蒸的神奇好处

聚结相合之处为会。会阴居两阴间,为督、任、冲三脉的起点,三脉背出两阴之间,会聚阴部,因名会阴。会阴,经穴名。出《针灸甲乙经》。会阴别名屏翳、下极、金门。属任脉。在会阴部,男性当阴...

公益传承
今天
2
0
pentaho-kettle-8.2.0.0-R源码开发环境搭建

1.从Kettle官网下载源码,本文使用的是pentaho-kettle-8.2.0.0-R 下载地址:https://codeload.github.com/pentaho/pentaho-kettle/zip/8.2.0.0-R 2.打开eclipse,选择一个新的工作空间,然后设...

gq_2010
今天
1
0
lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
今天
5
0
通过四道常问面试题,带你了解什么是数据库分库分表

编者语:为了避免被误解为:「手里有把锤子,看什么都是钉子!」,说明一下不是什么业务都适合分布式数据库,更不是用了分布式数据库性能就一定能得到扩展。 其次:本文为纯干货,建议先转发...

老道士
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部