赞
踩
Redis五大数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sorted set:有序集合)。
Redis 中的(Hash)类型是一个 String 类型与 field 和 field-value 的映射表,适用于存储对象,将一个对象类型存储在Hash类型中要比存在 String 类型中占用要更小,更加节省内存空间
以下是 String 类型和 Hash 类型的结构比较:
底层使用两种数据结构存储:
当使用ziplist编码必须满足下面两个条件,否则使用hashtable
ziplist这里不再做讲解,我在《Redis五大数据类型——List列表》博文中讲解过,感兴趣的还请翻阅我之前的博文,谢谢
命令 | 功能 | 语法 | 描述 |
hset | 添加 | Hset key filed1 value filed2.. | 往哈希表中添加一个或多个键值对 |
hmset | 等同hset | Hset key filed1 value filed2.. | 往哈希表中添加一个或多个键值对 |
hsetnx | 不存在则添加 | Hset key filed value | 哈希表不存在此filed则添加 |
hgetall | 查询全部 | Hgetall key | 返回哈希表中全部键值对 |
hget | 查询单个 | Hget key filed | 返回哈希表中单个filed的value值 |
hmget | 查询多个 | Hmget key filed1 filed2... | 返回哈希表中多个filed的value值 |
hlen | filed数量 | Hlen key | 返回哈希表中filed的数量 |
hkeys | 全部filed | Hkeys key | 返回哈希表中全部filed |
hvals | 全部value | Hvals key | 返回哈希表中全部value |
hexists | 判断是否存在 | Hexists key filed | 判断哈希表中 filed是否存在 |
hdel | 删除指定filed | Hdel key filed1 filed2... | 删除哈希表中指定的多个键值对 |
hincrby | +增量值 | Hincrby key filed [num] | 向哈希表中指定的整数filed执行 "+增量值" 操作 |
1、Hset 向哈希表中添加一对键值 (添加)
语法:
Hset key filed1 value [filed2 ...]
- # 1.添加单个field-value 到user1对象中 (键值对:name-wpf)
- [127.0.0.1:6379> hset user1 id 3
- (integer) 1
-
- # 查询user2
- [127.0.0.1:6379> hgetall user1
- 1) "id"
- 2) "3"
-
-
- # 2.添加多个field-value 到user2对象中 (键值对:name-wpf age-18)
- [127.0.0.1:6379> hset user2 name wpf age 18
- (integer) 2
-
- # 查询user2
- [127.0.0.1:6379> hgetall user2 # [hgetall key] 获取哈希表key中所有的键值对
- 1) "name"
- 2) "wpf"
- 3) "age"
- 4) "18"
2、Hsetnx 哈希表中不存在field,则添加 (不存在则添加)
语法:
Hsetnx key filed value
- # 添加一对键值(key-value)到 map1哈希表中 (nam-lisa)
- [127.0.0.1:6379> hset map1 name lisa
- (integer) 1
-
- # 1. 如果不存在name这个field,则添加,如果存在,就忽略此次操作
- 127.0.0.1:6379> hsetnx map1 name rose
- (integer) 0
-
- # 查询哈希表map1的所有键值(上述添加rose失败,因为存在name这个field了,即key已存在)
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
-
- # 2. 继续使用“不存在则添加”命令,往哈希表map1中添加键值对 age-20
- 127.0.0.1:6379> hsetnx map1 age 20
- (integer) 1
-
- # 查询哈希表map1的所有键值(age添加成功了)
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
3、Hget 查询哈希表中单个filed的value值 (查询单个filed的值)
语法:
Hget key filed
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1中指定的age的值
- 127.0.0.1:6379> hget map1 age
- "20"
4、Hmget 查询哈希表中多个filed的value值 (查询多个filed的值)
语法:
Hmget key filed1 filed2...
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1中 name和age的值
- 127.0.0.1:6379> hmget map1 name age
- 1) "lisa"
- 2) "20"
5、Hlen 查询哈希表中filed的数量 (查询filed数量)
语法:
Hlen key
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1 的filed数量(name、age)
- 127.0.0.1:6379> hlen map1
- (integer) 2
6、Hkeys 查询哈希表中所有的filed (查询全部filed)
语法:
Hkeys key
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1中所有的filed(即key)
- 127.0.0.1:6379> hkeys map1
- 1) "name"
- 2) "age"
-
8、Hvals 查询哈希表中所有的value值 (查询全部value)
语法:
Hvals key
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1中所有 filed的value值
- 127.0.0.1:6379> hvals map1
- 1) "lisa"
- 2) "20"
9、Hexists 查询哈希表中是否存在某个filed (判断是否存在filed)
语法:
Hexists key
- # 查询哈希表map1的所有键值
- 127.0.0.1:6379> hgetall map1
- 1) "name"
- 2) "lisa"
- 3) "age"
- 4) "20"
-
- # 查询哈希表map1中 是否存在filed为id的
- 127.0.0.1:6379> hexists map1 id
- (integer) 0 #不存在,返回0
-
- # 查询哈希表map1中 是否存在filed为name的
- 127.0.0.1:6379> hexists map1 name
- (integer) 1 #存在,返回1
10、Hdel 删除哈希表中指定的filed (删除filed)
语法:
Hdel key filed1 filed2 ...
- # 添加 [name-jack]、[age-28]、[id-5] 键值对到 map1哈希表中
- 127.0.0.1:6379> hmset map1 name jack age 28 id 5
- OK
-
- # 查询哈希表map1的所有键
- 127.0.0.1:6379> hkeys map1
- 1) "name"
- 2) "age"
- 3) "id"
-
- # 删除map1中的age、name
- 127.0.0.1:6379> hdel map1 age name
- (integer) 2
-
- # 查询哈希表map1的所有键 (只剩"id",另外两个已被删除)
- 127.0.0.1:6379> hkeys map1
- 1) "id"
11、Hincrby 删除哈希表中指定的filed (给某个整数添加增量值)
语法:
Hincrby key filed1 filed2 ...
- # 查询哈希表map1的所有键值对
- 127.0.0.1:6379> hgetall map1
- 1) "id"
- 2) "5"
-
- 给map1中的id键的值累加+3
- 127.0.0.1:6379> hincrby map1 id 3
- (integer) 8 #原始5,加3后等于8
-
- 给map1中的id键的值累加+1
- 127.0.0.1:6379> hincrby map1 id 1
- (integer) 9 #原始8,加1后等于9
优点:简单直观,将同类数据归类整合储存(同一个key),方便数据管理相比String储存更节省空间
缺点:要控制和减少 哈希 在 ziplist
和 hashtable
两种 内部编码 的 转换,hashtable
会消耗 更多内存。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。