开发者学堂课程【Redis 数据库入门:Redis_列表_Hash 散列操作_3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/15/detail/51
Redis_列表_Hash 散列操作_3
内容介绍:
一、Hash 散列
二、命令
三、Hash 用途
一、Hash 散列
由 field 和关联的 value 组成的 map 键值对
Field 和 value 是字符串类型
一个 hash 中最多包含2^32-1键值对
Hash 散列是我们工作中经常使用的一种结构,很多的业务设计就可以参考这个设计。
二、命令
1.设置单个字段
HSET
key
field
value
HSETNX
key
field
value
key 的 field 不存在的情况下执行,key 不存在直接创建
NX 代表的是 non-existent 不存在,key 的 field 不存在的情况下执行,key 不存在就直接创建。
比如说,输入 HSET chenbo qq 123,有 HSET 可能会有 HGET,HGET chenbo 不行,结果报错,再输入help hget,我们发现它需要 key 和 field。
我们可以通过输入hget chenbo qq获取“123”
2.设置多个字段
HMSET
key
field
value
[field value…]
注意,这种操作具有原子性。
3.返回字段个数
H
LEN key
4.判断字段是否存在
H
EXISTS key field
Key 或者 field 不存在,返回0
5.返回字段值
HGET
key
field
6.返回多个字段值
HMGET
key
field
[field…]
7.返回所有的键值对
H
GETALL key
HGETALL 得出的结果不是同一级别的,第一个是 field,二是 value,第三和第一个一样,下一个是 value。
8.返回所有字段名
H
KEYS key
9.返回所有值
HVALS
key
10.在字段对应的值上进行整数的增量计算
H
INCRBY key field increment
11.在字段对应的值上进行浮点数的增量计算
H
INCRBYFLOAT key field increment
12.删除指定的字段
H
DEL key field [field…]
可以同时删除多个,我们来试验一下,先输入 hset chendo lover xuruyun,再输入hdel chenbo lover,如下图:
二、Hash用途
1.节约内存空间
2.每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等)
3.所以数据库里面的键越多,redis 数据库服务器在储存附加管理信息方面耗费的内存就越多,花在管理数据库键上的 CPU 也会越多在字段对应的值上进行浮点数的增量计算
下面举了一个例子,我们用多个 key 是可行的,但是它不如后一种方法,
如图:
但第二种方法也有它的局限性,设置过期时间只能在 key 上设置。
4.不适合 hash 的情况
⑴使用二进制操作命令:因为 Redis 目前支持对字符串进行 SETBIT、GETBIT、BITOP 等操作,如果你想使用这些操作,那么只能使用字符串键,虽然散列也能保存二进制数据
⑵使用过期键功能:Redis 的键过期功能目前只能对键进行过期操作,而不能对散列的字段进行过期操作,因此如果你要对键值对数据使用过期功能,那么你能把键值对储存在字符串里面
举例:
微博的好友关注
用户ID为key,field为好友ID,value 为关注时间
user:1
000
user:6
06 20150808
user:1000代表的是 key,user:606是 field
用户维度统计
统计数包括:关注数、粉丝数、喜欢商品数、发帖数
用户为 key,不同维度为 field,value 为统计数
比如关注了5个人
HSET
user:1
00000
follow
5
如果粉丝数又增加了一个,操作如下:
HINCRBY
user:1
00000
follow
1
所有关于这个人的统计数用一个散列就可以完成。