news 2026/9/3 12:46:07

Dragonfly 内存数据库上手指南:10 分钟跑通并理解核心配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dragonfly 内存数据库上手指南:10 分钟跑通并理解核心配置

Dragonfly 内存数据库上手指南:10 分钟跑通并理解核心配置

【免费下载链接】dragonflyA modern replacement for Redis and Memcached项目地址: https://gitcode.com/GitHub_Trending/dr/dragonfly

Dragonfly 是一个用 C++ 编写的内存数据库,定位很直接:替代 Redis 和 Memcached,同时兼容两者的 API,业务代码不用改就能接入。它的多线程 shared-nothing 架构(把键空间切分给多个线程各自管理,避免单线程争抢)让吞吐量随核数线性扩展,官方基准里单实例做到了 3.8M QPS,是 Redis 单进程的 25 倍左右;相同负载下内存占用可少约 30%,快照期间内存几乎不涨。如果你正被 Redis 单线程的 CPU 瓶颈、多节点集群的运维复杂度困扰,这就是为它准备的上手路径。

适用场景:什么时候值得换 Dragonfly

先给结论:三种情况换过去收益最大,其余情况可以先观望。

  • 大内存单机的 KV 缓存/会话存储:Redis 单进程吃不满 16 核以上的机器,Dragonfly 能垂直扩到 128 核级别,省掉搭集群的成本。
  • 读写混合且写多的高 QPS 场景:官方对 Memcached 的压测中,SET 场景 Dragonfly 约 3844K QPS,Memcached 约 806K,写延迟也更低;GET 场景两者延迟接近,但 Dragonfly 吞吐仍是 2100K 对 1771K 量级的优势(以官方docs/memcached_benchmark.md数据为准)。
  • 需要缓存淘汰而不是持久化存储的场景:Dragonfly 内置自适应淘汰算法(类似 LRU/LFU 但零内存开销),开启cache_mode后在逼近maxmemory时才踢掉"最不可能再被访问"的数据。

反过来,如果你的业务强依赖 Redis 的全部高级特性(如复杂数据结构命令全集),可以先对照docs/differences.md里的行为差异清单,再结合docs/faq.md评估命令覆盖度。

首次运行:一条 Docker 命令 + 一次写读验证

环境要求只有一个:机器上装好 Docker。Linux、macOS、Windows(WSL)都可以。

# Linux(使用宿主机网络) docker run --network=host --ulimit memlock=-1 docker.dragonflydb.io/dragonflydb/dragonfly

⚠️ macOS 上--network=host不可用,把参数换成-p 6379:6379即可。个别环境遇到初始化报错,可加--privileged重试。

启动后服务默认监听6379端口,并且同时响应 RESP 和 HTTP 两种协议(连接建立时自动识别)。验证方式任选其一:

redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world"

也可以直接用浏览器打开http://localhost:6379,能出页面说明 HTTP 控制台是通的。写读都通,即可算部署成功。

如果习惯本地二进制而不是容器,需要先克隆源码再编译:

git clone https://gitcode.com/GitHub_Trending/dr/dragonfly

构建细节以仓库内构建文档为准,编译产物就是dragonfly入口程序。

仓库目录速览

仓库按"核心源码 / 部署物料 / 文档 / 测试 / 工具"五块组织,速查表如下:

路径作用
src/全部核心 C++ 源码。facade/是 RESP/Memcached 协议解析与应答层,server/是各命令族实现(字符串、哈希、事务、集群等),core/是 Dash 哈希表等基础数据结构,redis/内嵌了 Redis 的 dict/sds 等组件
docs/设计与行为文档:dashtable.md讲哈希表设计、cluster-mode.md讲集群、transaction.md讲事务、differences.md讲与 Redis 的差异,quick-start/是快速入门
contrib/部署物料:docker/提供 docker-compose 编排,charts/dragonfly/是 Kubernetes Helm Chart
tests/Python 集成测试(pytest),含集群、复制、TLS 等场景,还有 fakeredis 兼容层测试
fuzz/模糊测试种子与脚本,用于协议层健壮性验证
tools/运维辅助:cluster_mgr.py集群管理脚本、packaging/下的多发行版 Dockerfile 与 debian/rpm 打包脚本
CMakeLists.txt/Makefile构建入口,配合 CMake 完成编译
CONTRIBUTING.md / LICENSE.md贡献流程与许可证(BSL 1.1,商用前留意条款)

想读源码时,建议从src/server/dfly_main.cc入手,它负责解析运行参数并拉起整个服务。

关键配置解读

Dragonfly 的运行参数走的是"命令行 flag"体系,没有传统redis.conf那样的配置文件。参数有三种给法,任选其一:

  1. 命令行:./dragonfly --port=6379 --bind=localhost
  2. flag 文件:--flagfile <filename>,每行一个 flag,键值用等号连接,值不加引号
  3. 环境变量:DFLY_xx为 flag 原名,大小写敏感)

只挑日常真正会动的几项,其余跑dragonfly --help查:

