php操作redis中的hash和zset类型数据的方法和代码例子


Posted in PHP onJuly 05, 2014

 前面一篇博客主要是string类型,list类型和set类型,下面hash类型和zset类型

1,hset

描述:将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行HSET操作。如果域field已经存在于哈希表中,旧值将被覆盖。
参数:key field value
返回值:如果field是哈希表中的一个新建域,并且值设置成功,返回1。如果哈希表中域field已经存在且旧值已被新值覆盖,返回0。

2,hsetnx

描述:将哈希表key中的域field的值设置为value,当且仅当域field不存在。若域field已经存在,该操作无效。如果key不存在,一个新哈希表被创建并执行HSETNX命令。
参数:key field value
返回值:设置成功,返回1。如果给定域已经存在且没有操作被执行,返回0。

3,hget

描述:返回哈希表key中给定域field的值。
参数:key field
返回值:给定域的值。当给定域不存在或是给定key不存在时,返回nil。

4,hmset

描述:同时将多个field - value(域-值)对设置到哈希表key中。此命令会覆盖哈希表中已存在的域。如果key不存在,一个空哈希表被创建并执行HMSET操作。
参数:key field value [field value ...]
返回值:如果命令执行成功,返回OK。当key不是哈希表(hash)类型时,返回一个错误。

5,hmget

描述:返回哈希表key中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个nil值。因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil值的表。
参数:key field [field ...]
返回值:一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。

6,hgetall

描述:返回哈希表key中,所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
参数:key
返回值:以列表形式返回哈希表的域和域的值。 若key不存在,返回空列表。

7,hdel

描述:删除哈希表key中的一个或多个指定域,不存在的域将被忽略。
参数:key field [field ...]
返回值:被成功移除的域的数量,不包括被忽略的域。

8,hlen

描述:返回哈希表key中域的数量。
参数:key
返回值:哈希表中域的数量。当key不存在时,返回0。

9,hexists

描述:查看哈希表key中,给定域field是否存在。
参数:key field
返回值:如果哈希表含有给定域,返回1。如果哈希表不含有给定域,或key不存在,返回0。

10,hincrby

描述:为哈希表key中的域field的值加上增量increment。增量也可以为负数,相当于对给定域进行减法操作。
参数:key field increment
返回值:执行HINCRBY命令之后,哈希表key中域field的值。

11,hkeys

描述:返回哈希表key中的所有域。
参数:key
返回值:一个包含哈希表中所有域的表。当key不存在时,返回一个空表。

12,hvals

描述:返回哈希表key中的所有值。
参数:key
返回值:一个包含哈希表中所有值的表。当key不存在时,返回一个空表。

以上12个方法的代码例子:

<?php  

$redis = new redis();  

$redis->connect('192.168.1.108', 6379);  

$redis->delete('test');  

$redis->hset('test', 'key1', 'hello');  

echo $redis->hget('test', 'key1');     //结果:hello  

  

echo "<br>";  

$redis->hSetNx('test', 'key1', 'world');  

echo $redis->hget('test', 'key1');   //结果:hello  

  

$redis->delete('test');  

$redis->hSetNx('test', 'key1', 'world');  

echo "<br>";  

echo $redis->hget('test', 'key1');   //结果:world  

  

echo $redis->hlen('test');   //结果:1  

var_dump($redis->hdel('test','key1'));  //结果:bool(true)   

  

$redis->delete('test');  

$redis->hSet('test', 'a', 'x');  

$redis->hSet('test', 'b', 'y');  

$redis->hSet('test', 'c', 'z');  

print_r($redis->hkeys('test'));  //结果:Array ( [0] => a [1] => b [2] => c )   

  

print_r($redis->hvals('test'));  //结果:Array ( [0] => x [1] => y [2] => z )   

  

print_r($redis->hgetall('test'));  //结果:Array ( [a] => x [b] => y [c] => z )   

  

var_dump($redis->hExists('test', 'a'));  //结果:bool(true)   

  

$redis->delete('test');  

echo $redis->hIncrBy('test', 'a', 3);    //结果:3  

