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会分成一组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)