We put a Redis server inside our runtime
12 days ago
- #Redis
- #Development Environment
- #Backend Development
- Encore允许在本地开发、测试和生产环境中运行相同的后端代码,基础设施直接在代码中声明,并根据每个环境进行配置。
- 在本地开发中,Encore运行时包含一个直接内置于进程的内存Redis服务器,避免了诸如Docker容器或行为可能不同的模拟程序等外部依赖。
- 最初在Go应用程序中采用alicebob/miniredis实现,Encore将其移植到Rust,以便嵌入Rust运行时中供TypeScript应用程序使用,总计约25,000行代码,支持关键的Redis数据类型和协议。
- 嵌入式服务器模拟真实Redis行为,包括通过模拟时钟实现基于时间的过期以及键值修剪以防止无限增长,确保本地开发行为与生产环境紧密匹配。
- 应用程序在代码中声明缓存,运行时根据配置标志自动在本地使用嵌入式服务器,或在生产环境中连接到托管的Redis,无需更改应用程序代码。
- 为确保一致性,Rust服务器会针对原始的Go miniredis测试套件进行测试,逐字节比较原始RESP响应,以捕捉命令处理或TLS实现中的细微差异。
- 内存服务器仅用于开发和测试;在生产环境中,Encore会配置可扩展的托管Redis实例,保持一致性,无需在本地手动设置基础设施。