配置项默认值说明
port6379RESP 协议监听端口,可改成6380等避让已有 Redis
bind不限localhost只收本机连接;设0.0.0.0放开全部 IPv4
requirepass""AUTH 密码。空值 = 无认证,生产环境务必设置
maxmemory0内存上限,人类可读格式如4gb0表示程序自动判定
dbfilenamedump快照文件名,例如dump.rdb
dir""(CLI)快照保存目录;Docker 镜像默认是/data,可用-v映射到宿主机
cache_mode开启后启用自适应淘汰,逼近maxmemory才驱逐冷数据
hz100过期键评估频率,调低省 CPU,代价是过期键清理变慢
memcached_port禁用在该端口额外提供 Memcached 协议,双协议并存
keys_output_limit8192keys命令返回上限,防止大键空间下内存暴涨
snapshot_cron""定时快照,标准 cron 语法,如0 6 * * *每天 6 点
dbnum支持select的数据库数量上限

一条包含常用项的启动示例(示例值可按需替换):

./dragonfly --bind=localhost --port=6379 --requirepass=pass123 \ --cache_mode=true --maxmemory=12gb --dbfilename=dump.rdb --logtostderr

⚠️ 一个容易踩的坑:主端口默认开着 HTTP 控制台(primary_port_http_enabled默认true)。如果你要把 6379 暴露到不受信网络,先加--nohttp_admin_console关掉它,或者单独开admin_port做管理访问。

下一步:文档、测试与进阶方向

  • 行为差异:迁移前通读 differences.md,重点看过期时间的精度约定(超过 2^28 ms 的毫秒级过期会被舍入到秒)等与 Redis 不一致的细节。
  • 原理解析:想理解性能从哪来,看 dashtable.md(哈希表设计)、df-share-nothing.md(shared-nothing 架构)和 transaction.md(基于 VLL 论文的无锁事务)。
  • 集群与复制:读 cluster-mode.md 了解cluster_mode=emulated的模拟集群能力;tests/dragonfly/下的复制、迁移相关 pytest 是很好的行为参照。
  • 部署形态:单机之外的两种方式都放在仓库里——docker-compose 编排 和 Helm Chart,K8s 生产部署建议直接用后者。
  • 贡献与反馈:命令缺失或行为异常,按 CONTRIBUTING.md 提 issue;fuzz/目录也欢迎补充模糊测试种子。

配置项与默认值可能随版本变化,以dragonfly --help和官方文档为准。

【免费下载链接】dragonflyA modern replacement for Redis and Memcached项目地址: https://gitcode.com/GitHub_Trending/dr/dragonfly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 12:45:32

智能食品包装与食品安全风险监测多模态数据集

摘要&#xff1a;该数据集包含15,000条智能食品包装物联网传感器记录&#xff0c;以及按照产品和包装类别组织的食品包装图像文件夹。数据集概述该数据集包含15,000条智能食品包装物联网传感器记录&#xff0c;以及按照产品和包装类别组织的食品包装图像文件夹。每条CSV记录对应…

作者头像 李华
网站建设 2026/9/3 12:41:42

维普论文多个章节AI率偏高怎么处理:BunnyScholar长文批量改写实测

维普论文多个章节AI率偏高怎么处理&#xff1a;BunnyScholar长文批量改写实测 在城乡规划与城市交通空间大数据分析专业的硕士毕业论文送审抽检中&#xff0c;很多研究生都会遇到令人头疼的多章节大面积标红&#xff1a;维普论文多个章节AI率偏高怎么处理&#xff1f;整篇长达…

作者头像 李华
网站建设 2026/9/3 12:41:38

Turnitin英文论文降AI工具测评:BunnyScholar长文改写前后对比

Turnitin英文论文降AI工具测评&#xff1a;BunnyScholar长文改写前后对比 在全英文学术论文写作与国际期刊投稿过程中&#xff0c;很多非母语学者和留学生都会遭遇令人头疼的 AI Writing 判定&#xff1a;Turnitin英文论文降AI工具测评&#xff1a;BunnyScholar长文改写前后对…

作者头像 李华
网站建设 2026/9/3 12:39:02

AI开源概览及工具使用

一、前言 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置AI玩法&#xff0c;如抖音的AI特效&#xff1b;但如今&#xff0c;大模型开放权重解决的是谁能拿到模型&#xff0c;没解决「谁能…

作者头像 李华
网站建设 2026/9/3 12:37:52

在PHP中如何防止SQL注入攻击?

什么是SQL注入攻击&#xff1f;SQL注入攻击是一种常见的网络攻击&#xff0c;攻击者尝试在程序中的用户输入部分注入恶意的SQL代码&#xff0c;以此来绕过程序的安全检查&#xff0c;直接操作数据库。这就像有人试图偷偷溜进一个只允许特定人员进入的地方&#xff0c;他们可能会…

作者头像 李华
网站建设 2026/9/3 12:37:11

PHP中如何实现连接池?

在PHP中实现连接池&#xff0c;我们首先需要理解连接池的基本概念。连接池就像一个存放预先创建好的连接的“容器”&#xff0c;当我们的程序需要连接数据库或其他服务时&#xff0c;它会从这个“容器”中取出一个已经存在的连接&#xff0c;而不是每次都新建一个。这样可以大大…

作者头像 李华