今天讲redis中的hash数据类型,其实这种类型是Map的集合,相当于key-map。使用的java的同学应该都使用这样子的数量类型 Map>,hash类型就是这种结构。
具体的存储的数据格式如下:
[key] [field] [value]mykey1 name zhangsan
hash的命令操作和String类型非常像,只不过hash的操作命令都是以h开头的
下面以一个用户博客的每天访问量、粉丝数、关注量为例
设置和获取值
Hset [key] [field] [value]:设置值
Hget [key] [field] :获取值
Hmset [key] [field] [value] [field2] [value2] :批量设置值
Hmget [key] [field1] [field2] :批量获取值
Hgetall [key] :获取所有属性
本机:0>hset user1 view 1 #设置用户user1的访问量为 1"1"本机:0>hset user1 fans 5"1"本机:0>hget user1 view #获取用户的访问量"1"本机:0>hget user1 fans"5"本机:0>hmset user1 view 10 fans 15 #批量设置用户的信息"OK"本机:0>hmget user1 view fans #批量获取用信息 1) "10" 2) "15"本机:0>hgetall user1 #获取用户user1的全部属性 1) "view" 2) "10" 3) "fans" 4) "15"
删除操作
Hdel [key] [field]:删除指定key的中的字段
本机:0>hgetall user1 1) "view" 2) "10" 3) "fans" 4) "15"本机:0>hdel user1 view #删除user1中的访问量view属性值"1"本机:0>hgetall user1 1) "fans" 2) "15"
获取长度
Hlen [key]:获取hash中属性数量
本机:0>hgetall user1 1) "fans" 2) "15" 3) "wiew" 4) "13"本机:0>hlen user1 #获取到user1中有两个属性"2"
判断是否存在
Hexists [key] [field] :判断某个key中的属性是否存在
本机:0>hgetall user1 1) "fans" 2) "15" 3) "wiew" 4) "13"本机:0>hexists user1 fans"1"本机:0>hexists user1 test"0"
只获取key值和只获取value值
Hkeys [key]:只获取hash中的key值
Hvals [key]:只获取hash中的value值
本机:0>hkeys user1 1) "fans" 2) "wiew"本机:0>hvals user1 1) "15" 2) "13"
String中的是不是自增和判断是否存在,不存在则设置值,自然hash中也有这样的命令。
本机:0>keys * 1) "user1"本机:0>hgetall user1 1) "fans" 2) "22" 3) "wiew" 4) "13"本机:0>hincrby user1 fans 6 #设置user1的粉丝数增加6个"28"本机:0>hsetnx user1 test1 hello #如果字段test1不存在则设置值为hello,存在则不设置"1"本机:0>hgetall user1 1) "fans" 2) "28" 3) "wiew" 4) "13" 5) "test1" 6) "hello"本机:0>hsetnx user1 test1 hello2"0"
总结
Hash类型数据适合存储对象,例如用户的信息,用上面的例子。相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型类,占用更小的内存空间,并方便存取整个对象。用户表user,id为1的粉丝数为1000个,则可以这样子设计,user:1 fans 1000
即hset user:1 fans 1000
------------------------------------------------END-----------------------------------------------------------------
你的一个赞一个关注是我创作的动力,是我持续输出的能量源泉,老铁关注一波吧!