php對redis的set(集合)操做

<?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
    */
}
相關文章
相關標籤/搜索