技术饭

PHP使用Redis的Hash(哈希表)命令

copylian    0 评论    1184 浏览    2021.04.02

1.Hash(哈希表)命令

命令              作用                                                                                             返回值

hDel              删除哈希表key中一个或多个字段,传入不存在的字段将被忽略      返回成功删除的字段数

hExists           判断哈希表key中是否存在给定的字段                                           存在true,不存在false

hGet              从哈希表key中获取给定的一个字段值                                            存在返回字段值,不存在返回false

hGetAll          从哈希表key中获取全部的字段和值                                               存在返回关联数组,不存在返回空数组

hIncrBy          整形数值递增(有符号)                                                                   递增后的值

hIncrByFloat  浮点型数值递增(有符号)                                                                递增后的值

hKeys             返回哈希表key中所有的字段                                                         存在字段返回关联数组,不存在返回空数组

hLen               返回哈希表key中字段数量                                                            大于等于0的整数

hMGet            返回哈希表key中给定的一个或多个字段的值                                 返回一个关联数租,键为查询的字段,值为查询到的值,查询的字段不存在则值为false

hMSet             对哈希表key设置一组字段值                                                         如果命令成功,返回true

hSet                对哈希表key设置一个字段值                                                          如果是设置了一个新值,返回1,如果覆盖了一个旧值,返回0

HSetnx            在哈希表key中不存在给定字段的情况下赋值                                  成功返回1,如果已经存在则返回0

hVals                返回哈希表key中所有的字段的值                                                  关联数组

2.在Hash的key中设置一个或多个字段值

<?php

try {

    $redis = new Redis();

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

    //设置多个字段值

    $ret = $redis->hMSet('product_info_123', array(

        'product_id'            => 123,

        'product_name'          => 'Gregory登山包B75蓝色2015款',

        'product_price'         => 1700.00,

        'product_sales_volume'  => 10,

        'product_stocks'        => 20,

    ));

    var_dump($ret);

    //设置一个字段值

    $ret = $redis->hSet('product_info_123', 'product_feature', '一款背负系统极佳的登山包');

    var_dump($ret);

} catch (Exception $e){

    echo $e->getMessage();

}

执行结果


bool(true)

int(1)

3.设置Hash的过期时间,并获取Hash的字段值

try {

    $redis = new Redis();

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

    //设置过期时间

    $ret = $redis->ttl('product_info_123');

    if ($ret === -1){

        $ret = $redis->expire('product_info_123', 3600);

        var_dump($ret);

    }

    //获取产品名称

    $ret = $redis->hGet('product_info_123', 'product_name');

    var_dump($ret);

    //获取价格和销量

    $ret = $redis->hMGet('product_info_123', array('product_price', 'product_sales_volume'));

    var_dump($ret);

} catch (Exception $e){

    echo $e->getMessage();

}

执行结果

bool(true)

string(32) "Gregory登山包B75蓝色2015款"

array(2) {

    ["product_price"]=>

  string(4) "1700"

    ["product_sales_volume"]=>

  string(2) "10"

}

4.变价,增加销量,减库存,获取全部字段值

try {

    $redis = new Redis();

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

    //价格加15.99

    $ret = $redis->hIncrByFloat('product_info_123', 'product_price', 15.99);

    var_dump($ret);

    //销量加1

    $ret = $redis->hIncrBy('product_info_123', 'product_sales_volume', 1);

    var_dump($ret);

    //库存减1

    $ret = $redis->hIncrBy('product_info_123', 'product_stocks', -1);

    var_dump($ret);

    //获取全部字段值

    $ret = $redis->hGetAll('product_info_123');

    var_dump($ret);

} catch (Exception $e){

    echo $e->getMessage();

}

执行结果

float(1715.99)

int(11)

int(19)

array(6) {

    ["product_id"]=>

  string(3) "123"

    ["product_name"]=>

  string(32) "Gregory登山包B75蓝色2015款"

    ["product_price"]=>

  string(22) "1715.98999999999999999"

    ["product_sales_volume"]=>

  string(2) "11"

    ["product_stocks"]=>

  string(2) "19"

    ["product_feature"]=>

  string(36) "一款背负系统极佳的登山包"

}

5.字段相关操作

try {

    $redis = new Redis();

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

    //判断字段product_feature和product_category是否存在

    $ret = $redis->hExists('product_info_123', 'product_feature');

    var_dump($ret);

    $ret = $redis->hExists('product_info_123', 'product_category');

    var_dump($ret);

    //获取字段长度

    $ret = $redis->hLen('product_info_123');

    var_dump($ret);

    //获取全部字段

    $ret = $redis->hKeys('product_info_123');

    var_dump($ret);

} catch (Exception $e){

    echo $e->getMessage();

}

执行结果

bool(true)

bool(false)

int(6)

array(6) {

    [0]=>

  string(10) "product_id"

    [1]=>

  string(12) "product_name"

    [2]=>

  string(13) "product_price"

    [3]=>

  string(20) "product_sales_volume"

    [4]=>

  string(14) "product_stocks"

    [5]=>

  string(15) "product_feature"

}

6.删除字段,获取所有字段值

try {

    $redis = new Redis();

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

    //删除product_feature和product_stocks

    $ret = $redis->hDel('product_info_123', 'product_feature', 'product_stocks');

    var_dump($ret);

    //获取所有字段值

    $ret = $redis->hVals('product_info_123');

    var_dump($ret);

} catch (Exception $e){

    echo $e->getMessage();

}

执行结果

int(2)

array(4) {

    [0]=>

  string(3) "123"

    [1]=>

  string(32) "Gregory登山包B75蓝色2015款"

    [2]=>

  string(22) "1715.98999999999999999"

    [3]=>

  string(2) "11"

}

注意:商品价格变价后出现1715.98999999999999999是因为php精度问题造成的,需要使用php的round方法截取

原文:https://blog.csdn.net/weixin_43910923/article/details/88693561

飓风呀
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
PHP Redis Hash 哈希表 命令 

文明上网理性发言!

  • 还没有评论,沙发等你来抢