PHP使用Redis的Hash(哈希表)命令
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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
PHP使用Redis的Transaction(事务)命令
1.Transaction命令 命令 作用 返回值 watch 监视一个或多个key 总是OK multi 声明事务开始,后续命令将排队按顺序等待exec执行 总是OK exec 顺序执行multi之后的命令,如果multi之前使用watch命令监视的键的值发生变化,执行将失败 执行成功时返回数组包含每个命令执行结果,失败时原生命令返回null,php-redis扩展方法返回false discard 取消事务 总是OK unwatch 取消watch监视,如果watch监视之后执行了exec或discard,会自动取消监视,不必再unwatch 总是OK 2.执行事务 <?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/24 * Time: 21:03 */ try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); //开启事务 $redis->multi(); $redis->setex('keyTe...
-
下一篇
PHP使用Redis的List(列表)命令实现消息队列
1.用到的List(列表)命令 命令 作用 lPush 将一个或多个值插入到列表头部 rpoplpush 弹出列表最后一个值,同时插入到另一个列表头部,并返回该值 lRem 删除列表内的给定值 lIndex 按索引获取列表内的值 2.队列的组成 名称 职责 生产者 发布消息 消费者 获取并处理消息 监听者 监听超时的消息,弹回原消息队列,确保消费者挂掉后或处理失败后消息能被其他消费者处理 3.php实现代码 生产者Producter.php <?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/26 * Time: 0:13 */ try { //声明消息队列-list的键名 $queueKey = 'testQueueKey'; $redis = new Redis(); $redis->connect('192.168.75.132', 6379); //向列表中push10条消息 for ($i = 0;$i < 10;$i++){ //为消息生成唯一标识 $uniqid = uniq...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker容器配置,解决镜像无法拉取问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- MySQL数据库在高并发下的优化方案