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] 迭代哈希表中的键值对。 |