Valkey源码剖析(14):对象类型

Valkey服务器使用对象表示重要的数据,比如数据库中的键和值,还有返回给客户端的回复等。

Valkey目前共有7种对象,都定义在server.h中:

#define OBJ_STRING 0 /* String object. */
#define OBJ_LIST 1   /* List object. */
#define OBJ_SET 2    /* Set object. */
#define OBJ_ZSET 3   /* Sorted set object. */
#define OBJ_HASH 4   /* Hash object. */
#define OBJ_MODULE 5   /* Module object. */
#define OBJ_STREAM 6   /* Stream object. */

Valkey数据库中的每个键值对通常都由一组对象组成,其中键总是字符串对象,而值则可以是任意类型的对象,它决定了键在数据库中的类型:

  • 字符串键的键和值都是字符串对象;

  • 列表键的键是字符串对象,而值则是列表对象;

  • 哈希键的键是字符串对象,而值则是哈希对象;

诸如此类。

并非所有键值对都由一组对象组成

在最近版本的Valkey中,在条件允许的情况下,服务器会将键和值保存在同一个对象里面以节约内存。

并非所有类型的键都拥有与之对应的对象类型

因为Valkey中某些类型的键会复用已有的对象类型,所以这些键的底层对象跟它们顶层表示的键类型并不一致:比如位图键的值就是字符串对象,而地理位置键的值则是有序集合。

黄健宏
2026.1.12