Redis之哈希类型

目录

一.命令

二.内部编码

1.压缩列表(ziplist)

2. 哈希表(Hashtable)

自动转换策略

三.作为缓存


Redis的学习专栏:http://t.csdnimg.cn/a8cvV

一.命令

HSET命令

        设置hash中指定的字段(field)的值,时间复杂度为O(1),返回的是添加字段的个数。

语法: HSET key filed value [ field value ...]

HGET命令

        获取hash中指定字段的值,不存在返回nil

语法:HGET key field

HEXISTS命令

        判断hash当中是否存在指定的字段,返回1和0,1则是存在,0是不存在

语法:HEXISTS key  field

HDEL命令

        删除Hash指定的字段,返回成功删除的个数

语法:HDEL key field [field ...]

HKEYS命令

        获取hash中所有的字段,遍历hash当中的字段值

语法:HKEYS key

hgetall 命令

        展示field和value值的对应。

语法: HGETALL key

HSCAN 命令

        渐进式遍历,pattern代表匹配的模式,count代表每次返回多少数据

语法:HSCAN key cursor [MATCH pattern] [COUNT count]

HLEN命令

        获取hash的元素个数,不需要遍历

语法:HLEN key

HSETNX命令

        不存在时,字段才能设置成功

语法:HSETNX key field value

hincrby命令

        直接将value的值加减

语法:hincrby  key  字段 数值

二.内部编码

哈希内部编码有两种:

1.压缩列表(ziplist)

原因:一个普通的hash表,会浪费一定的空间,因此进行设计内部的数据结构!

        小型哈希表通常使用压缩列表(ziplist)作为内部编码方式。压缩列表是一种紧凑且高效的数据结构,可以将多个键值对存储在一个连续的内存块中,每个键值对以一个或两个紧凑的条目来表示。具体特点包括:

  • 节省内存:压缩列表尽可能减少了每个元素的存储空间,适合存储数量较少且键值对较小的哈希表。
  • 连续存储:所有元素都存储在一个连续的内存块中,便于处理和操作。

注:用于元素个数少,value值长度短的情况

2. 哈希表(Hashtable)

当哈希表中的键值对数量增多或者键或值的大小超出了压缩列表的限制时,Redis 会将哈希表转换为使用哈希表(Hashtable)作为内部编码方式。哈希表的特点包括:

  • 散列桶:使用散列桶来存储键值对,每个桶中存储一个指向键值对的指针或直接存储键值对的内容。
  • 链表解决冲突:使用链表或者其他解决冲突的方式来处理哈希冲突,保证快速的键查找和插入操作。
  • 适应性:哈希表适用于大量键值对或者键值对较大的情况,能够高效地处理这些数据。

自动转换策略

        Redis 会根据哈希表的大小和存储的键值对来自动选择使用压缩列表还是哈希表作为内部编码方式。这种自动转换策略使得 Redis 能够在不同情况下都能够高效地处理哈希表的存储和操作,同时最大限度地减少内存使用和提高性能。

三.作为缓存

        或许有人会问,这种数据结构会存储什么呢?你想想难道项目,如果有一次你需要将一个类数据上传,怎么办呢?不就使用到了这种方式吗?

注:字段名不能像KEY键一样,设置过期时间!

相关推荐

  1. Redis 数据结构详解及命令

    2024-07-18 03:50:01       36 阅读
  2. Redis源码精读:

    2024-07-18 03:50:01       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 03:50:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 03:50:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 03:50:01       62 阅读
  4. Python语言-面向对象

    2024-07-18 03:50:01       72 阅读

热门阅读

  1. day03.04.逻辑运算符

    2024-07-18 03:50:01       19 阅读
  2. electron 的nsis配置

    2024-07-18 03:50:01       19 阅读
  3. 测试技术相关

    2024-07-18 03:50:01       23 阅读
  4. qt 关于设置背景颜色,和背景透明的方法

    2024-07-18 03:50:01       17 阅读
  5. C++内存对齐

    2024-07-18 03:50:01       21 阅读
  6. D. The Omnipotent Monster Killer

    2024-07-18 03:50:01       24 阅读
  7. Jupyter: 交互式计算的革命

    2024-07-18 03:50:01       23 阅读
  8. 装饰模式原理与C++实现

    2024-07-18 03:50:01       26 阅读
  9. 洛谷 P1507 NASA的食物计划 (dp 01背包问题)

    2024-07-18 03:50:01       24 阅读