Redis 笔记(2) —— 哈希表 Hash
1. 简介
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
适用情况:
- 在大多数情况中只需要访问少量字段
- 自己始终知道哪些字段可用,防止使用 mget 时获取不到想要的数据
2. 练习
2.1 HSET HGET
将哈希表 hash 中域 field 的值设为 value,获取哈希表的值。
127.0.0.1:6379> hset xxmh name xxm
(integer) 1
127.0.0.1:6379> hget xxmh name
"xxm"
2.2 HSETNX
如果 field 已存在,则不执行命令
127.0.0.1:6379> hget xxmh name
"xxm"
127.0.0.1:6379> hsetnx xxmh name newname
(integer) 0
127.0.0.1:6379> hget xxmh name
"xxm"
2.3 HEXISTS
检查给定的 field 是否存在于哈希表中。
127.0.0.1:6379> hget xxmh name
"xxm"
127.0.0.1:6379> hexists xxmh name
(integer) 1
127.0.0.1:6379> hexists xxmh age
(integer) 0 #age域不存在,因此返回值为0
2.4 HDEL
删除哈希表 key 中的一个或多个指定的 field ,不存在的 field
将被忽略。
127.0.0.1:6379> hget xxmh name
"xxm"
127.0.0.1:6379> hset xxmh age 28
(integer) 1
127.0.0.1:6379> hset xxmh gender male
(integer) 1
127.0.0.1:6379> hdel xxmh age
(integer) 1
127.0.0.1:6379> hget xxmh age
(nil) #域age 已被删除,因此返回nil
# 删除多个域
127.0.0.1:6379> hdel xxmh name gender
(integer) 2
127.0.0.1:6379> hget xxmh name
(nil)
127.0.0.1:6379> hget xxmh gender
(nil)
2.5 HLEN
返回哈希表 key 中的 field 的数量。
127.0.0.1:6379> hlen xxmh
(integer) 1
127.0.0.1:6379> hset xxmh gender male
(integer) 1
127.0.0.1:6379> hlen xxmh
(integer) 2
2.6 HSTRLEN
返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)
127.0.0.1:6379> hget xxmh name
"xxm"
127.0.0.1:6379> hget xxmh gender
"male"
127.0.0.1:6379> hstrlen xxmh name
(integer) 3
127.0.0.1:6379> hstrlen xxmh gender
(integer) 4
2.7 HINCRBY
为哈希表 key 中的域 field 的值加上增量 increment
127.0.0.1:6379> hset xxmh age 28
(integer) 1
127.0.0.1:6379> hincrby xxmh age 20
(integer) 48
127.0.0.1:6379> hget xxmh age
"48"
2.8 HINCRBYFLOAT
为哈希表 key 中的域 field 加上浮点数增量 increment
#值和增量都是普通小数
127.0.0.1:6379> hset xxmh score 90.50
(integer) 0
127.0.0.1:6379> hincrbyfloat xxmh score 0.1
"90.599999999999994"
127.0.0.1:6379> hget xxmh score
"90.599999999999994"
#值和增量都是指数符号
127.0.0.1:6379> hset xxmh money 1.0e5
(integer) 1
127.0.0.1:6379> hincrbyfloat xxmh money 2.0e4
"120000"
127.0.0.1:6379> hget xxmh money
"120000"
#对不存在的 key 执行 hincrbyfloat,
127.0.0.1:6379> hexists xxmh height
(integer) 0
127.0.0.1:6379> exists price
(integer) 0
127.0.0.1:6379> hincrbyfloat price book 10.5
"10.5"
127.0.0.1:6379> hgetall price
1) "book"
2) "10.5"
#对不存在的 field 执行 hincrbyfloat
127.0.0.1:6379> hexists xxmh price
(integer) 0
127.0.0.1:6379> hincrbyfloat xxmh price 10.5
"10.5"
127.0.0.1:6379> hget xxmh price
"10.5"
2.9 HMSET、HMGET
同时将多个 field-value (域-值)对设置到哈希表 key 中。
127.0.0.1:6379> hmset hxxm name xxm age 28 gender male
OK
127.0.0.1:6379> hgetall hxxm
1) "name"
2) "xxm"
3) "age"
4) "28"
5) "gender"
6) "male"
2.10 HKEYS、HVALS
返回哈希表 key 中的所有域、返回哈希表 key 中所有域的值。
127.0.0.1:6379> hkeys xxmh
1) "name"
2) "gender"
3) "age"
4) "money"
5) "score"
6) "price"
127.0.0.1:6379> hvals xxmh
1) "xxm"
2) "male"
3) "48"
4) "120000"
5) "90.599999999999994"
6) "10.5"
2.11 HGETALL
获取某个哈希表的所有 key 和 value
127.0.0.1:6379> hgetall xxmh
1) "name"
2) "xxm"
3) "gender"
4) "male"
5) "age"
6) "48"
7) "money"
8) "120000"
9) "score"
10) "90.599999999999994"
11) "price"
12) "10.5"
2.12 HSCAN 迭代哈希表中的键值对
redis HSCAN 命令基本语法如下:
HSCAN key cursor [MATCH pattern] [COUNT count]
cursor - 游标。
pattern - 匹配的模式。
count - 指定从数据集里返回多少元素,默认值为 10 。
127.0.0.1:6379> HMSET sites google "google.com" runoob "runoob.com" weibo "weibo.com" 4 "taobao.com"
OK
127.0.0.1:6379> hscan sites 0 match "run*"
1) "0"
2) 1) "runoob"
2) "runoob.com"
版权声明:本文为xuxumiao204原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。