文档章节

php对redis的set(集合)操作

mrmusic
 mrmusic
发布于 2016/03/01 17:30
字数 862
阅读 110
收藏 0
<?php
require('redistest.php');

/**
* Class setcache
* 集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合
类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是
0(1)
*/
class setcache extends cache{

   /**
    * 向名称为keyset中添加元素value,如果value存在,丌写入,return false
    *
    * @param $key string 键名
    * @param $value   键值
    * @return bool true|false
    */
   public function sAdd($key,$value){

       return $this->redis->sAdd($key,$value);
   }

   /**
    *删除名称为keyset中的元素value
    *
    * @param $key string 键名
    * @param $value 键值
    * @return bool true|false
    */
   public function sRem($key,$value){

       return $this->redis->sRem($key,$value);
   }

   /**
    * value元素从名称为key1的集合移到名称为key2的集合
    *
    * @param $key1 string 集合名
    * @param $key2 string 集合名
    * @param $value
    * @return bool true|false
    */
   public function sMove($key1,$key2,$value){

       return $this->redis->sMove($key1,$key2,$value);
   }

   /**
    * 判断一个元素是否在集合中是一个时间复杂度为0(1)的操作,无论集合中有多少个元
    * 素,SISMEMBER命令始终可以极快地返回结果。
    *
    * @param $key string 集合名
    * @param $value
    * @return bool true|false
    */
   public function sIsMember($key,$value){

       return $this->redis->sIsMember($key,$value);
   }//sContains作用同sIsMember一样

   /**
    * 返回名称为keyset的元素个数 同sSize
    *
    * @param $key string
    * @return int 返回集合中的数值
    */
   public function sCard($key){

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

   /**
    * 随机返回并删除名称为keyset中一个元素
    *
    * @param $key string
    * @return string|bool 返回set中的元素,如果set为空就返回false
    */
   public function sPop($key){

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

   /**
    * 随机返回名称为keyset中一个元素,不删除
    *
    * @param $key string
    * @return mixed
    */
   public function sRandMember($key){

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

   /**
    * 求两个集合的交集
    * @param $key1 string 集合1
    * @param $key2 string 集合2
    * @return array
    */
   public function sInter($key1,$key2){

       return $this->redis->sInter($key1,$key2);
}

   /**
    * 将给定多个集合key之间的交集存储在指定的集合output中。如果指定的集合已经存在,则将其覆盖
    *下面只是两个
    * @param $output string 集合
    * @param $key1 string 集合
    * @param $key2 string 集合
    * @return int 交集的个数
    */
   public function sInterStore($output,$key1,$key2){

       return $this->redis->sInterStore($output,$key1,$key2);
   }

   /**
    * 求多个集合的交集
    * @param $keyarray array
    * @return array
    */
   public function  sInterArray($keyarray){

       $keystr='';
           foreach($keyarray as $k){
               $keystr.='\''. $k.'\',';
           }
       $keystr=substr($keystr,0,-1);
       $str='$result=$this->redis->sInter('.$keystr.');';
     eval($str);
       return $result;
   }

   /**
    * 求多个集合的并集(三个集合)
    *
    * @param $key1 string 集合1
    * @param $key2 string 集合2
    * @param $key3 string 集合3
    * @return array
    */
   public function sUnion($key1,$key2,$key3){

       return $this->redis->sUnion($key1,$key2,$key3);
   }

   /**
    * 求并集并将并集保存到output的集合
    * @param $output 要存储的集合
    * @param $key1 string 集合1
    * @param $key2 string 集合2
    * @param $key3 string 集合3
    * @return int 并集的数目
    */
   public function sUnionStore($output,$key1,$key2,$key3){

       return $this->redis->sUnionStore($output,$key1,$key2,$key3);
   }

   /**
    * 求差集  (集合减去两个集合的交集)
    *
    *  key1-key2
    *  {1, 2, 3}-{2, 3, 4}={1}
    *  {2, 3, 4}-{1, 2, 3}={4}
    * @param $key1 string
    * @param $key2 string
    * @return array
    * SDIFF setA setB setC 计算顺序是先计算setA-setB,再计算结果与setC的差集
    */
   public function sDiff($key1,$key2){

       return $this->redis->sDiff($key1,$key2);
   }

   /**
    * 返回集合中被的所有元素
    * sGetMembers
    * @param $key string 集合
    * @return array
    */
   public function sMembers($key){

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

   /**
    * 排序分页(直接拿来用)
    * sort
    * $redis->delete('s');
    * $redis->sadd('s', 5); $redis->sadd('s', 4); $redis->sadd('s', 2); $redis->sadd('s', 1); $redis->sadd('s', 3); var_dump($redis->sort('s')); // 1,2,3,4,5
    * var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
    * var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5
    */
}


© 著作权归作者所有

mrmusic
粉丝 11
博文 34
码字总数 23901
作品 0
数据库管理员
私信 提问
安装redis和phpredis模块

安装redis shell> wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz shell> tar zxvf redis-2.0.4.tar.gz shell> mv redis-2.0.4 redis shell> cd redis shell> make shell> redi......

老牛
2011/03/14
0
0
Nodejs系列文章之:Redis的基本操作

作者: RobanLee (Code maker, PHP,JS,NODEJS,PYTHON, blog:http://www.robanlee.com) Redis介绍(以下内容来自百度百科): redis是一个key-value存储系统。和Memcached类似,它支持存储的value...

_dedecms
2014/05/07
0
3
linux下php5.4安装redis扩展

一、redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/po...

304076020
2015/01/14
0
0
Redis的数据结构及应用场景

一. 谈谈对redis的理解,它的应用场景。 Redis是一个key-value存储系统,它支持存储的value类型包括string字符串、list链表、set集合、sorted Set有序集合和hash哈希等数据类型。这些数据类型...

Java干货分享
2018/12/21
0
0
windows安装redis

1、redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型...

沉淀岁月
2016/09/08
7
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部