一、概述:

我们可以将Redis中的Hashes类型看成具有String
Key和String
Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

二、相关命令列表:

命令原型

时间复杂度

命令描述

返回值

HSET key
field value

O(1)

为指定的Key设定Field/Value对,如果Key不存在,该命令将创建新Key以参数中的Field/Value对,如果参数中的Field在该Key中已经存在,则用新值覆盖其原有值。

1表示新的Field被设置了新值,0表示Field已经存在,用新值覆盖原有值。

HGET key
field

O(1)

返回指定Key中指定Field的关联值。

返回参数中Field的关联值,如果参数中的Key或Field不存,返回nil。

HEXISTS key
field

O(1)

判断指定Key中的指定Field是否存在。

1表示存在,0表示参数中的Field或Key不存在。

HLEN key

O(1)

获取该Key所包含的Field的数量。

返回Key包含的Field数量,如果Key不存在,返回0。

HDEL key
field [field ...]

O(N)

时间复杂度中的N表示参数中待删除的字段数量。从指定Key的Hashes
Value中删除参数中指定的多个字段,如果不存在的字段将被忽略。如果Key不存在,则将其视为空Hashes,并返回0.

实际删除的Field数量。

HSETNX key
field value

O(1)

只有当参数中的Key或Field不存在的情况下,为指定的Key设定Field/Value对,否则该命令不会进行任何操作。

1表示新的Field被设置了新值,0表示Key或Field已经存在,该命令没有进行任何操作。

HINCRBY key
field increment

O(1)

增加指定Key中指定Field关联的Value的值。如果Key或Field不存在,该命令将会创建一个新Key或新Field,并将其关联的Value初始化为0,之后再指定数字增加的操作。该命令支持的数字是64位有符号整型,即increment可以负数。

返回运算后的值。

HGETALL key

O(N)

时间复杂度中的N表示Key包含的Field数量。获取该键包含的所有Field/Value。其返回格式为一个Field、一个Value,并以此类推。

Field/Value的列表。

HKEYS key

O(N)

时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Fields名。

Field的列表。

HVALS key

O(N)

时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Values名。

Value的列表。

HMGET key
field [field ...]

O(N)

时间复杂度中的N表示请求的Field数量。获取和参数中指定Fields关联的一组Values。如果请求的Field不存在,其值返回nil。如果Key不存在,该命令将其视为空Hash,因此返回一组nil。

返回和请求Fields关联的一组Values,其返回顺序等同于Fields的请求顺序。

HMSET key
field value [field value ...]

O(N)

时间复杂度中的N表示被设置的Field数量。逐对依次设置参数中给出的Field/Value对。如果其中某个Field已经存在,则用新值覆盖原有值。如果Key不存在,则创建新Key,同时设定参数中的Field/Value。

三、命令示例:

1.
HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:
  
 #
Shell命令行启动Redis客户端程序
  
 /> redis-cli
  
 #
给键值为myhash的键设置字段为field1,值为stephen
  
 redis 127.0.0.1:6379> hset
myhash field1 "stephen"

  
 (integer) 1
  
 #
获取键值为myhash,字段为field1的值。
  
 redis 127.0.0.1:6379> hget
myhash field1

  
 "stephen"
  
 #myhash
键中不存在field2字段,因此返回nil
  
 redis 127.0.0.1:6379> hget
myhash field2

  
 (nil)
  
 #
myhash关联的Hashes值添加一个新的字段field2,其值为liu
  
 redis 127.0.0.1:6379> hset
myhash field2 "liu"

  
 (integer) 1
  
 #
获取myhash键的字段数量。
  
 redis 127.0.0.1:6379> hlen
myhash

  
 (integer) 2
  
 #
判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1
  
 redis 127.0.0.1:6379> hexists
myhash field1

  
 (integer) 1
  
 #
删除myhash键中字段名为field1的字段,删除成功返回1
  
 redis 127.0.0.1:6379> hdel
myhash field1

  
 (integer) 1
  
 #
再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有删除,返回0
  
 redis 127.0.0.1:6379> hdel
myhash field1

  
 (integer) 0
  
 #
判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0
  
 redis 127.0.0.1:6379> hexists
myhash field1

  
 (integer) 0
  
 #
通过hsetnx命令给myhash添加新字段field1,其值为stephen,因为该字段已经被删除,所以该命令添加成功并返回1
  
 redis 127.0.0.1:6379> hsetnx
myhash field1 stephen

  
 (integer) 1
  
 #
由于myhashfield1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0
  
 redis 127.0.0.1:6379> hsetnx
myhash field1 stephen

  
 (integer) 0

2.
HINCRBY:
  
 #
删除该键,便于后面示例的测试。
  
 redis 127.0.0.1:6379> del
myhash

  
 (integer) 1
  
 #
准备测试数据,该myhashfield字段设定值1
  
 redis 127.0.0.1:6379> hset
myhash field 5

  
 (integer) 1
  
 #
myhashfield字段的值加1,返回加后的结果。
  
 redis 127.0.0.1:6379> hincrby
myhash field 1

  
 (integer) 6
  
 #
myhashfield字段的值加-1,返回加后的结果。
  
 redis 127.0.0.1:6379> hincrby
myhash field -1

  
 (integer) 5
  
 #
myhashfield字段的值加-10,返回加后的结果。
  
 redis 127.0.0.1:6379> hincrby
