Redis系列第三篇之Hash

前言

Redis的Hash是字符串类型的字段和字符串类型的值之间的映射,所以Hash是用于表示对象的完美数据类型(比如表示拥有名字、姓、年龄等的用户):

HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000

Redis以很少的空间存储拥有很少字段(其中很少意味着最多几百个)的Hash,所以可以在一个小型的Redis实例中存储数百万个对象。Hash除了主要用于表示对象,同样可以存储许多元素,所以Hash也可以用于其他任务。每个Hash可以存储2^32-1个键值对(超过4亿)。

下面一起来学习学习有关Hash的各种Redis命令吧!

HDEL key field [field ...]

  • 可用版本: v2.0.0开始
  • 历史: v2.4.0开始接受多个字段
  • 时间复杂度: O(N),N为需要被移除的field数量
  • 解释: 从key存储的Hash中移除指定的field,命令将会忽略Hash中不存在的field,如果key不存在,此命令将会视为空的Hash并且返回0
  • 返回值: Integer(整型),返回实际被移除的field数量,其中不包括指定但不存在的field

HEXISTS key field

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(1)
  • 解释: 返回field是否存在于key指定的Hash中
  • 返回值: Integer(整型),如果包含该字段返回1,如果不包含或者key不存在则返回0

HGET key field

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(1)
  • 解释: 返回key对应的Hash中字段field的值
  • 返回值: Bulk String(批量字符串),返回与field关联的值,如果key不存在或者Hash不包含该field则返回nil

HGETALL key

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(N),N为Hash的大小
  • 解释: 返回存储在key中的Hash的所有字段和值,在返回值中,每个字段后面都紧随着它的值,所以回复的长度是Hash大小的两倍
  • 返回值: Array(数组),返回field和value组成的数组,如果key不存在则返回空的列表

HINCRBY key field increment

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(1)
  • 解释: 对存储在key中的Hash数据的指定字段的值增加increment,如果key不存在,将会创建一个新的持有Hash类型的key。如果field不存在,则在执行操作前会将该field的值置为0。HINCRBY支持的值范围为64位有符号整数
  • 返回值: Integer(整型),返回执行加法操作后的field值

HINCRBYFLOAT key field increment

  • 可用版本: v2.6.0开始
  • 时间复杂度: O(1)
  • 解释: 对Hash中指定的且表示浮点数的字段field增加指定的增量。如果增量为负,则为减法。如果field不存在,则在执行操作前会先将field置为0,如果发生以下情形之一,将会返回错误:
    • field包含一个错误类型的值(非string)
    • field当前的值或者指定的增量无法表示为一个浮点型数值
  • 返回值: Bulk String(批量字符串),返回加操作后的field值

HKEYS key

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(N),N为Hash的大小
  • 解释: 返回存储在key中的Hash结构的所有字段名
  • 返回值: Array(数组),返回字段名组成的数组,如果key不存在则返回一个空的数组

HLEN key

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(1)
  • 解释: 返回存储在key中的Hash结构中包含的字段数量
  • 返回值: Integer(整型),返回指定Hash的字段数

HMGET key field [field ...]

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(N),N为请求的字段数
  • 解释: 返回指定字段的值
  • 返回值: Array(数组),返回由指定字段的值组成的列表,返回顺序与请求顺序一致。对于不存在的字段,将会返回nil;如果key不存在,将会返回nil

HMSET key field value [ field value ...]

  • 可用版本: v2.0.0开始,从v4.0.0开始,此命令被视为废弃
  • 时间复杂度: O(N),N为被设置的字段数量
  • 解释: 设置指定字段为指定的值,此命令将会覆盖任何已经存在的字段;如果key不存在将会创建一个新的持有Hash类型的key
  • 返回值: Simple String(简单字符串)

HRANDFIELD key [ count [WITHVALUES]]

  • 可用版本: v6.2.0开始
  • 时间复杂度: O(N),N为返回的字段数量
  • 解释: 当只用key参数调用命令时,将会从Hash中返回一个随机的字段。如果提供的count参数为正,将会返回由去重字段组成的数组,数组长度为count和Hash大小的最小值;如果count为负,命令将允许返回同一个字段多次,这种情况下,返回的字段数为count的绝对值。如果提供了WITHVALUES选项,将同时返回字段的值。
  • 返回值:
    • Bulk String(批量字符串):没有指定count参数,命令将会返回随机字段,如果key不存在则返回nil
    • Array(数组):当指定count参数时,命令返回字段名组成的数组,key不存在时返回空的数组。指定WITHVALUES选项时,回复将是有字段和值组成的列表

HSCAN key cursor [MATCH pattern] [COUNT count]

  • 可用版本: v2.8.0
  • 历史: v6.0.0开始支持TYPE子命令
  • 时间复杂度: 每次调用O(1)。O(N)用于完整的迭代,包括足够的命令调用以使光标返回0,N是集合内的元素数
  • 解释: 用于增量迭代字段以及对应的值
    • COUNT选项:默认值为10,指定每次调用时应该完成的工作量
    • MATCH选项:匹配给定模式的元素
  • 返回值: Array(数组),数组由两个元素组成:第一个元素为此次迭代后的cursor值;第二个元素为field-value组成的数组,格式为每个字段名后紧跟其字段值

HSET key field value [ field value ...]

  • 可用版本: v2.0.0开始
  • 历史: v4.0.0开始接收多个field和value参数
  • 时间复杂度: O(N),N为请求的field-value数量
  • 解释: 设置一个或者多个field-value键值对。如果key不存在,首先会创建一个Hash类型的key,如果key已经存在,则会覆盖其值
  • 返回值: Integer(整型),返回添加的字段数量

HSETNX key field value

  • 可用版本: v2.0.0开始
  • 时间复杂度: O(1)
  • 解释: 只有当字段不存在时才设置字段的值;如果key不存在,将会创建一个新的Hash类型的key,如果字段早已存在,命令将不会产生影响。
  • 返回值: Integer(整型),如果设置成功返回1,否则返回0

HSTRLEN key field

  • 可用版本: v3.2.0开始
  • 时间复杂度: O(1)
  • 解释: 返回存储在key中的Hash的指定字段对应的字符串值的长度,如果key或者field不存在将会返回0
  • 返回值: Integer(整型),与field关联的值的长度,key不存在或者field不存在时都返回0

HVALS key

  • 可用版本: v2.0.0
  • 时间复杂度: O(N),N为Hash的大小
  • 解释: 返回key对应Hash的所有字段值
  • 返回值: Array(数组),返回由所有Hash字段值组成的数组,key不存在时返回空数组

参考资料

Redis Hash

原文连接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容