Redis
–hash
类型
最重要的数据结构,没有之一!!
基本命令
1. hset
&& hget
# field 对应的value只能是string类型
hset key field value [field value ...]
hget key field
2. hexists
判断key
里的field
是否存在。
hexists key field
3. hdel
删除key
里的field
。(del
是直接删除key
)
hdel key field [field ...]
4. hkeys
&& hvals
&& hgetall
hkeys
获取key
中的所有field
。
hvals
获取key
中的所有value
。
hgetall
获取key
中的所有field
和value
。
(有风险,若key
中有大量的field
,会导致Redis
服务器被阻塞!! keys *
命令也是一样的。)
可以使用hscan
命令获取所有的field
,他采用渐进式遍历,就是一次遍历一部分,在执行一次遍历下一部分(化整为零)…可以防止Redis
服务器被阻塞。
hkeys key
hvals key
hgetall key
5. hmget
一次查询一个key
里的多个field
。(hset
可以一次设置多个field
,但是hget
只能获取一个field
)
hmget key field1 [field2 ...]
6. hlen
获取key
中field
的个数。
hlen key
7. hsetnx
在field
不存在时设置其field--value
,key
中存在相应的field
时设置失败。
hsetnx key field value
8. hincrby
&& hincrbyfloat
将field
对应的value
加减整数/小数。
hincrby key field 10
hincrby key field -10
hincrbyfloat key field 0.2
hincrbyfloat key field -0.2
9. hstrlen
获取value字符串的长度,单位:字节。
hstrlen key field
hash
类型内部编码
1. ziplist
在field
个数较少 并且每个value
不长时使用,节省内存。
2. hashtable
标准的哈希表。
查看内部编码:
object encoding key
hash
类型的应用场景
1. 用作缓存
哈希类型存储会更直观,在更新操作时也会更灵活。但是内存使用量会更大。
如果用string
类型存储相应的数据就要用到json
串,修改很麻烦,要转换成哈希类型修改,然后再写成json
串(但是json
方式更节省空间)!!而直接使用哈希类型就很灵活。