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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
php实现singleton()单例模式实例
Nov 06 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
php中filter_input函数用法分析
Nov 15 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
为你总结一些php信息函数
Oct 21 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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
phpwind中的数据库操作类
2007/01/02 PHP
php 操作符与控制结构
2012/03/07 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
python绘制中国大陆人口热力图
2018/11/07 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
Flask配置Cors跨域的实现
2019/07/12 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python创建临时文件和文件夹
2020/08/05 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
优秀团员个人事迹材料
2014/01/29 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