echo $redis->hIncrBy('test', 'a', 1);    //结果:4  

  

$redis->delete('test');  

var_dump($redis->hmset('test', array('name' =>'tank', 'sex'=>"man"))); //结果:bool(true)  

print_r($redis->hmget('test', array('name', 'sex')));  //结果:Array ( [name] => tank [sex] => man )  

?> 

13,zadd

描述:
增加一个或多个元素,如果该元素已经存在,更新它的socre值
虽然有序集合有序,但它也是集合,不能重复元素,添加重复元素只会
更新原有元素的score值
参数:
key
score : double
value: string
返回值:1 or 0

14,zrange

描述:取得特定范围内的排序元素,0代表第一个元素,1代表第二个以此类推。-1代表最后一个,-2代表倒数第二个...
参数:
key
start: long
end: long
withscores: bool = false
返回值:数组

15,zdelete, zrem

描述:从有序集合中删除指定的成员。
参数:
key
member
返回值:1 or 0

16,zrevrange

描述:返回key对应的有序集合中指定区间的所有元素。这些元素按照score从高到低的顺序进行排列。对于具有相同的score的元素而言,将会按照递减的字典顺序进行排列。该命令与ZRANGE类似,只是该命令中元素的排列顺序与前者不同。
参数:
key
start: long
end: long
withscores: bool = false
返回值:数组

17,zrangebyscore, zrevrangebyscore

描述:返回key对应的有序集合中score介于min和max之间的所有元素(包哈score等于min或者max的元素)。元素按照score从低到高的顺序排列。如果元素具有相同的score,那么会按照字典顺序排列。
可选的选项LIMIT可以用来获取一定范围内的匹配元素。如果偏移值较大,有序集合需要在获得将要返回的元素之前进行遍历,因此会增加O(N)的时间复杂度。可选的选项WITHSCORES可以使得在返回元素的同时返回元素的score,该选项自从Redis 2.0版本后可用。
参数:
key
start: string
end: string
options: array
返回值:数组

18,zcount

描述:返回key对应的有序集合中介于min和max间的元素的个数。
参数:
key
start: string
end: string
返回值:数组长度

19,zremrangebyscore, zreleterangebyscore

描述:移除key对应的有序集合中scroe位于min和max(包含端点)之间的所哟元素。从2.1.6版本后开始,区间端点min和max可以被排除在外,这和ZRANGEBYSCORE的语法一样。
参数:
key
start: double or "+inf" or "-inf" string
end: double or "+inf" or "-inf" string
返回值:删除元素个数

20,zremrangebyrank, zdeleterangebyrank

描述:移除key对应的有序集合中rank值介于start和stop之间的所有元素。start和stop均是从0开始的,并且两者均可以是负值。当索引值为负值时,表明偏移值从有序集合中score值最高的元素开始。例如:-1表示具有最高score的元素,而-2表示具有次高score的元素,以此类推。
参数:
key
start: LONG
end: LONG
返回值:删除元素个数

21,zsize, zcard

描述:返回存储在key对应的有序集合中的元素的个数。
参数:key
返回值:元素个数

22,zscore

描述:返回key对应的有序集合中member的score值。如果member在有序集合中不存在,那么将会返回null。
参数:key member

23,zrank, zrevrank

描述:返回key对应的有序集合中member元素的索引值,元素按照score从低到高进行排列。rank值(或index)是从0开始的,这意味着具有最低score值的元素的rank值为0。使用ZREVRANK可以获得从高到低排列的元素的rank(或index)。
参数:key member
返回值:数字

24,zincrby

将key对应的有序集合中member元素的scroe加上increment。如果指定的member不存在,那么将会添加该元素,并且其score的初始值为increment。如果key不存在,那么将会创建一个新的有序列表,其中包含member这一唯一的元素。如果key对应的值不是有序列表,那么将会发生错误。指定的score的值应该是能够转换为数字值的字符串,并且接收双精度浮点数。同时,你也可用提供一个负值,这样将减少score的值。
参数:key value member
返回值:字符型数据

25,zunion

描述:keys对应的numkeys个有序集合计算合集,并将结果存储在destination中
参数:keyOutput arrayZSetKeys arrayWeights aggregateFunction
返回值:并集数组

26,zinter

描述:keys对应的numkeys个有序集合计算交集,并将结果存储在destination中
参数:keyOutput arrayZSetKeys arrayWeights aggregateFunction
返回值:交集数组

13-26的代码例子:

$redis = new redis();  

$redis->connect('192.168.1.108', 6379);  

$redis->delete('test');  

$redis->zadd('test', 1, 'val1');  

$redis->zadd('test', 0, 'val2');  

$redis->zadd('test', 3, 'val3');  

  

print_r($redis->zrange('test', 0, -1)); //结果:Array ( [0] => val2 [1] => val1 [2] => val3 )  

  

$redis->zdelete('test', 'val2');  

print_r($redis->zrange('test', 0, -1)); //结果:Array ( [0] => val1 [1] => val3 )   

  

$redis->zadd('test',4, 'val0');  

print_r($redis->zrevrange('test', 0, -1));  //结果:Array ( [0] => val0 [1] => val3 [2] => val1 )  

print_r($redis->zrevrange('test', 0, -1,true));  //结果:Array ( [val0] => 4 [val3] => 3 [val1] => 1 )   

  

echo "<br>";  

$redis->zadd('key', 0, 'val0');  

$redis->zadd('key', 2, 'val2');  

$redis->zadd('key', 10, 'val10');  

  

print_r($redis->zrangebyscore('key', 0, 3, array('limit' => array(1, 1),'withscores' => TRUE))); //结果:Array ( [val2] => 2 )  

print_r($redis->zrangebyscore('key', 0, 3, array('limit' => array(1, 1)))); //结果:Array ( [0] => val2 )   

  

echo $redis->zcount('key', 0, 3); //结果:2  

  

$redis->zremrangebyscore('key', 0, 3);  

print_r($redis->zrange('key', 0, -1));  //结果:Array ( [0] => val10 )   

  

echo $redis->zsize('key');   //结果:1  

  

$redis->zadd('key', 2.5, 'aaaa');  

echo $redis->zscore('key', 'aaaa');   //结果:2.5  

  

echo $redis->zrank('key', 'aaaa');   //结果:0  

echo $redis->zrevrank('key', 'aaaa');    //结果:1  

  

$redis->delete('key');  

  

echo $redis->zincrby('key', 2, 'aaaa');  //结果:2  

echo $redis->zincrby('key', 1, 'aaaa');  //结果:3  

  

$redis->delete('key');  

$redis->delete('test');  

  

$redis->zadd('key', 0, 'val0');  

$redis->zadd('key', 1, 'val1');  

$redis->zadd('key', 4, 'val2');  

$redis->zadd('test', 2, 'val2');  

$redis->zadd('test', 3, 'val3');  

$redis->zunion('k01', array('key', 'test'));  

print_r($redis->zrange('k01',0, -1)); //结果:Array ( [0] => val0 [1] => val1 [2] => val3 [3] => val2 )  

  

$redis->zunion('k03', array('key', 'test'), array(5, 1));  

print_r($redis->zrange('k03',0, -1)); //结果:Array ( [0] => val0 [1] => val3 [2] => val1 [3] => val2 )   

  

$redis->zinter('k02', array('key', 'test'));  

print_r($redis->zrange('k02',0, -1)); //结果:Array ( [0] => val2 )  

?> 
PHP 相关文章推荐
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
vs中通过剪切板循环来循环粘贴不同内容
Apr 30 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 #PHP
30个php操作redis常用方法代码例子
Jul 05 #PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 #PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 #PHP
php遍历数组的4种方法总结
Jul 05 #PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 #PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 #PHP
You might like
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
php中switch语句用法详解
2015/08/17 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
Python多线程学习资料
2012/12/19 Python
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python查找相似单词的方法
2015/03/05 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
Python3简单实现串口通信的方法
2019/06/12 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
自行车广告词大全
2014/03/21 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js