Redis面试题总结
Redis面试题总结3:数据结构
#### Redis 有哪些数据结构? - 字符串 String - 字典 Hash - 列表 List - 集合 Set - 有序集合 Zset #### String 类型的底层实现? 为了将性能优化到极致,Redis 作者为每种数据结构提供了不同的实现方式,以适应特定应用场景。以最常用的 String 为例,其底层实现就可以分为 int、embstr 以及 raw 这三种类型。这些特定的底层实现在 Redis 中被称为编码(Encoding),可以通过 OBJECT ENCODING [key] 命令查看。 Redis 中所有的 key 都是字符串,这些字符串是通过一个名为**简单动态字符串(SDS)** 的抽象数据类型实现的。 #### 什么是渐近式 rehash? 也就是说扩容和收缩操作不是一次性、集中式完成的,而是分多次、渐进式完成的。 如果保存在 Redis 中的键值对只有几个几十个,那么 rehash 操作可以瞬间完成,但是如果键值对有几百万,几千万甚至几亿,那么要一次性的进行 rehash,势必会造成 Redis 一段时间内不能进行别的操作。所以 Redis 采用渐进式 rehash。 这样在进行渐进式 rehash 期间,字典的删除查找更新等操作可能会在两个哈希表上进行,第一个哈希表没有找到,就会去第二个哈希表上进行查找。但是进行增加操作,一定是在新的哈希表上进行的。 #### 说说什么是压缩列表? 压缩列表(ziplist) 是 Redis 为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。 压缩列表并不是对数据利用某种算法进行压缩,而是将数据按照一定规则编码在一块连续的内存区域,目的是节省内存。 #### 什么是 RedisObject? 我们知道,Redis 底层实现了很多高级数据结构,如简单动态字符串、双端链表、字典、压缩列表、跳跃表、整数集合等。然而 Redis 并没有直接使用这些数据结构来实现键值对的数据库,而是在这些数据结构之上又包装了一层 RedisObject(对象),也就是我们常说的五种数据结构:字符串对象、列表对象、哈希对象、集合对象和有序集合对象。 - 这样做有两个好处: 1)通过不同类型的对象,Redis 可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行该的命令。 2)可以针对不同的使用场景,为对象设置不同的实现,从而优化内存或查询速度。
顶部
收展
底部
[TOC]
目录
Redis面试题总结1:常见考点
Redis面试题总结2:多线程
Redis面试题总结3:数据结构
Redis面试题总结4:数据存储
Redis面试题总结5:集群
相关推荐
Redis教程
Redis命令
Redis进阶
PHP 操作Redis