国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php-redis中的sort排序函數總結

2024-09-04 11:42:36
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php-redis中的sort排序函數總結,本文講解了了按字母排序、排序取部分數據、使用外部key進行排序等排序方法,同時給出代碼實例,需要的朋友可以參考下

很多人把redis當成一種數據庫,其實是利用redis來構造數據庫的模型,有那種數據庫的味道。但是在怎么構建還是key和value的關系,與真正的關系型數據庫還是不一樣的。

效率高,不方便;方便的,效率不高;又方便,效率又高的要花錢。

php-redis里面的sort函數,在做web的時候取數據還是比較方便,有點關系型數據庫的味道。在說sort前,先說一下前面漏的幾個比較常用的函數。

1) keys

描述:查找符合給定模式的key

參數:匹配模式

返回值:符合給定模式的key列表

2) mset

描述:同時設置一個或多個key-value對。當發現同名的key存在時,MSET會用新值覆蓋舊值,如果你不希望覆蓋同名key,請使用MSETNX命令。MSET是一個原子性(atomic)操作,所有給定key都在同一時間內被設置,某些給定key被更新而另一些給定key沒有改變的情況,不可能發生。

參數:數組

返回值:總是返回OK(因為MSET不可能失敗)

3) mget

描述:返回所有(一個或多個)給定key的值。如果某個指定key不存在,那么返回特殊值nil。因此,該命令永不失敗。

參數:key的數組

返回值:一個包含所有給定key的值的列表

示例:

  1. <?php  
  2.     $redis = new redis();  
  3.     $redis->connect('192.168.1.108', 6379);  
  4.     $redis->flushall();   
  5.        
  6.     $array=array('tank'=>'1',  
  7.               'zhang'=>'2',  
  8.               'ying'=>'3',  
  9.               'test'=>'4');  
  10.     $redis->mset($array);  
  11.     print_r($redis->keys('*s*'));        // 結果:Array ( [0] => test )  
  12.     print_r($redis->keys('y???'));       // 結果:Array ( [0] => ying )  
  13.     print_r($redis->keys('t[e]*'));  // 結果:Array ( [0] => test )  
  14.     print_r($redis->keys('*'));      // 結果:Array ( [0] => ying [1] => test [2] => zhang [3] => tank )   
  15.        
  16.     print_r($redis->mget(array("tank","ying")));     // 結果:Array ( [0] => 1 [1] => 3 )  
  17. ?> 

4) sort

描述:按條件取得數據

參數:

  1. array
  2.     'by' => 'pattern'//匹配模式 
  3.     'limit' => array(0, 1), 
  4.     'get' => 'pattern' 
  5.     'sort' => 'asc' or 'desc'
  6.     'alpha' => TRUE, 
  7.     'store' => 'external-key' 

返回或保存給定列表、集合、有序集合key中經過排序的元素。

一般排序,代碼如下:

  1. <?php  
  2.     $redis = new redis();  
  3.     $redis->connect('192.168.1.108', 6379);  
  4.     $redis->flushall();  
  5.     $redis->lpush('test', 1);  
  6.     $redis->lpush('test', 10);  
  7.     $redis->lpush('test', 8);  
  8.        
  9.     print_r($redis->sort('test')); //結果:Array ( [0] => 1 [1] => 8 [2] => 10 )  
  10. ?> 

字母排序,代碼如下:

  1. <?php  
  2.     $redis = new redis();  
  3.     $redis->connect('192.168.1.108', 6379);  
  4.     $redis->flushall();  
  5.     $redis->lpush('test''a');  
  6.     $redis->lpush('test''d');  
  7.     $redis->lpush('test''b');  
  8.        
  9.     print_r($redis->sort('test')); //結果:Array ( [0] => b [1] => d [2] => a )  
  10.     print_r($redis->sort('test',array('ALPHA'=>TRUE))); //結果:Array ( [0] => a [1] => b [2] => d )  
  11. ?> 

排序取部分數據,代碼如下:

  1. <?php  
  2.     $redis = new redis();  
  3.     $redis->connect('192.168.1.108', 6379);  
  4.     $redis->flushall();  
  5.     $redis->lpush('test', 31);  
  6.     $redis->lpush('test', 5);  
  7.     $redis->lpush('test', 2);  
  8.     $redis->lpush('test', 23);    
  9.        
  10.     $array = array('LIMIT'=>array(0,3),"SORT"=>'DESC');  
  11.     print_r($redis->sort('test',$array));  //結果:Array ( [0] => 31 [1] => 23 [2] => 5 )  
  12. ?> 

