Redis哈希表hash
通过使用Hash,你可以一个高级别的Redis key上面存储一组键值对。这些值提供了一些和String字符串相同的特性,并且对于组相关的数据十分有用。你可以把这个数据组想象成关系型数据库中的一条记录或者文档库中的一篇文档。
hash就是迷你版的redis。
这里有一篇文章,是关于redis的内存优化的:redis内存优化
操作hash的redis命令
HMGET HMGET key-name key [key ....] #获取hash里面这些字段上的值
HMSET HMSET key-name key value [key value ...] #为里面的一个或多个键设置值
HDEL HDEL key-name key [key ...] # 设置hash里面的指定键值对
HLEN HLEN key-name # 返回hash里面键值对的数量
hmset命令:
同时将多个field-value键值对放入到哈希表key中,此命令会覆盖哈希表中已存在的域,
如果key不存在,一个空哈希表被创建并执行hmset操作。
hmget命令:
返回哈希表 key 中,一个或多个给定域的值。
如果给定的域不存在于哈希表,那么返回一个 nil 值。
因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
时间复杂度: O(N), N 为给定域的数量
使用案例
把{‘k1’:'v1',‘k2’:'v2',‘k3’:'v3',‘k4’:'v4',‘k5’:'v5'} 这5个键值对放入到键为my-hash-key的hash数据结构中,并取出其中某一个键的值
hmset my-hash-key k1 'v1' k2 'v2' k3 'v3' k4 'v4' k5 'v5'
hash的高级命令
hexists hexist key-name key #检查给定键是否存在于散列中
hkeys hkeys key-name #获取哈希里面包含的所有键
hvals hvals key-name #获取哈希表里面的所有值
hgetall hgetall key-name #获取哈希表里面包含的所有键值对
hincrby hincrby key-name key increment #将键key存储的值加上整数increment
hincrbyfloat hincrbyfloat key-name key increment #将键key存储的值加上浮点数increment