在redis中,hash数据类型存储的数据与mysql数据库中存储一条记录极为相似,是一个string类型的field和value的映射表,它特别适合用于存储对象,但字段值只能是字符串,不支持其他类型。
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类型中,一个key可以对应多个多个field,一个field对应一个value。将一个对象存储为hash类型的好处之一:较于每个字段都单独存储成string类型来说,更能节约内存。
以下是哈希(hash)类型常用操作命令:
1.【 hset key field value 】 设置hash field为指定值,如果key不存在,则先创建。
2.【 hmset key field1 value1 ... fieldN valueN 】 同时设置多个值。
3.【 hget key field 】 获取指定的hash field
4.【 hmget key field1 field1 ... fieldN 】 获取指定的多个hash field
5.【 hincrby key field num 】 将指定的hash field加上指定的值。
6.【 hexists key field 】 查看指定field是否存在。
7.【 hdel key field 】 删除指定的hash field。
8.【 hlen key 】 返回指定hash中field的数量。
9.【 hkeys key 】 返回hash所有的field。
10.【 hvals 】 返回hash中所有的value。
11.【 hgetall key 】 返回hash中所有的field和value。
例子
1 hset
设置hash field为指定值,如果 key 不存在,则先创建。
redis 127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
redis 127.0.0.1:6379>
2 hsetnx
设置hash field为指定值,如果 key 不存在,则先创建。如果 field已经存在,返回0,nx是
not exist的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
redis 127.0.0.1:6379>
第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。
3 hmset
同时设置hash的多个field。
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
redis 127.0.0.1:6379>
4 hget
获取指定的hash field。
redis 127.0.0.1:6379> hget myhash field1
"Hello"
redis 127.0.0.1:6379> hget myhash field2
"World"
redis 127.0.0.1:6379> hget myhash field3
(nil)
redis 127.0.0.1:6379>
由于数据库没有field3,所以取到的是一个空值nil
5 hmget
获取全部指定的hash filed。
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
redis 127.0.0.1:6379>
由于数据库没有field3,所以取到的是一个空值nil
6 hincrby
指定的hash filed 加上给定值。
redis 127.0.0.1:6379> hset myhash field3 20
(integer) 1
redis 127.0.0.1:6379> hget myhash field3
"20"
redis 127.0.0.1:6379> hincrby myhash field3 -8
(integer) 12
redis 127.0.0.1:6379> hget myhash field3
"12"
redis 127.0.0.1:6379>
在本例中我们将field3 的值从20 降到了12,即做了一个减8 的操作。
7 hexists
测试指定field是否存在。
redis 127.0.0.1:6379> hexists myhash field1
(integer) 1
redis 127.0.0.1:6379> hexists myhash field9
(integer) 0
redis 127.0.0.1:6379>
通过上例可以说明field1存在,但field9是不存在的。
8 hlen
返回指定hash的field数量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379>
通过上例可以看到myhash中有4 个field。
9 hdel
删除指定hash的field。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379> hdel myhash field1
(integer) 1
redis 127.0.0.1:6379> hlen myhash
(integer) 3
redis 127.0.0.1:6379>
10 hkeys
返回hash的所有field。
redis 127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field"
3) "field3"
redis 127.0.0.1:6379>
说明这个hash中有3 个field
11 hvals
返回hash的所有value。
redis 127.0.0.1:6379> hvals myhash
1) "World"
2) "Hello"
3) "12"
redis 127.0.0.1:6379>
说明这个hash中有3 个field
12 hgetall
获取某个hash中全部的 filed及value。
redis 127.0.0.1:6379> hgetall myhash
1) "field2"
2) "World"
3) "field"
4) "Hello"
5) "field3"
6) "12"
redis 127.0.0.1:6379>
可见,一下子将myhash 中所有的field及对应的value 都取出来了。
荒野乱斗国际版 (BrawlStars)最新版本v56.274
下载一波超人内置修改器菜单版 安卓版v1.0.2
下载敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载继承了一座戏园子无限声望铜钱版 内置菜单最新版v1.7
继承了一座戏园子折相思版是游戏的破解版本,在该版本中为玩家提
山河半世橙光清软金手指版 无限鲜花v3.24
山河半世是一款超级好玩的橙光恋爱游戏,在游戏中玩家们需要扮演
蓬莱手游折相思版 安卓版v1.0.0
蓬莱免广告版是游戏的修改版本,在该版本中为玩家去除了广告,玩
当红影后橙光游戏破解版2025 最新版v1.0
当红影后橙光破解版是一款超级好玩的娱乐圈题材的橙光游戏,在这
忽然成了万人迷清软完结版 无限鲜花版v12.15
忽然成了万人迷破解版是一款非常好玩的男性向橙光游戏,在有一天