Redis常用命令——hash

hash 类型及操作

Redis hash 是一个 string 类型的 field 和 value 的映射表。它的添加、删除操作都是 O(1)( 平均)。hash 特别适合用于存储对象。相较于将对象的每个字段存成单个string 类型。将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。尽管 zipmap 的添加,删除,查找都是O(n),但是由于一般对象的 field 数量都不太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是O(1)。如果 field 或者 value 的大小超出一定限制后,Redis 会在内部自动将 zipmap 替换成正常的 hash 实现。这个限制可以在配置文件中指定
hash-max-zipmap-entries 64 #配置字段最多64 个
hash-max-zipmap-value 512 #配置value 最大为512 字节

以下是hash类型常用的操作命令:

1. hset
hset的命令格式如下:
● hset hashname filedname filevalue

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

上面的例子设置了名称为user的hash类型数据,并设置name域的值为qiuxiao,例:

2. hsetnx
如果要设置的hash数据的key不存在,则创建,然后创建指定的filed;如果filed已经存在,则返回0,不存在,返回1;例:

127.0.0.1:6379> exists myhash
(integer) 0
127.0.0.1:6379> hsetnx myhash filed1 value1
(integer) 1
127.0.0.1:6379> hsetnx myhash filed1 value1
(integer) 0
127.0.0.1:6379> hsetnx myhash filed2 value2
(integer) 1
127.0.0.1:6379>

PS: exists 命令是判断指定的key是否存在,存在,返回1,不存在,返回0

3. hmset
为指定key同时设置多个filed,例:

127.0.0.1:6379> hmset user age 27 sex 0 >company tencent
OK
127.0.0.1:6379>

4. hget
获取指定的hash filed,其命令格式如下:
● hget hashname filedname
如果指定的field域不存在的话,返回nil,例:

127.0.0.1:6379> hget user name
“qiuxiao”
127.0.0.1:6379> hget user address
(nil)
127.0.0.1:6379>

5. hmget
一次性获取指定hash的多个filed域,不存在的域返回nil,例:

127.0.0.1:6379> hmget user name age sex school
1) “qiuxiao”
2) “27”
3) “0”
4) (nil)
127.0.0.1:6379>

6. hincrby
给指定hash filed加上指定的值,例:

127.0.0.1:6379> hget user age
“27”
127.0.0.1:6379> hincrby user age 2
(integer) 29
127.0.0.1:6379> hincrby user age -5
(integer) 24
127.0.0.1:6379>

指定的field不存在时,则创建,默认的值为指定的值,例:

127.0.0.1:6379> hincrby user num 6
(integer) 6
127.0.0.1:6379> hget user num
“6”
127.0.0.1:6379>

7. hexists
判断指定hash filed是否存在,存在返回1,不存在,返回0,例:

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

8. hlen
用于获取指定hash的filed域的个数(不是获取长度的哦,别搞错了),例:

127.0.0.1:6379> hlen user
(integer) 5
127.0.0.1:6379>

9. hdel
用于删除指定hash的指定filed域,例:

127.0.0.1:6379> hlen user
(integer) 5
127.0.0.1:6379> hdel user num
(integer) 1
127.0.0.1:6379> hdel user num
(integer) 0
127.0.0.1:6379>

10. hkeys
用于获取指定hash的所有filed域,例:

127.0.0.1:6379> hkeys user
1) “name”
2) “age”
3) “sex”
4) “company”
127.0.0.1:6379>

11. hvals
用于获取指定hash的所有value域,例:

127.0.0.1:6379> hvals user
1) “qiuxiao”
2) “24”
3) “0”
4) “tencent”
127.0.0.1:6379>

12. hgetall
获取指定hash中全部的field和value,返回结果是按照field1 value1 filed2 value2 … 的形式,例:

127.0.0.1:6379> hgetall user
1) “name”
2) “qiuxiao”
3) “age”
4) “24”
5) “sex”
6) “0”
7) “company”
8) “tencent”
127.0.0.1:6379>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值