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

首頁 > 開發 > PHP > 正文

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

2024-05-04 23:37:28
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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的值的列表

示例:

復制代碼代碼如下:

<?php  
    $redis = new redis();  
    $redis->connect('192.168.1.108', 6379);  
    $redis->flushall();   
       
    $array=array('tank'=>'1',  
              'zhang'=>'2',  
              'ying'=>'3',  
              'test'=>'4');  
    $redis->mset($array);  
    print_r($redis->keys('*s*'));        // 結果:Array ( [0] => test )  
    print_r($redis->keys('y???'));       // 結果:Array ( [0] => ying )  
    print_r($redis->keys('t[e]*'));  // 結果:Array ( [0] => test )  
    print_r($redis->keys('*'));      // 結果:Array ( [0] => ying [1] => test [2] => zhang [3] => tank )   
       
    print_r($redis->mget(array("tank","ying")));     // 結果:Array ( [0] => 1 [1] => 3 )  
?>

 

4) sort

描述:按條件取得數據
參數:

復制代碼代碼如下:

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

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

 

一般排序

復制代碼代碼如下:

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

 

字母排序

 

復制代碼代碼如下:

<?php  
    $redis = new redis();  
    $redis->connect('192.168.1.108', 6379);  
    $redis->flushall();  
    $redis->lpush('test', 'a');  
    $redis->lpush('test', 'd');  
    $redis->lpush('test', 'b');  
       
    print_r($redis->sort('test')); //結果:Array ( [0] => b [1] => d [2] => a )  
    print_r($redis->sort('test',array('ALPHA'=>TRUE))); //結果:Array ( [0] => a [1] => b [2] => d )  
?>
 

 

排序取部分數據

 

復制代碼代碼如下:

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

 

使用外部key進行排序

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

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

 

復制代碼代碼如下:

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

 

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

 

復制代碼代碼如下:

<?php  
    $redis = new redis();  
    $redis->connect('192.168.1.108', 6379);  
    $redis->flushall();   
       
    $redis->lpush('id', 1);  
    $redis->set('name_1', 'tank');  
    $redis->set('score_1',89);  
       
    $redis->lpush('id', 2);  
    $redis->set('name_2', 'zhang');  
    $redis->set('score_2', 40);  
       
    $redis->lpush('id', 4);  
    $redis->set('name_4','ying');  
    $redis->set('score_4', 70);  
       
    $redis->lpush('id', 3);  
    $redis->set('name_3', 'fXXK');  
    $redis->set('score_3', 90);  
       
    /** 
     * 按score從大到小排序,取得id 
     */ 
    $sort=array('BY'=>'score_*',  
                'SORT'=>'DESC' 
                );  
    print_r($redis->sort('id',$sort)); //結果:Array ( [0] => 3 [1] => 1 [2] => 4 [3] => 2 )   
       
    /** 
     * 按score從大到小排序,取得name 
     */ 
    $sort=array('BY'=>'score_*',  
                'SORT'=>'DESC',  
                'GET'=>'name_*' 
                );  
    print_r($redis->sort('id',$sort)); //結果:Array ( [0] => fXXK [1] => tank [2] => ying [3] => zhang )   
       
    /** 
     * 按score從小到大排序,取得name,score 
     */ 
    $sort=array('BY'=>'score_*',  
                'SORT'=>'DESC',  
                'GET'=>array('name_*','score_*')  
                );  
    print_r($redis->sort('id',$sort));  
    /** 
     *結果:Array 
            ( 
                [0] => fXXK 
                [1] => 90 
                [2] => tank 
                [3] => 89 
                [4] => ying 
                [5] => 70 
                [6] => zhang 
                [7] => 40 
            )) 
     */ 
       
    /** 
     * 按score從小到大排序,取得id,name,score 
     */ 
    $sort=array('BY'=>'score_*',  
                'SORT'=>'DESC',  
                'GET'=>array('#','name_*','score_*')  
                );  
    print_r($redis->sort('id',$sort));  
    /** 
     * 結果:Array 
            ( 
                [0] => 3 
                [1] => fXXK 
                [2] => 90 
                [3] => 1 
                [4] => tank 
                [5] => 89 
                [6] => 4 
                [7] => ying 
                [8] => 70 
                [9] => 2 
                [10] => zhang 
                [11] => 40 
            ) 
     */ 
?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 厦门市| 武威市| 台湾省| 津南区| 门头沟区| 叙永县| 德州市| 邻水| 长丰县| 波密县| 大城县| 铅山县| 海南省| 株洲县| 山东省| 穆棱市| 河东区| 林周县| 宁德市| 新竹县| 周至县| 宁国市| 门源| 罗源县| 荔浦县| 吐鲁番市| 南汇区| 神农架林区| 美姑县| 台北市| 仁化县| 增城市| 大洼县| 新乐市| 苍梧县| 武穴市| 潜江市| 宜宾县| 维西| 德昌县|