Redis 是单线程的。那我为什么要用生菜呢?

2023-11-24

Redis 4.0之后,Redis可以多线程执行一些功能(1.删除后台对象等),但Redis通常仍然使用单线程。常见问题解答-Redis

所以我觉得生菜没什么用。 Lettuce 是 Redis 客户端,可以在 1 个连接中使用多个线程,但 Redis 只能在 1 个连接中使用单线程。

你能推荐Redis客户端使用lettuce吗?为什么?


因为您不仅花费时间在 Redis 执行命令上,还花费时间传输数据(发送命令、接收结果)。在单线程模式下,当您传输时,Redis 不起作用。当 Redis 工作时,不会发生任何传输。多个连接或一个管道连接可帮助您使带宽和 CPU 周期饱和。

luttece 不仅仅关乎速度。它还可以帮助您使用异步和反应式 API 更好地组织代码。

回到性能主题,here是一个简单的基准测试,可让您大致了解线程和池的影响。请注意,虽然池化速度有点慢(您在池操作上花费一些时间),但它允许您隔离操作(因此错误不会影响其他线程)并使用MULTI和阻止命令。

这是我的结果(本地系统有 4 个核心,远程系统 CPU 大约慢 2 倍):

线程=1

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  35389.995 ± 1325.198  ops/s
LettuceThreads.pooled  localhost  thrpt   25  32075.870 ±  416.220  ops/s
LettuceThreads.pooled     remote  thrpt   25   3883.193 ±   67.622  ops/s
LettuceThreads.shared     socket  thrpt   25  39419.772 ± 1966.023  ops/s
LettuceThreads.shared  localhost  thrpt   25  34293.245 ± 1737.349  ops/s
LettuceThreads.shared     remote  thrpt   25   3919.251 ±   49.897  ops/s

线程=2

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  56938.187 ± 2727.772  ops/s
LettuceThreads.pooled  localhost  thrpt   25  49420.748 ± 2091.631  ops/s
LettuceThreads.pooled     remote  thrpt   25   7791.706 ±  133.507  ops/s
LettuceThreads.shared     socket  thrpt   25  81195.900 ± 1593.424  ops/s
LettuceThreads.shared  localhost  thrpt   25  78404.688 ± 3878.044  ops/s
LettuceThreads.shared     remote  thrpt   25   3992.023 ±   39.092  ops/s

线程=4

Benchmark              (address)   Mode  Cnt       Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25   87345.126 ± 8149.009  ops/s
LettuceThreads.pooled  localhost  thrpt   25   75003.031 ± 4481.289  ops/s
LettuceThreads.pooled     remote  thrpt   25   15807.410 ±  225.376  ops/s
LettuceThreads.shared     socket  thrpt   25  169112.489 ± 3749.897  ops/s
LettuceThreads.shared  localhost  thrpt   25  115464.778 ± 5099.728  ops/s
LettuceThreads.shared     remote  thrpt   25    7952.492 ±  133.521  ops/s

您可以在这里看到,性能随着线程数量的增加而变化得非常好,因此生菜并非毫无用处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 是单线程的。那我为什么要用生菜呢? 的相关文章

  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • socket.io redis 和内存泄漏

    我的socket io版本是 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protection 我在 Windows 上 在某些地方 我看到问题已得到解决 我
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • 如何统计 Redis 流中未读或已确认的消息?

    使用 Redis 5 0 3 假设我们创建一个名为streamy和一个消费群体consumers XGROUP CREATE streamy consumers MKSTREAM 然后向其中添加一些消息 XADD streamy messa
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 有没有办法在 ruby​​ 中重新定义 []=+

    我正在尝试编写一个简单的 DSL 针对 Redis 并且我想自己定义 I have def key val redis zadd name val key end 我想定义 def key val redis zincrby name va
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为

