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


Posted in PHP onJuly 08, 2015

很多人把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 

            ) 

     */ 

?>
PHP 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
PHP通过串口实现发送短信
Jul 08 #PHP
PHP使用CURL模拟登录的方法
Jul 08 #PHP
一个PHP实现的轻量级简单爬虫
Jul 08 #PHP
PHP设置进度条的方法
Jul 08 #PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 #PHP
php类的定义与继承用法实例
Jul 07 #PHP
php抽象类用法实例分析
Jul 07 #PHP
You might like
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
浅谈vue的踩坑路
2017/08/31 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
python 控制语句
2011/11/03 Python
python爬取个性签名的方法
2018/06/17 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
python django model联合主键的例子
2019/08/06 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python画图常规设置方式
2020/03/05 Python
python中adb有什么功能
2020/06/07 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
2014大学生全国两会学习心得体会
2014/03/13 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
工程款申请报告
2015/05/15 职场文书
教师听课学习心得体会
2016/01/15 职场文书
导游词之山海关
2019/12/10 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
python3实现无权最短路径的方法
2021/05/12 Python
Win10系统下配置Java环境变量
2021/06/13 Java/Android
Android Rxjava3 使用场景详解
2022/04/07 Java/Android