NoSQL之Redis对数据类型hash的操作

原创 2013年12月02日 08:48:25

一、简介

Redishash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合存储对象,将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

二、具体操作

1.hset hashkey filed value:设置一个名为hashkey的hash表里面field的指定值为value,如果key不存在,则自动创建。若设置成功返回integer 1否则返回错误信息。

127.0.0.1:6379> hset hashkey1 field1 value1
(integer) 1

127.0.0.1:6379> hget hashkey1 field1
"value1"

类似一张表里只能操作一个字段,可以设置这个字段的值,或者取这个字段的值。

2.hget hashkey field:获取hashkey的hash表中field的value值

127.0.0.1:6379> hget hashkey1 field1
"value1"

3.hsetnx hashkey field value:设置hashkey field为指定value值,如果key不存在,那么先创建,返回interger 1。如果存在则返回integer 0。(创建不成功)

127.0.0.1:6379> hsetnx hashkey2 f2 v2
(integer) 1
127.0.0.1:6379> hget hashkey2 f2
"v2"
127.0.0.1:6379> hsetnx hashkey2 f2 v22
(integer) 0
127.0.0.1:6379> hget hashkey2 f2
"v2"

上面的操作,首先用hsetnx设置hashkey2里f2对应的值为v2,返回integer 1证明设置成功,然后获取这个值为v2是正确的。接着继续对已经存在的hashkey2里的f2设置新值v22,这个时候返回integer 0 证明是失败的。再用hget获取这个值发现还是v2并没有改变。

127.0.0.1:6379> hsetnx hashkey2 f3 v3
(integer) 1
127.0.0.1:6379> hget hashkey2 f3
"v3"

通过上面的操作我们可以看到这个nx是来限定hashkey中的field的,与hashkey没有关系,一个hashkey可以设置无数多个field。

4.hmset hashkey field1 value1 field2 value2 field3 value3....:同时设置hashkey中的多个field值。

127.0.0.1:6379> hmset hashkey1 f1 v1 f2 v2 f3 v3
OK
127.0.0.1:6379> hget hashkey1 f1
"v1"
127.0.0.1:6379> hget hashkey1 f2
"v2"
127.0.0.1:6379> hmset hashkey1 f1 v11 f2 v22
OK
127.0.0.1:6379> hget hashkey1 f1
"v11"
127.0.0.1:6379> hget hashkey1 f2
"v22"

通过上面的命令操作很容易理解这个命令的作用,注意的一点就是,这个命令可以覆盖已经存在field的value值,可以设置新的newvalue。

5.hmget hashkey field1 field2 field3...:批量获取hashkey里的field值

127.0.0.1:6379> hmget hashkey1 f1 f2 f3
1) "v11"
2) "v22"
3) "v3"

6.hincrby hashkey field count:对hashkey里的field值增加count。成功返回相加后的值,失败返回错误信息

127.0.0.1:6379> hincrby hashkey1 num 2
(integer) 2

127.0.0.1:6379> hincrby hashkey1 num 3
(integer) 5

127.0.0.1:6379> hincrby hashkey1 num 4
(integer) 9
127.0.0.1:6379> hincrby hashkey1 num -2

(integer) 7
这里需要注意的就是,count可以是负数,证明是做减法。

若一开始key不存在,那么默认起始值为0(通过第一条操作可以看出来,一开始num不存在,用hincrby给它加2,结果是2)

7.hexists hashkey field:检查hashkey里的field是否存在。如果存在返回integer 1,如果不存在返回integer 0

127.0.0.1:6379> hexists hashkey1 f1
(integer) 1
127.0.0.1:6379> hexists hashkey1 f7
(integer) 0

8.hlen hashkey:返回指定hashkey中的field数量。

127.0.0.1:6379> hlen hashkey1
(integer) 6

127.0.0.1:6379> lenhashkey3
(error) ERR unknown command 'lenhashkey3'

