Redis系列-4.哈希(Hash)结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hjkl950217/article/details/78039691

#Redis系列-4.哈希(Hash)结构
文章中可能有地方描述偏差,欢迎留言指证


##1.基本
hash是第二种redis结构,在编程语言中非常常见。在redis里,哈希又是另一种键值对结构。redis本身就是key-value型,哈希结构相当于在value里又套了一层kv型数据。哈希和C#里的字典,java里的map结构是一样的。

假如输入命令 hset testKey testField testValue(效果如图)
在这里插入图片描述

##2.常用命令
下面所有描述里 {}都是必需参数,<>是可选参数

####设置值
hset {key} {field} {value}
key:键名
field:哈希结构中的键名
value:哈希结构中的键名对应的值

注意,这里只能设置一条。如果要设置多条,用 hmset命令 hset {key} {field} {value} [{field} {value}…]

####获取值
hget {key} {field}
如果不存在,会返回nil。
这里第一个key是找到这个哈希结构的数据,第二个参数field是取里面对应的值。
当返回nil时,是里面的这一个值不存在,而不是这个哈希结构数据不存在

批量获取用hmget
这里写图片描述

获取和设置如下图
这里写图片描述

####统计field个数
hlen {key}

####判断field是否存在
hexists {key} {field}
这里判断的是哈希中存不存在,而不是判断这一整条哈希数据存在。如果要判断这一整条数据是否存在,用exists

####遍历哈希结构
遍历键
hkeys {key}
这里写图片描述

遍历值
hvals {key}
这里写图片描述

遍历键和值
hgetall {key}
这里写图片描述

使用时,这个命令会遍历所有的,当数据量大时会阻塞redis。redis是单线程程序,只要阻塞就会一直卡住,所以在线上环境不要使用。

3.不常用命令

####自增、自减
hincrby {key} {field}
hincrbyfloat {key} {field}
和上一节讲的incrby incrbyfloat一样,只是这里的作用在哈希数据的值上面。

4.内部编码

有两种:
ziplist:
内部更加紧凑。
当键的个数小于hash-max-ziplist-entries(默认512)的配置时
同时所有值小于hash-max-ziplist-value(默认64)的配置时
才会使用ziplist
hashtable:
当不能使用ziplist时,就会使用这个结构,因为不满足上面两个条件时,ziplist的读写效率会降低。而hashtable的读写时间复杂度为O(1)。

5.适合场景

1.存对象信息

但使用hash存对象的信息时要注意避免在ziplist和hashtable之间进行转换。hashtabl会消耗更多的内存。

猜你喜欢

转载自blog.csdn.net/hjkl950217/article/details/78039691