redis 的hash数据类型

hash的常用命令

1.hset

  hset key field value

  将哈希表key中的域field的值设为value

  如果key不存在,一个新的哈希表被创建并进行HSET操作

  如果field是哈希表中的一个新建域,并且值设置成功,返回1

  如果域field已经存在于哈希表中,旧值将被覆盖,返回0

2.hsetnx

  hsetnx key field value

  将哈希表key中的域field的值设置为value,当且仅当域field不存在。

  如果field已经存在,该操作无效,返回0。

  如果key不存在,一个新哈希表被创建并执行HSETNX命令。

3.hget

  hget key field

  返回哈希表key中给定域field的值

  如果域field存在,给定域的值,当给定域不存在或是给定key不存在时,返回nil

4.hmset

  hmset key field value [field value ...]

  同时将多个field - value(域-值)对设置到哈希表key中

  如果命令执行成功,返回OK。当key不是哈希表(hash)类型时,返回一个错误

 5.hmget

  hmget key field [field ...]

  返回哈希表key中,一个或多个给定域的值,顺序和给定域参数的请求顺序一样

6.hgetall

  hgetall key

  返回哈希表key中,所有的域和值。

  在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍

  若key不存在,返回空列表

7.hkeys

  hkeys key  

  返回哈希表key中的所有域

  当key不存在时,返回一个空表

8.hvals

  hvals key

  返回哈希表key中的所有值

  当key不存在时,返回一个空表

9.hdel

  hdel key [key……]

  删除哈希表key中的一个或多个指定域,不存在的域将被忽略

10.hlen

  hlen key

  返回哈希表key中域的数量

  当key不存在时,返回0

php示例

$redis = new redis();  
$redis->connect('127.0.0.1', 6609);  
$redis->delete('hash1');  
$redis->hset('hash1', 'k1', 'hello');  
echo $redis->hget('hash1', 'k1');     //结果:hello  
  
echo "<br>";  
$redis->hSetNx('hash1', 'k1', 'hello');  
echo $redis->hget('hash1', 'k1');   //结果:hello  
  
$redis->delete('hash1');  
$redis->hSetNx('hash1', 'k1', 'hello');
$redis->hSetNx('hash1', 'k2', 'world');  
echo "<br>";  
echo $redis->hget('hash1', 'k2');   //结果:world  
echo "<br>";   
echo $redis->hlen('hash1');   //结果:2  
echo "<br>"; 
var_dump($redis->hdel('hash1','k1'));  //结果:bool(true)   

11.hexists

  hexists key field

  查看哈希表key中,给定域field是否存在

  如果哈希表含有给定域,返回1。如果哈希表不含有给定域,或key不存在,返回0

12.hincrby

  hincrby key field increment

  为哈希表key中的域field的值加上增量increment。增量也可以为负数,相当于对给定域进行减法操作

  执行完后返回hash表里的filed的值

 

删除某个key

  del key

php示例

$redis->delete('hash1');  
$redis->hSet('hash1', 'a', '1');  
$redis->hSet('hash1', 'b', '2');  
$redis->hSet('hash1', 'c', '3');  
print_r($redis->hkeys('hash1'));  //结果:Array ( [0] => a [1] => b [2] => c )   
echo "<br>";   
print_r($redis->hvals('hash1'));  //结果:Array ( [0] => 1 [1] => 2 [2] => 3 )   
echo "<br>";   
print_r($redis->hgetall('hash1'));  //结果:Array ( [a] => x [b] => y [c] => z ) 
echo "<br>";   
var_dump($redis->hExists('hash1', 'a'));  //结果:bool(true)
echo "<br>";    
echo $redis->hIncrBy('hash1', 'a', 3);    //结果:4  
echo "<br>"; 
echo $redis->hIncrBy('hash1', 'a', 1);    //结果:5  
  

批量添加、查看

$redis->delete('hash1'); 
echo "<br>";  
var_dump($redis->hmset('hash1', array('name' =>'aaa', 'sex'=>"male"))); //结果:bool(true) 
echo "<br>";  
print_r($redis->hmget('hash1', array('name', 'sex')));  //结果:Array ( [name] => aaa [sex] => male )  

$redis->delete('hash1');
$redis->hmset('user:100', array('name' =>'aaa', 'sex'=>"male"));
$redis->hmset('user:101', array('name' =>'bbb', 'sex'=>"female"));
$redis->hmset('user:102', array('name' =>'ccc', 'sex'=>"male"));
echo "<br>";  
print_r($redis->hmget('user:102', array('name', 'sex')));  //结果:Array ( [name] => ccc [sex] => male ) 

注:

  一般使用冒号做分割符,比如在php-admin for redis系统里,就是默认以冒号分割,于是user:100 user:101等key会分成一组

原文地址:https://www.cnblogs.com/baby123/p/7154426.html