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 字符转义 注意事项
May 27 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
Laravel框架源码解析之反射的使用详解
May 14 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php异常处理方法实例汇总
2015/06/24 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python aiohttp的使用详解
2019/06/20 Python
电脑教师的教学自我评价
2013/11/26 职场文书
保密承诺书范文
2014/03/27 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
联欢会开场白
2015/06/01 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL