redis的数据类型Hash,其原生命令和php操作Redis Hash函数介绍

Hash类型简介

Hash是一个string类型的field和value的映射表,hash特别适合于对象存储,每个hash可以存储2^32 - 1个键值对(40多亿)

原生命令介绍

命令 命令描述 实例
HMSET key field1 value1 [field2 value2] 同时将多个field-value(域-值)对设置到hash表key中 HMSET hash1 name ‘zhuyl’ age ‘24’,HVALS hash1,返回值为:“zhuyl”,“24”
HMGET key field1 [field2] 返回哈希表 key 中,一个或多个给定field的值,如果给定的field不存在于哈希表,那么返回一个 nil 值 HMGET hash1 name1 age1 desc1,返回值:“qing” (nil) “piao”
HVALS key 获取hash表中所有值 HVALS hash1,返回值:“zhuyl”,“24”
HGET key field 获取存储在哈希表key中指定的field的值 HGET hash1 name,返回值:“zhuyl”
HGETALL key 获取在哈希表中指定key的所有字段和值 HGETALL hash1,返回值“name”“zhuyl” “age” “24”
HEXISTS key field 查看哈希表key中,指定的字段是否存在 HEXISTS hash1 name,存在name字段则返回:1,HEXISTS hash1 desc,不存在desc字段则返回:0
HDEL key field1 [field2] 删除一个或多个哈希表字段 HDEL hash1 name age,返回2(代表删除字段的个数),
HKEYS key 获取所有哈希表key中的字段 HKEYS hash1,返回值:“name” “age”
HLEN key 获取哈希表key中字段的数量 HLEN hash1,返回值:2
HSET key field value 将哈希表key中的字段field的值设为value HSET hash1 name ‘yu’,返回值:0,执行HVALS hash1,返回:“yu” “24”
HSETNX key field value 只有字段field不存在时,设置哈希表字段的值 HSETNX hash1 desc ‘beuty’,返回值:1;执行HVALS hash1,返回值:‘yu’ ‘24’,‘beuty’,HSETNX hash1 desc ‘beuty111’,如果字段field已经存在,则返回:0
HINCRBY key field increment 为哈希表key中指定字段的整数值加上增量increment HINCRBY hash1 age 3,返回增加之后的值:27
HINCRBYFLOAT key field increment 为哈希表key中的指定字段的浮点数值加上增量increment HINCRBYFLOAT hash1 age 1.5,返回值为+increment后的值:28.5
HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对,match用正则表达式过滤数据,count命令指定返回的数据的条数 HSCAN hash1 0 MATCH ag* COUNT 10
HSTRLEN key field 返回哈希表key中field字段的value值得长度,如果field或者value不存在,则返回:0,redis的版本>=3.2.0 HSTRLEN hash1 name,返回值:2

特别介绍HSCAN命令

  • MATCH:通过给定的正则表达式的pattern(模式)过滤数据,只返回和给定模式匹配的元素
  • COUNT:COUNT的作用是告知迭代器每次迭代返回的元素的数量,大多数情况下都会返回比较准确的条数;
    * COUNT的默认值是10;
    * 数据集比较大时,如果没有使用MATCH 选项, 那么命令返回的元素数量通常和 COUNT 选项指定的一样, 或者比 COUNT 选项指定的数量稍多一些;
    * 在迭代一个编码为整数集合(intset,一个只由整数值构成的小集合)、 或者编码为压缩列表(ziplist,由不同值构成的一个小哈希或者一个小有序集合)时, 增量式迭代命令通常会无视 COUNT 选项指定的值, 在第一次迭代就将数据集包含的所有元素都返回给用户

