Redis 是什么

一句话总结

Redis 是一个基于内存的键值存储系统,在我们的 Press 架构中以 3 个独立实例运行(cache、queue、socketio),分别负责缓存页面、暂存 Agent Job 队列、传递实时消息。


🤔 为什么会有它 / 解决了什么问题

传统数据库把数据放在磁盘上,读写慢。Redis 把所有数据放在内存中,读写速度达到微秒级,解决了缓存、任务队列、实时消息这类对延迟极度敏感的需求。


🔍 具体原理 / 运作逻辑

Redis 是单线程事件循环模型,所有命令串行执行,天然无竞争条件。数据全在内存,定期异步写磁盘(RDB 快照或 AOF 日志)做持久化。Press 中 3 个实例各自独立,互不干扰。


🧭 什么情况下会用到 / 什么场景会遇到它

  • Press 创建站点后 Agent Job 在 Redis 队列排队等待 f1/n1 领取执行
  • Frappe 框架大量用 Redis 缓存 DocType 元数据和用户 session
  • bench --site xxx execute 的执行结果通过 socketio Redis 实时推送到 Press UI

🛠️ 怎么上手 / 在哪操作

Press 容器的 3 个 Redis 实例不需要手动维护。排查时可以 docker exec -it press-redis-cache-1 redis-cli 连进去查缓存键。


⚖️ 副作用 / 代价 / 取舍

  • 内存比磁盘贵十几倍,大量数据不适合存 Redis
  • 容器内 Redis 数据不持久化,容器重启全部丢失(Press 的设计就是如此——它们只是缓存和队列)

🕰️ 来历

  • 谁提出/创造的:意大利开发者 Salvatore Sanfilippo(antirez)
  • 什么时候出现的:2009 年

🔗 关联 / 经常一起出现的概念

  • [MariaDB]:Redis 做缓存层扛高频读,MariaDB 做持久化存最终数据,两者互补
  • 工作队列:Press 的 Agent Job 通过 Redis 队列实现异步解耦——Press 推任务到队列,f1/n1 的 Agent Worker 拉取执行

⚠️ 注意事项 / 常见误区

Press 容器重建后 3 个 Redis 实例的数据全部清空(无持久化),但 Agent Job 如果当时有未完成的任务会丢失,必须手动重新触发。


📎 记忆锚点

收银台的收件箱——有人放进去一张纸条(Agent Job),有空的人就拿走执行,放纸条的人不用等着。


📝 更新日志

日期改动原因
2026-07-13首次创建-