面试题答案
一键面试Redis键空间的数据结构
Redis键空间使用字典(哈希表)作为底层数据结构来存储键值对。这个字典的键是字符串对象,用于表示用户设置的键;值可以是Redis支持的任何数据类型,如字符串、哈希、列表、集合、有序集合等。
键的添加操作
- SET命令:
- 当使用
SET key value
命令时,Redis首先检查键空间字典中是否已存在该键。 - 如果不存在,就在字典中新增一个键值对,键为传入的
key
,值为根据value
类型创建的相应对象。 - 如果已存在,则更新该键对应的值。
- 当使用
- 其他数据类型特定命令:
- 例如
HSET hash_key field value
用于在哈希类型中添加一个字段值对。Redis先根据hash_key
在键空间字典中找到对应的哈希对象,然后在该哈希对象内部添加field - value
对。
- 例如
键的删除操作
- DEL命令:
DEL key [key ...]
命令会从键空间字典中删除指定的键及其对应的值。- 首先查找键空间字典,找到要删除的键,然后从字典中移除该键值对,并释放对应值对象所占用的内存。
- 特定数据类型删除子命令:
- 如
HDEL hash_key field [field ...]
用于删除哈希类型中的特定字段。先定位到hash_key
对应的哈希对象,然后从该哈希对象中删除指定的字段。
- 如
键的查询操作
- EXISTS命令:
EXISTS key
命令用于检查键是否存在于键空间字典中。- 直接在键空间字典中查找指定的键,若找到则返回1,表示键存在;否则返回0,表示键不存在。
- GET命令:
GET key
用于获取字符串类型键的值。- 先在键空间字典中查找指定的键,若找到则返回对应的值对象;若未找到则返回
nil
。
- 其他特定数据类型查询命令:
- 例如
HGET hash_key field
用于获取哈希类型中指定字段的值。先在键空间字典中找到hash_key
对应的哈希对象,然后在该哈希对象中查找指定的field
并返回其值。
- 例如