9.hdel hashkey field:删除指定hash里的一个field字段

127.0.0.1:6379> hget hashkey1 f1
"v11"
127.0.0.1:6379> hdel hashkey1 f1
(integer) 1
127.0.0.1:6379> hget hashkey1 f1
(nil)

10.hkeys hashkey:返回hash中所有的field,相当于php中的array_keys

127.0.0.1:6379> hkeys hashkey1
1) "field1"
2) "f2"
3) "f3"
4) "num"
5) "num1"

127.0.0.1:6379> hkeys hashkey3
(empty list or set)

通过上面的操作可以看出hashkey1中有5个field而hashkey3中没有field值,是空的。

11.hvals hashkey:返回hash中的所有value,相当于php中的array_values

127.0.0.1:6379> hvals hashkey1
1) "value1"
2) "v22"
3) "v3"
4) "7"
5) "4"
127.0.0.1:6379> hvals hashkey3
(empty list or set)

12.hgetall hashkey:获取某个hash中全部的field和value

127.0.0.1:6379> hgetall hashkey1
 1) "field1"
 2) "value1"
 3) "f2"
 4) "v22"
 5) "f3"
 6) "v3"
 7) "num"
 8) "7"
 9) "num1"
10) "4"

redis数据类型 - Hash类型

hash类型,是一个string类型的field和value的映射表。 hash存放的是键值对,可以很方便的存放对象。 常用操作 hset 设置hash field为指定值,如果key不...
  • github_26672553
  • github_26672553
  • 2016年03月01日 11:47
  • 1058

NOSQL数据库浅析(三):Redis

Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Re...
  • qq_36031499
  • qq_36031499
  • 2017年01月04日 15:31
  • 827

redis学习 第三章 5种数据类型----hash类型

跟着Redis入门指南学习 第三章 5种数据类型----hash类型 3.3(散列类型) redis采用几点结构以健值对的形式存储数据的,而散列类型(hash)的健值也是一种字典结构...
  • haitianxiaowu1
  • haitianxiaowu1
  • 2016年10月09日 14:16
  • 986

NoSql——redis(高级操作)

redis nosql 主从复制 持久化 发布订阅
  • zllaptx4869
  • zllaptx4869
  • 2015年08月31日 16:00
  • 691

Redis Redis(2.6版本以上) Hash 常用操作和方法详解

package ddd; import java.util.HashMap; import java.util.List; import java.util.Map; import java.uti...
  • weiqingli190949353
  • weiqingli190949353
  • 2014年03月03日 17:07
  • 2281

Redis基础之数据类型(Hash哈希表)

一、概述: Redis中的Hash类型看成具有StringKey和String Value的map容器。所以该类型非常适合们可于存储值对象的信息。如Username、Password和Age等。如果...
  • wangmuming
  • wangmuming
  • 2016年11月23日 10:17
  • 840

Redis操作Hash

序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中...
  • qq_30273927
  • qq_30273927
  • 2017年06月16日 16:11
  • 1836

Nosql学习之Redis资料(一)

一、简介:      在过去的几年中,NoSQL数据库一度成为高并发、海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机。然而在众多产品中能够脱颖而出的却屈指可数,如Redis...
  • zhouqinghe24
  • zhouqinghe24
  • 2013年06月09日 12:10
  • 7562

redis的五种数据类型---hash类型

简介       常用命令:hget;hset;hgetall等       我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常...
  • kwy15732621629
  • kwy15732621629
  • 2016年12月25日 20:57
  • 1500

Redis的hash数据类型及其应用场景解析---购物车

1.Hash数据结构 Redis中的Hashes类型可以看成具有String Key和String Value的map容器 2.Hash存储购物车数据的操作 ...
  • ZuoAnYinXiang
  • ZuoAnYinXiang
  • 2015年12月14日 14:10
  • 4500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NoSQL之Redis对数据类型hash的操作
举报原因:
原因补充:

(最多只允许输入30个字)