华为架构师整理Redis数据结构的大厂最佳实践( 五 )

ziplist承载时,Map的大多数操作不再是O(1)了,而是由Hash表遍历,变成了链表的遍历,复杂度变为O(N)
由于Map相对较小时采用ziplist,采用Hash表时计算hash值的开销较大,因此综合起来ziplist的性能相对好一些
哈希键值结构

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 
特点:
  • Map的map
  • Small redis
  • field不能相同,value可相同
hget key field O(1)# 获取 hash key 对应的 field 的 valuehset key field value O(1)#设置 hash key 对应的 field 的 valuehdel key field O(1)# 删除 hash key 对应的 field 的 value实操127.0.0.1:6379> hset user:1:info age 23(integer) 1127.0.0.1:6379> hget user:1:info age"23"127.0.0.1:6379> hset user:1:info name JAVAEdge(integer) 1127.0.0.1:6379> hgetall user:1:info1) "age"2) "23"3) "name"4) "JavaEdge"127.0.0.1:6379> hdel user:1:info age(integer) 1127.0.0.1:6379> hgetall user:1:info1) "name"2) "JavaEdge"hexists key field O(1)# 判断hash key是否有fieldhlen key O(1)# 获取hash key field的数量127.0.0.1:6379> hgetall user:1:info1) "name"2) "JavaEdge"127.0.0.1:6379> HEXISTS user:1:info name(integer) 1127.0.0.1:6379> HLEN user:1:info(integer) 1hmget key field1 field2... fieldN O(N)# 批量获取 hash key 的一批 field 对应的值hmset key field1 value1 field2 value2...fieldN valueN O(N)# 批量设置 hash key的一批field value
华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 

华为架构师整理Redis数据结构的大厂最佳实践

文章插图
 
Redis Hashes 保存String域和String值之间的映射,所以它们是用来表示对象的绝佳数据类型(比如一个有着用户名,密码等属性的User对象)
| `1` | `@cli` || `2` | `HMSET user:1000 username antirez password P1pp0 age 34` || `3` | `HGETALL user:1000` || `4` | `HSET user:1000 password 12345` || `5` | `HGETALL user:1000` |一个有着少量数据域(这里的少量大概100上下)的hash,其存储方式占用很小的空间,所以在一个小的Redis实例中就可以存储上百万的这种对象
Hash的最大长度是2^32 – 1个域值对(4294967295,一个Hash中可以有多达40多亿个域值对)
Sorted sets(zset)有序集合,去重但可排序,写进去时候给个分数,可以自定义排序规则 。比如想根据时间排序,则写时可以使用时间戳作为分数 。
排行榜:将每个用户以及其对应的什么分数写进去 。
127.0.0.1:6379> zadd board 1.0 JavaEdge(integer) 1获取排名前100的用户:
127.0.0.1:6379> zrevrange board 0 991) "JavaEdge"


推荐阅读