欢迎光临
我们一直在努力

php-redis中的sort排序函数总结

这篇文章主要介绍了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. ?>

赞(0) 本模板价: 打赏
未经允许不得转载:站长分享圈 » php-redis中的sort排序函数总结