通用技术 redis 支持哪些数据类型

fqivy · 2020年11月22日 · 1342 次阅读

最近在面试的过程中,发现有很多同学都说用过 Redis,但是问 Redis 支持哪几种数据类型,又不是很能回答上来,特记录如下:
Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zset(sorted set:有序集合)。

  1. 字符串--String

    string 是 redis 最简单最基本的数据结构,Redis 所有的数据结构都是以唯一的 key 作为名称,然后通过唯一的 key 值来获取对应的 value 数据。
    不同类型的数据结构的差异就在于 value 的结构不一样。
    string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。
    字符串结构的使用非常广泛,一个常见的用途就是缓存用户信息。
    我们将用户信息结构体使用 JSON 序列化成字符串,然后将序列化后的字符串,然后将序列化后的字符串塞进 Redis 来缓存。
    同样的,获取用户信息会经过一次反序列化过程。

  2. 列表--List

    Redis 的列表相当于 Java 中的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作会非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(name),这点让人非常意外。
    当列表弹出最后一个元素之后,该数据结构自动被删除,内存被回收。

    列表可以在左右两边进行插入和删除操作。

  3. 哈希--Hash

    Redis 中的字典,相当于 Java 中的 HashMap,是无序字典,内部实现结构上同 Java 的 HashMap 是一致的,同样的数组 + 链表的二维结构。
    Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合存储对象。
    Hash 结构存储用户信息,不同于字符串一次性需要全部序列化整个对象,hash 可以对用户结构中的每个字段单独存储。
    这样我们需要获取用户信息时,可以进行部分获取。如果以字符串形式保存用户信息的话,就只能一次性全部读取,这样就会比较浪费流量。

  4. 集合--Set

    Redis 的集合相当于 Java 中的 HashSet,它内部的键值对是无序的唯一的。它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 null。
    当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。
    set 结构可以用来存储活动中奖的用户 ID,因为有去重功能,可以保证同一个用户不会中奖两次。

  5. 有序集合--Sorted Set

    zset 可能是 Redis 提供的最有特色的数据结构,它也是在面试中面试官最爱问的数据结构。
    它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,
    另一方面它可以给每个 value 赋予一个 score,代表 value 的排序权重。
    zset 可以用来存粉丝列表,value 值是粉丝的用户 ID,score 是关注事件。我们可以对粉丝列表按照关注时间进行排序。
    zset 也可以用来存储学生成绩,value 是学生 ID,score 是学生考试成绩。我们可以对成绩按分数进行排序就可以得到他的名字。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册