myhash field -10

  
 (integer) -5

3.
HGETALL/HKEYS/HVALS/HMGET/HMSET:
  
 #
删除该键,便于后面示例测试。
  
 redis 127.0.0.1:6379> del
myhash

  
 (integer) 1
  
 #
为该键myhash,一次性设置多个字段,分别是field1
= "hello", field2 = "world"

  
 redis 127.0.0.1:6379> hmset
myhash field1 "hello" field2 "world"

  
 OK
  
 #
获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil
  
 redis 127.0.0.1:6379> hmget
myhash field1 field2 field3

  
 1) "hello"
    2) "world"
  
 3) (nil)
  
 #
返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。
  
 redis 127.0.0.1:6379> hgetall
myhash

  
 1) "field1"
    2) "hello"
  
 3) "field2"
    4) "world"
  
 #
仅获取myhash键中所有字段的名字。
  
 redis 127.0.0.1:6379> hkeys
myhash

  
 1) "field1"
    2) "field2"
  
 #
仅获取myhash键中所有字段的值。
  
 redis 127.0.0.1:6379> hvals
myhash

  
 1) "hello"
    2) "world"

转载:http://www.cnblogs.com/stephen-liu74/archive/2012/03/19/2352932.html

Redis学习之路(006)- Redis学习手册(Hashes数据类型)的更多相关文章

  1. Redis 学习之路 (010) - redis命令手册

    Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...

  2. Redis学习手册(Hashes数据类型)

    一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Ag ...

  3. Redis 学习之路 (011) - redis 多数据库

    一台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的 ...

  4. python 操作exls学习之路1-openpyxl库学习

    这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...

  5. Vue学习之路8-v-on指令学习简单事件绑定之属性

    前言 上一篇文章以v-on指令绑定click事件为例介绍了v-on指令的使用方法,本文介绍一下v-on绑定事件的一些属性的使用方法. v-on绑定指令属性 .stop属性 阻止单击事件继续向上传播(简 ...

  6. Vue学习之路7-v-on指令学习之简单事件绑定

    前言 在JavaScript中任何一个DOM元素都有其自身存在的事件对象,事件对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置和鼠标按钮的状态等.事件通常与函数结合使用,函数不 ...

  7. 我的Python学习之路 Python的输入输出与基本数据类型

    *** python中的变量不需要事先声明再使用,而可以直接来一个变量名,后面一个赋值,接着一个数据值,如 hw = "hello python",相当于Python能智能的根据你 ...

  8. Android开发学习之路-回调机制学习笔记

    不知道是我学Java的时候没有认真听还是怎么的,曾经一直不知道什么是“回调”,它有什么用,百度一大堆,都太复杂看不明白(好吧是我笨),所以想把自己理解的分享给其他看到的人,大家都真正认识一下这个重要的 ...

  9. 前端学习之路CSS基础学习二

    CSS属性相关 样式操作: (1)width:为元素设置宽度 (2)height:为元素设置高度 ps:块儿级标签才能设置长宽行内标签设置长宽没有任何影响 p{ width: 30px; height ...

随机推荐

  1. 【Java】Java-XML解析利器-SAX-高性能-易用

    Java-XML解析利器-SAX-高性能-易用 java xml 大_百度搜索 (3)java处理比较大的xml文件 - SegmentFault How to read UTF-8 XML file ...

  2. (转)HLSL,函数列表

    中文列表 函数名 说明 abs 计算输入值的绝对值. acos 返回输入值反余弦值. all 测试非0值. any 测试输入值中的任何非零值. asin 返回输入值的反正弦值. atan 返回输入值的 ...

  3. Direct2D教程VIII——几何(Geometry)对象的运算,本系列的终结篇

    目前博客园中成系列的Direct2D的教程有 1.万一的 Direct2D 系列,用的是Delphi 2009 2.zdd的 Direct2D 系列,用的是VS中的C++ 3.本文所在的 Direct ...

  4. 微服务架构实践 - 你只懂docker与spring boot就够了吗?

    微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...

  5. 【DB】部分MySQL操作记录

    工作中涉及到部分统计工作,恰好把之前的有些SQL再熟悉回顾一下. 一.涉及到时间统计部分: 求时间差: ), (SELECT CURDATE())) AS '试用时间'; ), (SELECT CUR ...

  6. JS base64加解密解决传输的url各种编码问题

    网上拷贝的,废话少说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  7. ajax 与springmvc交互返回数据

    1.controller将数据封装成json格式返回页面 @RequestMapping("/dataList") public void datalist(CsoftCunsto ...

  8. javascript数字转大写

    万亿级别,这个还有bug的 function money2Uppercase(num) { var m = parseInt(num); var ml = (m.toString()).split(' ...

  9. top命令参数

    参数说明 d 指定每两次屏幕信息刷新之间的时间间隔.当然用户可以使用s交互命令来改变之. p 通过指定监控进程ID来仅仅监控某个进程的状态. q该选项将使top没有任何延迟的进行刷新.如果调用程序有超 ...

  10. 关于Android中50M+的文本入库处理细节

    好久没有写技术文章,明早4点还要爬起来赶飞机,感觉这个坑有必要记录一下,以慰藉一下自己脆弱的灵魂.周一和周二忙了2天的样子才解决这个问题,中间填了不少的坑,反正已经夜深了,慢慢地记录一点. 场景:项目 ...