随机推荐

  • 用于参数化继承的元类

    我读过一些关于 Python 元类的教程 我以前从未使用过 但我需要一个来完成相对简单的事情 并且所有教程似乎都面向更复杂的用例 我基本上想创建一个具有一些预先指定的主体的模板类 但将其基类作为参数 由于我从 C D 模板中得到了这个想法
  • 我如何在简单的 php 函数中使用“依赖注入”,我应该打扰吗?

    我一直听到人们谈论依赖注入及其好处 但我并不真正理解它 我想知道这是否是 我始终将数据库连接作为参数传递 问题的解决方案 我尝试阅读维基百科的条目 但该示例是用 Java 编写的 因此我不太清楚它试图阐明的差异 http en wikipe
  • 使用 Win32 处理 Ctrl+C

    I have a Win32 window message loop I want to intercept Copy to clipboard via CTRL C My current approach is to handle it
  • symfony2 文件因表单错误而丢失

    我正在使用与学说相关的文件上传的标准实现 按照 symfony2 网站教程上的示例 当我的上传表单在验证中遇到错误 并将用户发送回带有错误消息的表单时 它会丢失选择上传的文件 尽管如果我 var dump 我的 entity gt file
  • 如何使用正则表达式替换字符串中的最后一个点?

    我正在尝试使用正则表达式替换字符串中的最后一个点 假设我有以下字符串 String string hello world how are you 我想用感叹号替换最后一个点 结果是 hello world how are you 我使用该方
  • 带有自定义 ArrayAdapter 的微调器,适用于不显示所选项目的对象

    我有一个自定义 ArrayAdapter 来表示微调器控件上的对象 我可以加载我的项目 列表并显示它以供选择 但是当实际选择发生时 微调器什么也不显示 活动代码 public MetroData metroData private Spin
  • 为什么某些项目在 Spy++ 的 Windows 视图中呈灰色?

    要修改另一个程序的窗口 我需要找到一个特定的SysTreeView32在其中使用EnumChildWindowsAPI 调用 当我使用 Spy 检查窗口时 有很多SysTreeView32位于其中 但除了我正在寻找的一个之外 所有其他都呈灰
  • Rails:无法提交通过 Ajax 加载的远程表单

    Goal 我有一个包含来自 Rails 后端的项目列表的页面 我希望能够通过 Rails UJS 使用 Ajax 调用来编辑该列表中的一行 Approach 我在每行的末尾添加了一个编辑按钮 编辑按钮是一个link to remote gt
  • 生成随机加权值

    Edit 我重写了这个问题 希望目标更清晰一些 这是这个问题的扩展问题here 我真的很喜欢中提供的功能这个答案 在上面的答案中 我们可以设置达到极限的概率 较高的数字产生较高的概率获得较低的数字 反之亦然 问题是我必须设置 3 组的概率
  • 如何在 Perl 中创建哈希的哈希?

    根据我目前对 Perl 中哈希值的理解 我希望这段代码能够打印 hello world 它什么也不打印 a b b str hello a 1 b b b str world a 2 b print a 1 str a 2 str 我假设哈
  • 如何在Eclipse中设置SplashScreen?

    我的应用程序会在启动主窗口之前加载启动屏幕 如何设置 Eclipse 中运行的启动屏幕 NetBeans 中有一个位置可以放置 splash splashScreen png 以便应用程序可以从 SplashScreen 启动 Eclips
  • 在页面中央显示图像

    我有一个图像 加载图像 我希望该图像显示在页面的中心 我怎样才能做到这一点 我写的代码是 img loading position absolute left 0px top 0px z index 1 如何让该图片始终显示在页面中央 发现
  • TypeScript 编译器对 let 的计算方式与 const 不同

    以下是鲍里斯 切尔尼 Boris Cherny 的第 64 页编程 TypeScript 考虑这样的 JavaScript 函数 function warnUser warning if warnUser wasCalled return
  • 如何使用Android的CacheManager?

    我目前正在开发一个使用 http 请求获取图像的 Android 应用程序 如果我可以缓存这些图像以提高性能和带宽使用 那就太好了 我在 Android 参考中遇到了 CacheManager 类 但我真的不知道如何使用它 也不知道它的真正
  • 在Python中创建一个具有最大长度的空双端队列?

    我正在查看 Python 双端队列的文档 看起来构造函数是deque iterable maxlen 是否没有办法创建一个具有最大长度的空双端队列 即 不指定可迭代对象 您可以直接提供列表文字 因此不必在单独的行上声明任何内容 gt gt
  • 按任意时间间隔对 DateTime 进行分组

    我有一个项目类的 IEnumerable 定义如下 public class Item public DateTime Date get private set public decimal Value get private set pu
  • WPF:将虚拟文件拖放到 Windows 资源管理器中

    我正在开发一个类似于 dropbox 的应用程序 并在 WPF 列表视图上显示远程文件 我想将这些元素拖放到 Windows 资源管理器中 我见过这样的代码 var dataObject new DataObject DataFormats
  • 在 Windows 8.1 中运行 Visual Studio 6 C++

    我最近将系统迁移到 Windows 8 1 不幸的是 像其他人一样 我无法再启动 Visual Studio 6 软件在启动时崩溃 闪屏 我知道有一些解决方法 可以在较新的 IDE 中使用 vc6 进行编译 但这对我不起作用 因为我必须编译
  • IIS Express 为每个请求加载和卸载模块

    我们有一个 ASP NET 项目在调试时使用 IIS Express 启动VS2013 然后加载解决方案 构建解决方案并在调试模式下启动Web应用程序后 输出窗口列出了一堆已加载和卸载的DLL 经过一番搜索后 我发现 IIS Express
  • Redis 是单线程的。那我为什么要用生菜呢?

    Redis 4 0之后 Redis可以多线程执行一些功能 1 删除后台对象等 但Redis通常仍然使用单线程 常见问题解答 Redis 所以我觉得生菜没什么用 Lettuce 是 Redis 客户端 可以在 1 个连接中使用多个线程 但 R