目录

​编辑

简介

安装

底层原理

LRU

LRU 执行效率

Redis 中的 LRU

Dragonfly缓存


简介

Dragonfly 是一款高性能的缓存中间件,与 Redis 和 Memcached API 完全兼容,无缝对接(意思就是开发人员直接改一下配置文件的链接地址即可,把他当redis用)。Dragonfly 在多线程、无共享架构之上实现了新颖的算法(2Q算法)和数据结构(Dash稳定哈希结构)。因此,与 Redis 相比,Dragonfly 的性能达到了 x25,并且在单个实例上支持数百万 QPS。

在redis官方得知dragonfly可能威胁到统治地位存在的时候,为了扳回一成,redis官方测试,在相同的集群环境下redis的吞吐量比Dragonfly高18%

Dragonfly 的核心特性使其成为经济高效、高性能且易于使用的 Redis 替代品。

官网地址:Dragonfly

短短75天在github关注突飞,突破10k github star

安装

建议在 linux 5.11 或更高版本上运行它,但您也可以在旧内核上运行 Dragonfly。

1.安装docker

如果您的机器上没有 docker,请先安装 Docker,然后再继续。

2.直接运行

docker run --network=host --ulimit memlock=-1 docker.dragonflydb.io/dragonflydb/dragonfly

docker容器启动后,默认端口6379

您可以使用redis-cli连接localhost:6379或打开浏览器并访问http://localhost:6379

redis-cli
127.0.0.1:6379> set hello world2022
OK
127.0.0.1:6379> keys *
1) "hello"
127.0.0.1:6379> get hello
"world2022"
127.0.0.1:6379>

底层原理

LRU

顾名思义,最近最少使用 (LRU) 缓存策略驱逐最近最少使用的项目。它之所以这样工作,是因为缓存算法努力优化命中率,或未来访问其项目的概率。

如果缓存已满,则需要腾出项目以腾出空间来添加新内容。假设最近最少使用的项目也是最不值钱的,缓存通过删除最不有价值的项目来为新添加的项目释放空间。

这个假设是合理的,但不幸的是,如果上面的假设不成立,这个算法的表现就会很差。例如,考虑具有长尾分布的访问模式。这里,y 轴表示缓存中项目的归一化访问频率,x 轴表示从最高频率到最低频率排序的项目。

LRU 执行效率

LRU 是一种可以高效实现的简单算法。实际上,它维护了一个双链表中的所有项目。当一个项目被访问时,LRU 将它移动到列表的头部。为了腾出 LRU 项目,它从列表的尾部弹出。见上图。所有操作都在 中完成O(1),每个项目的内存开销是 2 个指针,即 64 位架构上的 16 个字节。

Redis 中的 LRU

Redis 实现了一些驱逐策略启发式。其中一些被描述为“近似 LRU”。为什么要近似?因为 Redis 不像经典 LRU 那样在其项目之间保持精确的全局顺序。相反,它将最后一次访问时间戳存储在每个条目中。

当需要驱逐一个项目时,Redis 对整个键空间进行随机抽样并选择 K 个候选者。然后它在这 K 个候选者中选择最近最少使用时间戳的项目并将其腾出。这样,Redis 为在一个全局订单中排序项目所需的每个条目节省了 16 个字节。这种启发式是 LRU 的非常粗略的近似。Redis 维护人员最近讨论了通过实施具有全局顺序的经典 LRU 策略向 Redis 添加额外启发式的可能性,但最终决定反对。

Dragonfly缓存

实现缓存:

  • 与 LRU 不同,它可以抵抗近期流量的波动。
  • 不需要像 Redis 中那样的随机抽样或其他近似值。
  • 每个项目的内存开销为零
  • 具有非常小O(1)的运行时开销。

这是一种新颖的缓存设计方法,以前在学术研究中没有提出过。

Dragonfly Cache(dash 缓存)基于1994年的另一篇著名的缓存策略——“2Q: A Low Overhead High Performance Buffer Management Replacement Algorithm”。

2Q 通过引入两个独立的缓冲区来解决 LRU 的问题。2Q 不仅将新近度作为一个因素考虑,还考虑了每个项目的访问频率。它首先将最近的项目纳入所谓的试用缓冲区。这个缓冲区只保存了缓存空间的一小部分,比如不到 10%。所有新添加的项目在此缓冲区内相互竞争。

2Q实施

Dragonfly 扩展了上述想法。一个简单的解决方案是将哈希表条目划分为两个缓冲区:一个具有 FIFO 排序的试用缓冲区,以及一个使用 LRU 链表的受保护缓冲区。这可行,但需要使用额外的元数据并浪费宝贵的内存。

相反,Dragonfly 利用了Dashtable的独特设计,并利用其弱排序特性为其优势。

为了解释 2Q 如何与 Dashtable 一起工作,我们需要解释我们如何在那里定义试用和受保护的缓冲区,我们如何将试用项目提升到受保护的缓冲区以及我们如何从缓存中驱逐项目。

我们在原始 Dashtable 上覆盖了以下语义:

  1. 存储桶中的插槽现在具有等级或优先级。左边的槽位最高(0),右边的最后一个槽位最低(9)

  2. 段内的存储桶用作试用缓冲区。当一个新项目被添加到整个段时,它被添加到插槽 0 的存储桶中。桶中的所有其他项目都向右移动,并且桶中的最后一个项目被驱逐。这样,存储桶就充当了试用项目的 FIFO 队列。

  3. 每个缓存命中“提升”其项目:

    • 如果该项目在存储桶中,它会立即移动到其主存储桶中的最后一个插槽。

    • 如果它在 slot 的 home 存储桶中i,它会被 slot 的一个项目换掉i-1

    • 插槽中的项目0保持在同一个位置。

  4. 当一个试用项目被提升到受保护的存储桶时,它会被移动到那里的最后一个插槽。之前存在的项目被降级回试用期。

