Redis学习笔记【05】 - 哈希

一、简介

几乎所有的语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},Redis键值对和哈希类型二者的关系可以如下图表示:

Tip:哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value在不同上下文的作用。

二、命令

1、设置值

hset key field value

下面为user:1添加一对于field-value:

127.0.0.1:6379> hset user:1 name nosee
(integer) 1

如果设置成功会返回1,反之会返回0。此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

2、获取值

hget key field

如:

127.0.0.1:6379> hget user:1 name
"nosee"

如果field不存在则会返回nil:

127.0.0.1:6379> hget user:2 name
(nil)
127.0.0.1:6379> hget user:1 age
(nil)

3、删除field

hdel key field [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数,如:

127.0.0.1:6379> hdel user:1 name
(integer) 1
127.0.0.1:6379> hdel user:1 age
(integer) 0

4、计算field个数

hlen key

如:

127.0.0.1:6379> hset user:1 name nosee
(integer) 1
127.0.0.1:6379> hset user:1 age 17
(integer) 1
127.0.0.1:6379> hset user:1 city shenzhen
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 3

5、批量设置或获取filed-value

hmget key field [field ...]
hmset key field value [field value ...]

如:

127.0.0.1:6379> hmset user:1 name nosee age 27 city HK
OK
127.0.0.1:6379> hmget user:1 name city
1) "nosee"
2) "HK"

6、判断filed是否存在

hexists key field

例如,user:1包含name域,所以返回结果1,不包含sex域所以返回0:

127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 sex
(integer) 0

7、获取所有filed

hkeys key

如:

127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "city"

8、获取所有value

hvals key

如:

127.0.0.1:6379> hvals user:1
1) "nosee"
2) "27"
3) "HK"

9、获取所有field-value

hgetall key

如:

127.0.0.1:6379> hgetall user:1
1) "name"
2) "nosee"
3) "age"
4) "27"
5) "city"
6) "HK"

Tip:在使用 hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要全部获取field-value,可以使用 hscan命令,该命令会渐进式遍历哈希类型,hscan将在后面章节介绍。

10、hincrby hincrbyfloat

hincrby key field increment
hincrbyfloat key field increment

hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是field,如:

127.0.0.1:6379> hget user:1 age
"27"
127.0.0.1:6379> hincrby user:1 age 2
(integer) 29
127.0.0.1:6379> hincrbyfloat user:1 age 0.5
"29.5"

11、计算value的字符串长度(需要Redis3.2以上)

hstrlen key field

如:

127.0.0.1:6379> hget user:1 name
"nosee"
127.0.0.1:6379> hstrlen user:1 name
(integer) 5

三、哈希类型命令时间复杂度

命令 时间复杂度
hset key field value O(1)
hget key field O(1)
hdel key field [field ...] O(k),k是field的个数
hlen key O(1)
hgetall key O(n),n是field的总数
hmget key field [field ...] O(k),k是field的个数
hmset key field value [field value ...] O(k),k是field的个数
hexists key field O(1)
hkeys key O(n),n是field的总数
hvals key O(n),n是field的总数
hsetnx key field value O(1)
hincrby key field increment O(1)
hincrbyfloat key field increment O(1)
hstrlen key field O(1)

参考:

《Redis开发与运维》 付磊 & 张益军

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

推荐阅读更多精彩内容

  • Ubuntu下安装redis 安装redis 在 Ubuntu 系统安装 Redi 可以使用以下命令: 启动 Re...
    riverstation阅读 928评论 0 0
  • Redis从入门到精通:中级篇 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二...
    叨唧唧的阅读 680评论 0 0
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    团长plus阅读 1,256评论 0 15
  • “手续都办好了嘛?”“嗯,就是走个流程”“那你以后还会在来学校嘛?”“应该会吧,来看看你们”大山退学了。大山从未对...
    goLoxzm阅读 308评论 0 2
  • 今天我班同学李孝帅,薛晓茹,邹心怡,尹菲参加了学校组织的交通疏导活动。 保障同学和路人的安全,为同学们指引正确的方向。
    卫校一七护六阅读 133评论 0 0