使用外部key進行排序

有時候你會希望使用外部的key作為權重來比較元素,代替默認的對比方法。

假設現在有用戶(user)表數據如下:

  1. id     name    score  
  2. -------------------------------  
  3. 1     tank      89  
  4. 2     zhang     40  
  5. 4       ying      70  
  6. 3      fXXK       90 

id數據保存在key名為id的列表中。

name數據保存在key名為name_{id}的列表中

score數據保存在score_{id}的key中。

代碼如下:

  1. <?php  
  2.     $redis = new redis();  
  3.     $redis->connect('192.168.1.108', 6379);  
  4.     $redis->flushall();   
  5.        
  6.     $redis->lpush('id', 1);  
  7.     $redis->set('name_1''tank');  
  8.     $redis->set('score_1',89);  
  9.        
  10.     $redis->lpush('id', 2);  
  11.     $redis->set('name_2''zhang');  
  12.     $redis->set('score_2', 40);  
  13.        
  14.     $redis->lpush('id', 4);  
  15.     $redis->set('name_4','ying');  
  16.     $redis->set('score_4', 70);  
  17.        
  18.     $redis->lpush('id', 3);  
  19.     $redis->set('name_3''fXXK');  
  20.     $redis->set('score_3', 90);  
  21.        
  22.     /** 
  23.      * 按score從大到小排序,取得id 
  24.      */ 
  25.     $sort=array('BY'=>'score_*',  
  26.                 'SORT'=>'DESC' 
  27.                 );  
  28.     print_r($redis->sort('id',$sort)); //結果:Array ( [0] => 3 [1] => 1 [2] => 4 [3] => 2 )   
  29.        
  30.     /** 
  31.      * 按score從大到小排序,取得name 
  32.      */ 
  33.     $sort=array('BY'=>'score_*',  
  34.                 'SORT'=>'DESC',  
  35.                 'GET'=>'name_*' 
  36.                 );  
  37.     print_r($redis->sort('id',$sort)); //結果:Array ( [0] => fXXK [1] => tank [2] => ying [3] => zhang )    
  38.        
  39.     /** 
  40.      * 按score從小到大排序,取得name,score 
  41.      */ 
  42.     $sort=array('BY'=>'score_*',  
  43.                 'SORT'=>'DESC',  
  44.                 'GET'=>array('name_*','score_*')  
  45.                 );  
  46.     print_r($redis->sort('id',$sort));  
  47.     /** 
  48.      *結果:Array 
  49.             ( 
  50.                 [0] => fXXK 
  51.                 [1] => 90 
  52.                 [2] => tank 
  53.                 [3] => 89 
  54.                 [4] => ying 
  55.                 [5] => 70 
  56.                 [6] => zhang 
  57.                 [7] => 40 
  58.             )) 
  59.      */ 
  60.        
  61.     /** 
  62.      * 按score從小到大排序,取得id,name,score 
  63.      */ 
  64.     $sort=array('BY'=>'score_*',  
  65.                 'SORT'=>'DESC',  
  66.                 'GET'=>array('#','name_*','score_*')  
  67.                 );  
  68.     print_r($redis->sort('id',$sort));  
  69.     /** 
  70.      * 結果:Array 
  71.             ( 
  72.                 [0] => 3 
  73.                 [1] => fXXK 
  74.                 [2] => 90 
  75.                 [3] => 1 
  76.                 [4] => tank 
  77.                 [5] => 89 
  78.                 [6] => 4 
  79.                 [7] => ying 
  80.                 [8] => 70 
  81.                 [9] => 2 
  82.                 [10] => zhang 
  83.                 [11] => 40 
  84.             ) 
  85.      */ 
  86. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 互助| 榆中县| 连南| 崇礼县| 宜州市| 县级市| 诸暨市| 乐东| 河曲县| 泸溪县| 新宁县| 勃利县| 防城港市| 旬阳县| 汉沽区| 永仁县| 息烽县| 凤山县| 牙克石市| 齐河县| 嵊州市| 年辖:市辖区| 黎平县| 钟祥市| 井陉县| 克东县| 格尔木市| 江安县| 交口县| 利辛县| 皮山县| 九江市| 黑河市| 沧源| 昌平区| 新平| 佛冈县| 北流市| 资阳市| 朝阳区| 阿拉善左旗|