【量化学习专栏】前文我们聊透了 Redis 的核心优势,以及它为什么是量化交易系统的 "标配组件"------ 微秒级的内存读写、天然的原子性、丰富的数据结构,完美适配行情缓存、订单队列、持仓统计等高频低延时场景。
从本篇开始,我们进入实操阶段,逐个拆解 Redis 的核心数据类型。Redis 支持的数据结构非常多,但对于量化开发而言,90% 的业务场景都可以通过 5 种基础类型实现。本文作为系列第一篇的上篇,先详解 String、Hash、List 三种类型,从基础概念、常用命令到量化场景落地,一文讲透。
一、Redis 数据类型总览
Redis 作为内存型键值数据库,除了基础的核心类型,还提供了多种高级数据结构与能力,覆盖不同业务场景:
- 基础核心类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
- 高级扩展类型:位图(Bitmaps)、HyperLogLogs(基数统计)、地理空间(Geospatial)
- 消息相关能力:发布 / 订阅(Pub/Sub)、流(Streams)
- 自定义扩展:支持动态加载模块,扩展自定义功能
其中前 5 种基础类型是量化开发的重中之重,覆盖了绝大多数量化业务场景。本篇我们先讲解前三种:String、Hash、List,剩余两种将在下篇展开。
二、String 字符串类型
2.1 基础概念
string 是 Redis 最基础的数据类型,逻辑非常简单:一个 key 对应一个 value,结构和 Memcached 完全一致。
它最核心的特性是二进制安全 ------ 也就是说 Redis 的 string 可以存储任意格式的数据,普通文本、整数、浮点数、序列化对象,甚至 jpg 图片这类二进制文件,都可以直接存储。 单个 string 类型的 value 最大支持 512MB 存储空间,完全满足日常量化场景的需求。
2.2 量化典型应用场景
String 是量化系统中使用最频繁的基础类型:
- 行情快照存储:以股票 / 合约代码为 key,存储最新成交价、买一卖一价等实时数据
- 原子计数统计:当日下单次数、策略触发次数、接口调用次数等计数场景
- 单值配置存储:系统参数、接口令牌、开关状态等单一配置项
2.3 核心常用命令
| 命令 | 功能说明 |
|---|---|
SET key value |
设置指定键的值 |
GET key |
获取指定键的值 |
INCR key |
将键的整数值原子自增 1 |
DECR key |
将键的整数值原子自减 1 |
APPEND key value |
将内容追加到键对应的值末尾 |
2.4 实操示例
基础用法示例:
bash
# 设置键对应的值
127.0.0.1:6379> SET runoob "菜鸟教程"
OK
# 获取键对应的值
127.0.0.1:6379> GET runoob
"菜鸟教程"
量化场景示例:
bash
# 存储贵州茅台最新价格
127.0.0.1:6379> SET stock:600519:price 1688.88
OK
# 读取最新价格
127.0.0.1:6379> GET stock:600519:price
"1688.88"
# 当日下单次数原子自增
127.0.0.1:6379> INCR order:count:today
(integer) 1
注意:单个键的 value 最大存储上限为 512MB,不建议使用 Redis 存储大体积二进制文件。
三、Hash 哈希类型
3.1 基础概念
Redis hash 是 field(字段)- value(值) 的映射集合,可以理解成一个 "嵌套的微型键值库"------ 一个主 key 下面,挂载多个独立的字段和对应的值。
它非常适合存储结构化对象:相比把对象序列化后用 string 存储,hash 支持单独修改某一个字段,不需要重写整个对象,性能和灵活性都更高。 单个哈希结构最多可以存储 2^32 - 1 个键值对。
3.2 量化典型应用场景
Hash 是量化系统中存储结构化数据的首选:
- 个股信息存储:一个 key 对应一只股票,字段包含名称、所属行业、市盈率、总股本等
- 账户持仓信息:一个 key 对应一个交易账户,字段包含可用资金、持仓市值、持仓数量等
- 策略参数配置:一个 key 对应一套策略,字段包含开仓阈值、止损比例、仓位上限等
3.3 核心常用命令
| 命令 | 功能说明 |
|---|---|
HSET key field value |
设置哈希表中指定字段的值 |
HGET key field |
获取哈希表中指定字段的值 |
HGETALL key |
获取哈希表中所有字段和对应的值 |
HDEL key field |
删除哈希表中的一个或多个字段 |
3.4 实操示例
需要特别注意:Redis 的同一个 key 只能对应一种数据类型。如果之前用 string 类型给 key 赋值,再直接执行 hash 命令会报类型错误,需要先删除原有键。
基础用法示例:
bash
# 先设置一个 string 类型的键
127.0.0.1:6379> SET runoob "菜鸟教程"
OK
# 直接对该键执行 hash 命令,触发类型错误
127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
# 删除原有键,重新以 hash 类型赋值
127.0.0.1:6379> DEL runoob
(integer) 1
# 批量设置哈希字段
127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
OK
# 获取单个字段的值
127.0.0.1:6379> HGET runoob field1
"Hello"
127.0.0.1:6379> HGET runoob field2
"World"
量化场景示例:
bash
# 存储个股基础信息
127.0.0.1:6379> HSET stock:600519 name "贵州茅台" industry "白酒" pe 25.6 total_share 12.56
(integer) 4
# 单独读取市盈率字段
127.0.0.1:6379> HGET stock:600519 pe
"25.6"
四、List 列表类型
4.1 基础概念
Redis 列表是按插入顺序排序的字符串列表,底层由双向链表实现,支持从列表的头部(左侧)或尾部(右侧)插入、弹出元素。
它的特点是头尾元素的插入、删除速度极快,中间位置操作性能一般,因此非常适合实现队列、栈这类数据结构。 单个列表最多支持存储 2^32 - 1 个元素。
4.2 量化典型应用场景
List 是量化系统中实现队列的核心选择:
- 订单处理队列:新订单从尾部入队,消费端从头部出队,实现先进先出的订单处理
- 行情流水记录:按时间顺序存储逐笔成交、Tick 数据,保留最近 N 条记录
- 告警消息队列:存储策略告警、系统通知等消息,供消费端处理
4.3 核心常用命令
| 命令 | 功能说明 |
|---|---|
LPUSH key value |
将值插入到列表的头部(左侧) |
RPUSH key value |
将值插入到列表的尾部(右侧) |
LPOP key |
移出并返回列表的第一个元素(左侧头部) |
RPOP key |
移出并返回列表的最后一个元素(右侧尾部) |
LRANGE key start stop |
获取列表指定索引范围内的元素 |
4.4 实操示例
基础用法示例:
bash
# 清空测试键
127.0.0.1:6379> DEL runoob
(integer) 1
# 从左侧依次插入元素
127.0.0.1:6379> LPUSH runoob redis
(integer) 1
127.0.0.1:6379> LPUSH runoob mongodb
(integer) 2
127.0.0.1:6379> LPUSH runoob rabbitmq
(integer) 3
# 查看列表索引 0-2 的元素
127.0.0.1:6379> LRANGE runoob 0 2
1) "rabbitmq"
2) "mongodb"
3) "redis"
可以看到,每次从左侧插入新元素,最后插入的内容会排在列表最前面。
量化场景示例(订单队列):
bash
# 订单依次从尾部入队
127.0.0.1:6379> RPUSH order:queue order_001 order_002 order_003
(integer) 3
# 消费端从头部取出最早的订单
127.0.0.1:6379> LPOP order:queue
"order_001"
五、本篇小结
本篇我们讲解了 Redis 三大基础数据类型,对应量化场景的核心用法可以总结为:
- String:最简键值结构,适配单值存储、原子计数、行情快照等场景
- Hash:字段映射结构,适配结构化对象存储,比如个股信息、账户持仓、策略参数
- List:有序链表结构,适配队列、流水记录、消息通知等场景
掌握这三种类型,已经可以覆盖量化系统中大部分基础缓存需求。 在下篇内容中,我们会继续讲解剩余两种核心类型:Set(集合)和 Zset(有序集合),以及它们在量化去重、排行榜、排序统计等场景的落地用法。
如果觉得内容对你有帮助,欢迎点赞、收藏、关注【量化学习】专栏,后续持续更新 Redis 量化实战内容。