redis(4) ——hash

Redis hash 是一个String 类型的field和value的映射表 hash特别适合用于存储对象

Redis中一个hash可以存储2^32 - 1 键值对(40亿多)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

 hash是一个string类型的field和value的映射表。添加和删除操作都是O(1)(平均)的复杂度。hash类型特别适合用于存储对象。在field的数量在限制的范围内以及value的长度小于指定的字节数,那么此时的hash类型是用zipmap存储的,所以会比较节省内存。可以在配置文件里面修改配置项来控制field的数量和value的字节数大小。

  hash-max-zipmap-entries 512 #配置字段最多512个

  hash-max-zipmap-value 64 #配置value最大为64字节。

  必须满足以上两个条件,那么该key会被压缩。否则就是按照正常的hash结构来存储hash类型的key。

【注意】这两个配置并不是限制hash结构最多只能存多少个field以及value的最大字节数,而是说在field未超过配置的数量,而且每一个filed对应的value的长度都小于指定的字节数时,注意是两个条件都满足时,该key的存储是采用的zipmap,就是压缩了的数据,节省空间。当field的数量超过了,或者其中有value的长度大于指定的长度,那么整个key就会采用正常的hash结构来在内存中存储。

Redis hash 命令

1)hset命令:设置一个key的filed对应的值,filed不存在则新增,field存在则修改field对应的值。

2)hgetall命令:获取该key的所有field以及对应的值。

3)hlen命令:获取key的长度,就是field的个数。

4)hvals命令:获取所有filed对应的value,只返回value。

5)hkeys命令:获取所有的filed,只返回filed,不返回value。

6)hmset命令:一次设置多个filed和对应的值

7)hmget命令:获取多个filed的值

8)hdel命令:删除filed,允许删除多个。

9)hincrby命令:给filed字段的值增加一个数,可以是负数。

【注意】不能增加浮点数

10)hexists命令:判断某个field是否存在,存在则返回1,否则返回0

127.0.0.1:6379> get you
"6.1zncu"
127.0.0.1:6379> del you
(integer) 1
127.0.0.1:6379> lpush you zncu
(integer) 1
127.0.0.1:6379> lpush you zncu2
(integer) 2
127.0.0.1:6379> lpush you zncu3
(integer) 3
127.0.0.1:6379> lrange you 0 4
1) "zncu3"
2) "zncu2"
3) "zncu"
127.0.0.1:6379> lrange you 0 2
1) "zncu3"
2) "zncu2"
3) "zncu"
127.0.0.1:6379> lrange you 0 1
1) "zncu3"
2) "zncu2"
127.0.0.1:6379> lrange you 0 0
1) "zncu3"
127.0.0.1:6379> blpop you 10
1) "you"
2) "zncu3"
127.0.0.1:6379> lrange you 0 10
1) "zncu2"
2) "zncu"
127.0.0.1:6379> get you
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> llen you
(integer) 2
127.0.0.1:6379> HGETALL you
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> hgetall runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
127.0.0.1:6379> hdel runoobkey name
(integer) 1
127.0.0.1:6379> HMSET you name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> HMSET zncucu name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> hgetall zncucu
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
127.0.0.1:6379> hkeys zncucu
1) "name"
2) "description"
3) "likes"
4) "visitors"
127.0.0.1:6379> hexits zncucu name
(error) ERR unknown command 'hexits'
127.0.0.1:6379> hexists zncucu name
(integer) 1
127.0.0.1:6379> hdel zncucu name likes
(integer) 2
127.0.0.1:6379> hgetall zncucuc
(empty list or set)
127.0.0.1:6379> hgetall zncucuc
(empty list or set)
127.0.0.1:6379> hgetall zncucu
1) "description"
2) "redis basic commands for caching"
3) "visitors"
4) "23000"
127.0.0.1:6379> hvals zncucu
1) "redis basic commands for caching"
2) "23000"
127.0.0.1:6379> hlen zncucu
(integer) 2
127.0.0.1:6379> hkeys zncucu
1) "description"
2) "visitors"
127.0.0.1:6379> hincrby zncucu age 18
(integer) 18
127.0.0.1:6379> hget zucucu age
(nil)
127.0.0.1:6379> hgetall zncucu
1) "description"
2) "redis basic commands for caching"
3) "visitors"
4) "23000"
5) "age"
6) "18"
127.0.0.1:6379> hset zncucu age -1
(integer) 0
127.0.0.1:6379> hget zncucu age
"-1"
127.0.0.1:6379>

下表列出了 redis hash 基本的相关命令:

序号 命令及描述
1 HDEL key field1 [field2] 
删除一个或多个哈希表字段
2 HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 
获取存储在哈希表中指定字段的值。
4 HGETALL key 
获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 
为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key 
获取所有哈希表中的字段
8 HLEN key 
获取哈希表中字段的数量
9 HMGET key field1 [field2] 
获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ] 
同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value 
将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value 
只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key 
获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 
迭代哈希表中的键值对。

猜你喜欢

转载自blog.csdn.net/kevin_loving/article/details/82114276