<p align="center">
<a href="https://dragonflydb.io">
<img src="/.github/images/logo-full.svg"
width="284" border="0" alt="Dragonfly">
</a>
</p>
[![ci-tests](https://github.com/dragonflydb/dragonfly/actions/workflows/ci.yml/badge.svg)](https://github.com/dragonflydb/dragonfly/actions/workflows/ci.yml) [![Twitter URL](https://img.shields.io/twitter/follow/dragonflydbio?style=social)](https://twitter.com/dragonflydbio)
Other languages: [ç®ä½ä¸æ](README.zh-CN.md) [æ¥æ¬èª](README.ja-JP.md) [íêµì´](README.ko-KR.md)
[Website](https://www.dragonflydb.io/) ⢠[Docs](https://dragonflydb.io/docs) ⢠[Quick Start](https://www.dragonflydb.io/docs/getting-started) ⢠[Community Discord](https://discord.gg/HsPjXGVH85) ⢠[GitHub Discussions](https://github.com/dragonflydb/dragonfly/discussions) | [GitHub Issues](https://github.com/dragonflydb/dragonfly/issues) | [Contributing](https://github.com/dragonflydb/dragonfly/blob/main/CONTRIBUTING.md)| [Dragonfly Cloud](https://www.dragonflydb.io/cloud)
## The world's most efficient in-memory data store
Dragonfly is an in-memory data store built for modern application workloads.
Fully compatible with Redis and Memcached APIs, Dragonfly requires no code changes to adopt. Compared to legacy in-memory datastores, Dragonfly delivers 25X more throughput, higher cache hit rates with lower tail latency, and can run on up to 80% less resources for the same sized workload.
## Contents
- [Benchmarks](#benchmarks)
- [Quick start](https://github.com/dragonflydb/dragonfly/tree/main/docs/quick-start)
- [Configuration](#configuration)
- [Roadmap and status](#roadmap-status)
- [Design decisions](#design-decisions)
- [Background](#background)
## <a name="benchmarks"><a/>Benchmarks
We first compare Dragonfly with Redis on `m5.large` instance which is commonly used to run Redis
due to its single-threaded architecture. The benchmark program runs from another
load-test instance (c5n) in the same AZ using `memtier_benchmark -c 20 --test-time 100 -t 4 -d 256 --distinct-client-seed`
Dragonfly shows a comparable performance:
1. SETs (`--ratio 1:0`):
| Redis | DF |
| -----------------------------------------|----------------------------------------|
| QPS: 159K, P99.9: 1.16ms, P99: 0.82ms | QPS:173K, P99.9: 1.26ms, P99: 0.9ms |
| | |
2. GETs (`--ratio 0:1`):
| Redis | DF |
| ----------------------------------------|----------------------------------------|
| QPS: 194K, P99.9: 0.8ms, P99: 0.65ms | QPS: 191K, P99.9: 0.95ms, P99: 0.8ms |
The benchmark above shows that the algorithmic layer inside DF that allows it to scale vertically
does not take a large toll when running single-threaded.
However, if we take a bit stronger instance (m5.xlarge), the gap between DF and Redis starts growing.
(`memtier_benchmark -c 20 --test-time 100 -t 6 -d 256 --distinct-client-seed`):
1. SETs (`--ratio 1:0`):
| Redis | DF |
| ----------------------------------------|----------------------------------------|
| QPS: 190K, P99.9: 2.45ms, P99: 0.97ms | QPS: 279K , P99.9: 1.95ms, P99: 1.48 |
2. GETs (`--ratio 0:1`):
| Redis | DF |
| ----------------------------------------|----------------------------------------|
| QPS: 220K, P99.9: 0.98ms , P99: 0.8ms | QPS: 305K, P99.9: 1.03ms, P99: 0.87ms |
Dragonfly throughput capacity continues to grow with instance size,
while single-threaded Redis is bottlenecked on CPU and reaches local maxima in terms of performance.
<img src="http://static.dragonflydb.io/repo-assets/aws-throughput.svg" width="80%" border="0"/>
If we compare Dragonfly and Redis on the most network-capable instance c6gn.16xlarge,
Dragonfly showed a 25X increase in throughput compared to Redis single process, crossing 3.8M QPS.
Dragonfly's 99th percentile latency metrics at its peak throughput:
| op | r6g | c6gn | c7g |
|-------|-------|-------|-------|
| set | 0.8ms | 1ms | 1ms |
| get | 0.9ms | 0.9ms | 0.8ms |
| setex | 0.9ms | 1.1ms | 1.3ms |
*All benchmarks were performed using `memtier_benchmark` (see below) with number of threads tuned per server and instance type. `memtier` was run on a separate c6gn.16xlarge machine. We set the expiry time to 500 for the SETEX benchmark to ensure it would survive the end of the test.*
```bash
memtier_benchmark --ratio ... -t <threads> -c 30 -n 200000 --distinct-client-seed -d 256 \
--expiry-range=...
```
In pipeline mode `--pipeline=30`, Dragonfly reaches **10M QPS** for SET and **15M QPS** for GET operations.
### Dragonfly vs. Memcached
We compared Dragonfly with Memcached on a c6gn.16xlarge instance on AWS.
With a comparable latency, Dragonfly throughput outperformed Memcached throughput in both write and read workloads. Dragonfly demonstrated better latency in write workloads due to contention on the [write path in Memcached](docs/memcached_benchmark.md).
#### SET benchmark
| Server | QPS(thousands qps) | latency 99% | 99.9% |
|:---------:|:------------------:|:-----------:|:-------:|
| Dragonfly | ð© 3844 |ð© 0.9ms | ð© 2.4ms |
| Memcached | 806 | 1.6ms | 3.2ms |
#### GET benchmark
| Server | QPS(thousands qps) | latency 99% | 99.9% |
|-----------|:------------------:|:-----------:|:-------:|
| Dragonfly | ð© 3717 | 1ms | 2.4ms |
| Memcached | 2100 | ð© 0.34ms | ð© 0.6ms |
Memcached exhibited lower latency for the read benchmark, but also lower throughput.
### Memory efficiency
To test memory efficiency, we filled Dragonfly and Redis with ~5GB of data using the `debug populate 5000000 key 1024` command, sent update traffic with `memtier`, and kicked off the snapshotting with the `bgsave` command.
This figure demonstrates how each server behaved in terms of memory efficiency.
<img src="http://static.dragonflydb.io/repo-assets/bgsave-memusage.svg" width="70%" border="0"/>
Dragonfly was 30% more memory efficient than Redis in the idle state and did not show any visible increase in memory use during the snapshot phase. At peak, Redis memory use increased to almost 3X that of Dragonfly.
Dragonfly finished the snapshot faster, within a few seconds.
For more info about memory efficiency in Dragonfly, see our [Dashtable doc](/docs/dashtable.md).
## <a name="configuration"><a/>Configuration
Dragonfly supports common Redis arguments where applicable. For example, you can run: `dragonfly --requirepass=foo --bind localhost`.
Dragonfly currently supports the following Redis-specific arguments:
* `port`: Redis connection port (`default: 6379`).
* `bind`: Use `localhost` to only allow localhost connections or a public IP address to allow connections **to that IP** address (i.e. from outside too). Use `0.0.0.0` to allow all IPv4.
* `requirepass`: The password for AUTH authentication (`default: ""`).
* `maxmemory`: Limit on maximum memory (in human-readable bytes) used by the database (`default: 0`). A `maxmemory` value of `0` means the program will automatically determine its maximum memory usage.
* `dir`: Dragonfly Docker uses the `/data` folder for snapshotting by default, the CLI uses `""`. You can use the `-v` Docker option to map it to your host folder.
* `dbfilename`: The filename to save and load the database (`default: dump`).
There are also some Dragonfly-specific arguments:
* `memcached_port`: The port to enable Memcached-compatible API on (`default: disabled`).
* `keys_output_limit`: Maximum number of returned keys in `keys` command (`default: 8192`). Note that `keys` is a dangerous command. We truncate its result to avoid a blowup in memory
UnknownToKnown
- 粉丝: 1w+
- 资源: 773
最新资源
- 10欧洲钢筋焊接网技术考察.pdf
- 11G521-2 钢墙梁(冷弯薄壁卷边槽钢、高频焊接薄壁H型钢).pdf
- 数据恢复 FoneLab Mac Data Retriever for Mac v1.6.6
- 文本和代码编辑器 UltraEdit for Mac v23.0.0.22
- 思维导图绘制 ConceptDraw MINDMAP for Mac v16.0.0.332
- Markdown博客编辑器和文档管理 MWeb Pro for Mac v4.6.7
- comsol流体仿真 ,流固耦合,圆管内流体驱动物块的移动和 流体驱动扇叶的转动
- H5多人联机网游游戏《Browserquest》源码 node.js版本+php版本
- 本科毕业设计-基于使用matplotlib技术设计并实现一套用于便捷、数据抓取和视图应用系统。要求系统视图展示结果多样化,可供用户选择;系统能对数据抓取目标动态
- 基于 anyproxy使用“代理”的方式来抓取微信公众账号文章,可以抓取阅读数、点赞数,资料齐全+文档+源码.zip
- 毕业设计-基于远程监控机械臂的透明物体检测抓取资料齐全+文档+源码.zip
- 基于 PF_RING 的数据包抓取解析程序资料齐全+文档+源码.zip
- 基于 PHP Selenium 的抓取网站截图的代码资料齐全+文档+源码.zip
- 基于 MySQL 协议的抓包工具,实时抓取 MySQL 服务端的请求,并格式化输出,输出内容包括访问时间、来源 IP、执行的SQL语句。资料齐全+文档+源码.z
- 基于(anyproxy)中间人注入方式,抓取微信公众号文章列表,阅读数,点赞数,评论列表资料齐全+文档+源码.zip
- 基于 Vue3.x + Vite4.x + Canvas 开发的滑块验证码 动态生成验证滑块,结合后端的二次校验,能有效的避免被其他人肆意抓取并模拟验证,进一步
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