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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本篇笔记简单介绍了Redis的Hash(哈希表)命令:hDel,hExists,hGet,hGetAll,hIncrBy,hIncrByFloat,hKeys,hLen,hMGet,hMSet,hSet,HSetnx,hVals作用和php的使用

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
/**
 * Created by PhpStorm.
 * User: jmsite.cn
 * Date: 2019/1/25
 * Time: 18:33
 */
try {
    $redis = new Redis();
    $redis->connect('192.168.75.132', 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://www.jmsite.cn/blog-609.html

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
40 5
|
1月前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
1月前
|
存储 NoSQL 关系型数据库
PHP 使用 Redis
10月更文挑战第22天
36 6
|
2月前
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
44 1
|
1月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
56 0
|
2月前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
37 0
|
存储 算法 PHP
PHP内核探索之变量(3)- hash table
原文:PHP内核探索之变量(3)- hash table        在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table。
1313 0
|
1月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
40 0