基本上,Dash-Cache 驱逐策略由(2)描述的“驱逐”步骤和(3)描述的正强化步骤组成。

而已。不需要额外的元数据。高质量的物品会很快出现在他们的主存储桶中的高级插槽中,而新添加的项目会在存储/试用存储桶中相互竞争。在我们的实现中,每个存储桶有 14 个插槽,这意味着每个试用项目在被从缓存中驱逐之前可以移动 14 次,除非它证明了它的有用性并被提升。每个段有 56 个常规桶和 4 个存储桶;因此,我们6.7%为试用缓冲区分配了总空间。在被驱逐之前捕获高质量的物品就足够了。

Dragonfly单机部署比redis快25倍的缓存中间件相关推荐

  1. PyTorch 版 EfficientDet 比官方 TF 实现快 25 倍?这个 GitHub 项目数天狂揽千星

    来源:机器之心 本文约3646字,建议阅读8分钟. 本文介绍在 Github 项目中,开发者 zylo117 开源了 PyTorch 版本的 EfficientDet,速度比原版高 20 余倍.如今, ...

  2. PyTorch版EfficientDet比官方TF实现快25倍?这个GitHub项目数天狂揽千星

    点上方蓝字视学算法获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :机器之心 EfficientDe ...

  3. pytorch test单张图片_PyTorch版EfficientDet比官方TF实现快25倍?这个GitHub项目数天狂揽千星...

    EfficientDet 难复现,复现即趟坑.在此 Github 项目中,开发者 zylo117 开源了 PyTorch 版本的 EfficientDet,速度比原版高 20 余倍.如今,该项目已经登 ...

  4. 比Redis快5倍的中间件,为啥这么快?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:http://suo.im/4Cx7u 今天给大家介 ...

  5. 比 Redis 快 5 倍的中间件,KeyDB

    KeyDB项目是从redis fork出来的分支.众所周知redis是一个单线程的kv内存存储系统,而KeyDB在100%兼容redis API的情况下将redis改造成多线程. 线程模型 KeyDB ...

  6. 比Redis快5倍的中间件,究竟为什么这么快?

    来自:云栖社区 作者:羽洵 原文:https://yq.aliyun.com/articles/705239 今天给大家介绍的是KeyDB,KeyDB项目是从Redis fork出来的分支.众所周知R ...

  7. 比MySQL快801倍,字节阿里争相 部署,真香!

    信息化时代,数据即价值.前瞻未来,数据价值的挖掘和沉淀是大数据领域重要的发展方向,是大数据广大开发工程师进阶的必备技能和职业素养. OLAP(Online Analysis Processing)联机 ...

  8. 阿里公开核心技术:如何摘下4项世界冠军,推理性能比第二名快5倍

    文 | 阿里云异构计算团队  量子位 出品 | 公众号 QbitAI 近日,斯坦福大学DAWNBench ImageNet最新成绩公布,阿里超过Google.Facebook等,摘下四个榜单的世界第一 ...

  9. RedisJson 是什么?比ES快 500 倍?

    -     概述    - 近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论: 对于隔离写入(isolated writ ...

  10. 又一国产数据库诞生!腾讯发布 TGDB,实时查询比 Neo4j 快 20-150 倍!

    受访者 | 邵宗文,腾讯云图数据库产品经理 记者| 夕颜 出品 | CSDN(ID:CSDNnews) AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 ...

最新文章

  1. Installing ROS 2 on Ubuntu20.04 Linux
  2. Quartz.Net实现作业定时调度详解
  3. Influxdb修改数据保留策略
  4. MySQL约束课堂笔记
  5. RPC调用和HTTP调用的区别你知道吗
  6. Python中的数组类型
  7. 利用boost获取时间并格式化
  8. Android8.1 Camera2+HAL3之HIDL open()流程(二十)
  9. css3中旋转坐标轴的问题
  10. 排序算法专题-希尔排序
  11. CentOs6.5安装使用数据恢复软件extundelete
  12. zabbix mysql默认模板_zabbix默认自带对Mysql数据库监控模板
  13. Wireguard笔记
  14. Win10系统启动Markdown Pad2 报‘Awesomium.Windows.Controls.WebControl’
  15. securable的LOCKED ON,LOCKED OFF,YES,NO四个的区别
  16. 用DOS命令格式化U盘
  17. 德州仪器TI芯片自动下单抢购监控软件技术分析
  18. string的使用介绍
  19. 计算机怎么加项目符号,2010年职称计算机:添加项目符号
  20. 玩转CVM:Web服务搭建

热门文章

  1. 服务器主机是什么系统版本,服务器主机是什么系统
  2. 要留住优秀员工,除了钱,你还可以用什么?
  3. 使用 PHPMailer 配合 QQ邮箱 发送邮件
  4. 木马手工查杀和隐藏控制技术分析
  5. 冗余系统服务器切换的因素,揭秘 | 自动化冗余系统
  6. 管理科学与工程 国内核心期刊 国外a刊及SCI
  7. 逻辑斯谛回归logistic regression-最大熵
  8. Matlab学习——求解微分方程(组)
  9. 采用sFlow工具实现流量监控--实验
  10. Flutter 安卓微信分享提示签名不对