php操作redis Hash的函数

  • hSet(key,hashKey,value)函数
    * 说明:将值为value,键为hashKey的元素添加到hash表key中
    * 参数: key(哈希表的key),hashKey(哈希表中的元素的key),value(哈希表中key元素的值)
    * 返回值:如果hashKey存在但value不存在且赋值成功返回1;如果hashKey存在但value存在且被替换成功则返回0;如果执行失败则返回false
    * php $redis->delete('hash1'); $ret = $redis->hSet('hash1', 'key1', 'hello'); /* 1 */ $r2 = $redis->hGet('hash1', 'key1'); /* returns "hello" */ $res = $redis->hSet('hash1', 'key1', 'plop'); /* 0, value was replaced. */ $r1 = $redis->hGet('hash1', 'key1'); /* returns "plop" */
  • hSetNx(key,hashKey,value)函数
    * 说明:将值为value,键为hashKey的元素添加到hash表key中,如果hashKey不存在
    * 参数:key(哈希表的key),hashKey(哈希表中元素的key),value(哈希表中key元素的值)
    * 返回值:如果hashKey设置成功返回true,如果hashKey已经存在则返回false
    * php $redis->delete('hash1'); $ret = $redis->hSet('hash1', 'key1', 'hello'); var_dump($ret); /* 1 */ $res = $redis->hSet('hash1', 'key1', 'plop'); var_dump($res); /* 0 */
  • hGet(key,hashKey)函数
    * 说明:从哈希表key中取出键为hashKey的值
    * 参数: key(哈希表的key),hashKey(哈希表中元素的key)
    * 返回值:如果成功则返回hashKey的值,失败返回false
    * php $r22 = $redis->hGet('hash1', 'key1'); var_dump($r22);/* "plop" */
  • hLen(key)函数
    * 说明:取得哈希表的长度(即有多少个hashKey),不管hashKey是否有值
    * 参数:key(哈希表的key)
    * 返回值:如果key存在则返回哈希表元素的个数,key不存在则返回false
    * php $ret = $redis->hSet('hash1', 'key2', 'hello'); $r22 = $redis->hLen('hash1'); /* 2 */
  • hDel(key,hashKey1,hashKey2,…)函数
    * 说明:删除哈希表key中的元素hashKey1,hashKey2等
    * 参数: key(哈希表的key),hashKey1,hashKey2(哈希表key中的hashKey)
    * 返回值:如果hashKey存在,则返回删除的hashKey的个数;如果key不存在返回0;如果key不是哈希表则返回false
    * php $ret = $redis->hDel('hash1', 'key3', 'key2');/* 删除两个hashKey:2 */ $r22 = $redis->hDel('hash2','key1');/* 哈希表hash2不存在:0 */ $r11 = $redis->hDel('string','key1'); /* string不是哈希表:false */
  • hKeys(key)函数
    * 说明: 返回哈希表key中所有的hashKey,并组成一个索引数组
    * 参数: key
    * 返回:一个索引数组
    * php $ret = $redis->hSet('hash1', 'key2', 'plop'); $r22 = $redis->hSet('hash1','key3',null); $r11 = $redis->hKeys('hash1'); var_dump($r11); /* array(3) { [0]=> string(4) "key1" [1]=> string(4) "key2" [2]=> string(4) "key3" } */
  • hVals(key)函数
    * 说明:返回哈希表的所有的hashKey的值,组成一个数组(数组的顺序是随机的)
    * 参数: key(哈希表的key)
    * 返回:返回哈希表中所有值组成的索引数组
    * php $r11 = $redis->hVals('hash1'); // array(3) { [0]=> string(4) "plop" [1]=> string(4) "plop" [2]=> string(0) "" }
  • hGetAll(key)函数
    * 说明:取得整个哈希表的键值对,且以关联数组的形式返回(数组的顺序是随机的)
    * 参数: key(哈希表的key)
    * 返回:返回一个数组(所有键值对组成的关联数组)
    * php $r1 = $redis->hGetAll('hash1'); var_dump($r1); /* array(3) { ["key1"]=> string(4) "plop" ["key2"]=> string(4) "plop" ["key3"]=> string(0) "" } */
  • hExists(key,hashKey)函数
    * 说明:判断键hashKey是否存在哈希表key中
    * 参数:key,hashKey(哈希表中的一个键)
    * 返回值:如果存在则返回true,其他情况则返回false
    * php $r1 = $redis->hExists('hash1','key1'); /* true */ $r2 = $redis->hExists('hash1','key5'); /* false */
  • hIncrBy(key,hashKey,value)函数
    * 说明:为哈希表key中键为hashkey的值增加value(整型数);hashKey不存在则默认值为0
    * 参数:key,hashKey(哈希表中的一个键),value(将要增加的值)
    * 返回:返回hashKey的新值(newValue = oldValue + value),如果value或者oldValue不是整型数则返回false
    * php $r2 = $redis->hSet('hash1','key5',9); $r1 = $redis->hIncrBy('hash1','key5',3); /* 12 */
  • hIncrByFloat(key,hashKey,value)函数
    * 说明:为哈希表key中键为hashkey的值增加value(浮点数);hashKey不存在则默认值为0
    * 参数:key,hashKey(哈希表中的一个键),value(将要增加的值)
    * 返回:返回hashKey的新值(newValue = oldValue + value)
    * php $r1 = $redis->hIncrByFloat('hash1','key6',3.2); var_dump($r1); /* 3.2 */
  • hMSet(key,paraArr)函数
    * 说明:为哈希表key添加值(非string值被强制转换成string值,null值会被赋予空字符串),键值对如果存在,则会被新值覆盖
    * 参数:key,paraArr(有键值对组成的关联数组)
    * 返回:赋值成功返回true,失败返回false
    * php $r1 = $redis->hMset('hash1',array('key7'=>'yut','key8'=>'jok')); // true
  • hMGet(key,hashKeyArr)函数
    * 说明:获取哈希表key中的键值
    * 参数:key,hashKeyArr(哈希表key中hashKey组成的数组)
    * 返回:返回一个数组(有哈希表中键值对组成的关联数组:hashKey=>value)
    * php $r1 = $redis->hMGet('hash1',array('key1','key8','key3')); /* array(3) { ["key1"]=> string(3) "yut" ["key8"]=> string(3) "jok" ["key3"]=> string(0) "" } */
  • hScan()函数:暂不介绍
  • hStrLen(key,hashKey)函数
    * 说明: 获取哈希表key中键hashKey对应的值的长度
    * 参数:key,hashKey(哈希表中的一个键)
    * 返回:返回hashKey对应的值的长度,如果hashKey不存在或key不存在则返回0
    * 注意:redis >= 3.2.0才能使用该函数
    * php $r1 = $redis->hStrLen('hash1','key1'); // 3

猜你喜欢

转载自blog.csdn.net/StimmerLove/article/details/83514826