redis数据类型-散列类型
Redis数据类型
散列类型
Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。
一个散列类型键可以包含至多232-1个字段。首先232-1的意思是2的32次方-1也就是大概四亿键值对。设计成这个样子可能是因为当时的操作系统以32位为主。
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。例如要存储ID为2的汽车对象,可以分别使用名为color、 name和price的3个字段来存储该辆汽车的颜色、名称和价格。
提示:除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。
赋值与取值
HSET key field value
HGET key field
HMSET key field value [field value …]
HMGET key field [field …]
HGETALL key
HSET命令用来给字段赋值,而HGET命令用来获得字段的值。用法如下:
redis> HSET car price 500
(integer) 1
redis> HSET car name BMW
(integer) 1
redis> HGET car name
"BMW"
- HSET命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作(update)还是更新操作(insert)。
- 当执行的是插入操作时(即之前字段不存在) HSET命令会返回1,当执行的是更新操作时(即之前字段已经存在) HSET命令会返回0。
- 更进一步,当键本身不存在时, HSET命令还会自动建立它。
提示在 Redis中每个键都属于一个明确的数据类型,如通过HSET命令建立的键是散列类型,通过SET命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误:“ERR Operation against a key holding the wrong kind of value”①。
注释:①并不是所有命令都是如此,比如SET命令可以覆盖已经存在的键而不论原来键是什么类型。同时设置多个字段需要同时设置多个字段的值时,可以使用HMSET命令。例如,下面两条语句
HSET key field1 value1
HSET key field2 value2
可以用HMSET命令改写成
HMSET key field1 value1 field2 value2
相应地, HMGET命令可以同时获得多个字段的值:
redis> HMGET car price name
1) "500"
2) "BMW"
如果想获取键中所有字段和字段值却不知道键中有哪些字段时(如3.3.1节介绍的存储汽
车对象的例子,每个对象拥有的属性都未必相同)应该使用HGETALL命令。如:
redis> HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"
判断字段是否存在
- HEXISTS key field
- HEXISTS命令用来判断一个字段是否存在。如果存在则返回1,否则返回0(如果键不存在
也会返回0)。
redis> HEXISTS car model
(integer) 0
redis> HSET car model C200
(integer) 1
redis> HEXISTS car model
(integer) 1
当字段不存在时赋值
- HSETNX key field value
- HSETNX①命令与HSET命令类似,区别在于如果字段已经存在, HSETNX命令将不执行任何操作。
增加数字
HINCRBY key field increment
字符串类型的命令INCRBY与HINCRBY命令类似,可以使字段值增加指定的整数。散列类型没有HINCR命令,但是可以通过HINCRBY keyfield 1来
实现。
HINCRBY命令的示例如下:
redis> HINCRBY person score 60
(integer) 60
之前person键不存在, HINCRBY命令会自动建立该键并默认score字段在执行命令前的值
为“0”。命令的返回值是增值后的字段值。
删除字段
HDEL key field [field …]
HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数:
redis> HDEL car price
(integer) 1
redis> HDEL car price
(integer) 0
只获取字段名或字段值
HKEYS key
HVALS key
有时仅仅需要获取键中所有字段的名字而不需要字段值,那么可以使用HKEYS命令,就
像这样:
redis> HKEYS car
1) "name"
2) "model"
HVALS命令与HKEYS命令相对应, HVALS命令用来获得键中所有字段值,例如:
redis> HVALS car
1) "BMW"
2) "C200"
获得字段数量
HLEN key
例如:
redis> HLEN car
(integer) 2
redis数据类型-散列类型的更多相关文章
- redis之(五)redis的散列类型的命令
[一]赋值与取值 -->命令:HSET key field value -->往某个key的某个属性设置值 -->命令:HGET key field --> 获取某个k ...
- Redis 四:存储类型之散列类型
1.散列类型表达方式简介: =========================================== 键 字段 值 =================================== ...
- Redis数据类型之散列类型hash
在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ...
- Redis命令拾遗二(散列类型)
本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明原文地址 :博客园蜗牛NoSql系列地址 http://www.cnblogs.com/tdws/tag/NoSql/ Redis命令拾 ...
- Redis常用命令入门2:散列类型
散列命令 散列类型的键值其实也是一种字典解耦,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,所以说散列类型不能嵌套其他的数据类型.一个散列类型的键可以包含最多2的32次方-1个 ...
- Redis自学笔记:3.3入门-散列类型
3.3散列类型 3.3.1介绍 散列类型不能嵌套其他数据类型,一个散列类型可以包含至多232-1个字段 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的数据, 而字段值则存储属性值 ...
- Redis从基础命令到实战之散列类型(Hash)
从上一篇的实例中可以看出,用字符串类型存储对象有一些不足,在存储/读取时需要进行序列化/反序列化,即时只想修改一项内容,如价格,也必须修改整个键值.不仅增大开发的复杂度,也增加了不必要的性能开销. 一 ...
- Redis 入门 3.3 散列类型
3.3.1 介绍 散列类型(hash)的键值也是一种字典结构,其储存了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型.一个散列 ...
- 7、python基本数据类型之散列类型
前言:python的基本数据类型可以分为三类:数值类型.序列类型.散列类型,本文主要介绍散列类型. 一.散列类型 内部元素无序,不能通过下标取值 1)字典(dict):用 {} 花括号表示,每一个元素 ...
随机推荐
- 跟我一起读postgresql源码(十)——Executor(查询执行模块之——Scan节点(下))
接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_Fun ...
- JavaScript基础知识(数组)
21.数组 定义数组 * 字面量方式 var 数组名称 = [ value,value,... ] * 构造函数方式 var 数组名称 = new Array(value,value,...): ...
- hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)
题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...
- JavaScript字符串转换成数字的三种方法
在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...
- Parade(单调队列优化dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others) ...
- UEP-级联查询
级联查询在UEP中采用动态下拉的形式,cascadeid为关键字,注意jsp页面的id的相互嵌套关系,数据库字段的数值的设置,和动态下拉SQL语句的书写.本功能实现了省市区的三级联动查询
- [国嵌攻略][054][NandFlash驱动设计_写]
Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写.闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除. /************** ...
- jquery1.8 在IE8 下面报错:对象不支持此属性或方法 return b.getAttribute("id")===a
jquery1.8 在IE8 下面报错: 对象不支持此属性或方法 调试发现是下面这一行报错: 在IE8下面报错,在chrome和firefox都是好的. 实在找不到原因,最后把源码改成下面这样: 没有 ...
- 根据PV统计出前三的热门板块,并统计出热门板块下的用户数--方式一
根据PV统计出前三的热门板块,并统计出热门板块下的用户数--方式一 测试数据 java代码 package com.hzf.spark.study; import java.util.ArrayLis ...
- Visual SVN Server启动失败0x8007042a错误
载. 今天在程序VisualSVNServer界面中启动服务时,报错如下: VisualSVNServerServer service failed to start:服务已返回特定的服务 ...