redis_hash
hash命令
-
hset key field value 设置hash
为user:1 添加一对filed-value 127.0.0.1:6379> hset user:1 name tomcat (integer) 1 #hsetnx 不存在则添加
-
hget key field 获取值
127.0.0.1:6379> hget user:1 name "tomcat"
-
hdel key field [field] 删除field
127.0.0.1:6379> hdel user:1 name (integer) 1 127.0.0.1:6379> hdel user:1 age (integer) 0 #时间复杂度O(k),k是field的个数
-
hlen 计算filed的个数
127.0.0.1:6379> hset user:1 name tomcat (integer) 1 127.0.0.1:6379> hset user:1 age 10 (integer) 1 127.0.0.1:6379> hset user:1 city usa (integer) 1 127.0.0.1:6379> hlen user:1 (integer) 3
-
hmget key field [field] #时间复杂度O(k),k是field的个数
-
hmset key field value [field value ...]
127.0.0.1:6379> del user:1 (integer) 1 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> hmset user:1 name mike age 13 city tianjin OK 127.0.0.1:6379> hmget user:1 name age 1) "mike" 2) "13" #时间复杂度O(k),k是field的个数
-
hexists key field 判断field是否存在
127.0.0.1:6379> HEXISTS user:1 name (integer) 1
-
hkeys 获取所有的field
127.0.0.1:6379> hkeys user:1 1) "name" 2) "age" 3) "city" #时间复杂度O(n),n是field的总数
-
hvals key 获取所有的值
127.0.0.1:6379> hvals user:1 1) "mike" 2) "13" 3) "tianjin" #时间复杂度O(n),n是field的总数
+ hgetall key 获取键的所有field-value
```shell
127.0.0.1:6379> hgetall user:1
1) "name"
2) "mike"
3) "age"
4) "13"
5) "city"
6) "tianjin"
#时间复杂度O(n),n是field的个数
#hscan 可替代
- hincrby key filed
- hincrbyfloat key field
- hstrlen(redis3.2以上支持)
内部编码
-
ziplist(压缩列表):hash类型元素个数<hash-max-ziplist-entries(default512) 或者 所有的值<hash-max-ziplist-value(64字节) 同时满足以上2个条件,则使用更加紧凑的ziplist实现多个元素的连续存储。
-
hashtable(哈希表):当hash类型无法满足ziplist的条件时,此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1);
-
127.0.0.1:6379> hmset hashkey f1 v1 f2 v2 OK 127.0.0.1:6379> object encoding hashkey "ziplist"