简单的 redis get 为什么也会有秒级的延迟

Redis使用过程中,经常遇到的延迟问题到底该如何定位和分析? Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。 很多时候,Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。 这篇文章我们就来分析一下Redis在使用过程中,经常会遇到的延迟问题以及如何定位和分析。 开始之前,记得点赞收藏加关注哦 ,需要下载PDF版本和获取更多知识点、面试题的朋友可以点一点下方链接免费领取 链接:点这里!!! 79 阅读详情

公司内有多个 go-redis 的 client 和多种 redis cluster 版本,业务压测发现即使只访问 redis 的 API 接口也可能会延迟达到秒级,非常反直觉。

我们用不同版本的 go-redis 和不同版本的 redis cluster 来简单做个压测,redis 命令用简单的 get,kv 大小都是一个字节,这里把数据先放出来:

Client 版本

Server 版本

平均延迟

qps

v6

5.0

2.58ms

42138.85

v8

5.0

2.29ms

43567.68

v6

6.0

549.22ms

117

v8

6.0

2.48ms

41794.86

可以看到第三行数据异常,访问 redis 竟然有 500ms,说明如果 client 和 server 版本没没对上确实会有比较麻烦的问题。

下面我们来分析一下这个问题。

压测环境准备

安装 redis-server,没啥可说的,不要用 mac 的 brew,因为 brew 安装的版本没有 create-cluster 脚本工具。从官网下载分发版本就可以,在 mac 上到 redis 根目录执行一次 make 就好。

这里我们只测试server 5.0 和 6.0。

进入到 redis 的 utils/create-cluster 目录,直接执行

./create-cluster start
./create-cluster create

默认应该是启动三主三从,启动了以后随便连一个实例就可以进去了

~ ❯❯❯ redis-cli -c -p 30001
127.0.0.1:30002> set 1 1

提前把 kv 存好,然后用 30001,30002,30003 这三个实例来创建 client。

client 端要分别准备 go-redis/redis 和 go-redis/redis/v8。

v6 版本:

package main

import (
        "fmt"
        "log"
        "net/http"

        _ "net/http/pprof"

        "github.com/go-redis/redis"
)

var cli = redis.NewClusterClient(&redis.ClusterOptions{
        Addrs:        []string{"127.0.0.1:30001", "127.0.0.1:30002", "127.0.0.1:30003"},
})

func sayhello(wr http.ResponseWriter, r *http.Request) {
        s := cli.Get( "1")
        err := s.Err()
        if err != nil {
                fmt.Println(err)
        }
}

func main() {
        http.HandleFunc("/", sayhello)
        err := http.ListenAndServe(":10003", nil)
        if err != nil {
                log.Fatal("ListenAndServe:", err)
        }
}

v8 版本:

package main

import (
        "context"
        "fmt"
        "log"
        "net/http"

        _ "net/http/pprof"

        "github.com/go-redis/redis/v8"
)

var cli = redis.NewClusterClient(&redis.ClusterOptions{
        Addrs:        []string{"127.0.0.1:30001", "127.0.0.1:30002", "127.0.0.1:30003"},
})

func sayhello(wr http.ResponseWriter, r *http.Request) {
        s := cli.Get(context.TODO(), "1")
        err := s.Err()
        if err != nil {
                fmt.Println(err)
        }
}

func main() {
        http.HandleFunc("/", sayhello)
        err := http.ListenAndServe(":10003", nil)
        if err != nil {
                log.Fatal("ListenAndServe:", err)
        }
}

启动之后直接用 wrk 就可以了:

~ ❯❯❯ wrk -t10 -c100 -d60 http://localhost:10003

分别对不同版本的 client 和 server 端排列组合压测,就可以得到本文开头的数据表格了。

为啥 v6 的 go-redis/redis 配合 server 6.0 cluster 会有这么大的延迟?先用 pprof 看一下,压测的时候 goroutine 都在干什么:

goroutine profile: total 205
100 @ 0x1047b2c88 0x1047ac364 0x1047dc484 0x10481f31c 0x10481fe54 0x10481fe45 0x1048a511c 0x1048af4b8 0x104944678 0x1047e1c94
#0x1047dc483internal/poll.runtime_pollWait+0xa3/usr/local/go/src/runtime/netpoll.go:302
#0x10481f31binternal/poll.(*pollDesc).wait+0x2b/usr/local/go/src/internal/poll/fd_poll_runtime.go:83
#0x10481fe53internal/poll.(*pollDesc).waitRead+0x1e3/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
#0x10481fe44internal/poll.(*FD).Read+0x1d4/usr/local/go/src/internal/poll/fd_unix.go:167
#0x1048a511bnet.(*netFD).Read+0x2b/usr/local/go/src/net/fd_posix.go:55
#0x1048af4b7net.(*conn).Read+0x37/usr/local/go/src/net/net.go:183
#0x104944677net/http.(*connReader).backgroundRead+0x47/usr/local/go/src/net/http/server.go:672

69 @ 0x1047b2c88 0x1047c43a4 0x1047c4381 0x1047dddc8 0x1047f27a0 0x10499b324 0x10499b2bd 0x1049ab318 0x1049a226c 0x1049a25dc 0x1049a2830 0x1049a2748 0x1049ab744 0x1049b00ec 0x10494b06c 0x10494c744 0x10494d95c 0x10494a05c 0x1047e1c94
#0x1047dddc7sync.runtime_SemacquireMutex+0x27/usr/local/go/src/runtime/sema.go:71
#0x1047f279fsync.(*Mutex).lockSlow+0x17f/usr/local/go/src/sync/mutex.go:162
#0x10499b323sync.(*Mutex).Lock+0xa3/usr/local/go/src/sync/mutex.go:81
#0x10499b2bcgithub.com/go-redis/redis/internal.(*Once).Do+0x3c/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/internal/once.go:50
#0x1049ab317github.com/go-redis/redis.(*cmdsInfoCache).Get+0x47/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/command.go:1963
#0x1049a226bgithub.com/go-redis/redis.(*ClusterClient).cmdInfo+0x2b/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:754
#0x1049a25dbgithub.com/go-redis/redis.(*ClusterClient).cmdSlotAndNode+0x5b/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:790
#0x1049a282fgithub.com/go-redis/redis.(*ClusterClient).defaultProcess+0xaf/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:918
#0x1049a2747github.com/go-redis/redis.(*ClusterClient).Process+0x37/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:905
#0x1049ab743github.com/go-redis/redis.(*cmdable).Get+0xf3/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/commands.go:756
#0x1049b00ebmain.sayhello+0x3b/Users/sg00186ml/test/go/redis/goredis/v6.go:25
#0x10494b06bnet/http.HandlerFunc.ServeHTTP+0x3b/usr/local/go/src/net/http/server.go:2084
#0x10494c743net/http.(*ServeMux).ServeHTTP+0x143/usr/local/go/src/net/http/server.go:2462
#0x10494d95bnet/http.serverHandler.ServeHTTP+0x3fb/usr/local/go/src/net/http/server.go:2916
#0x10494a05bnet/http.(*conn).serve+0x56b/usr/local/go/src/net/http/server.go:1966

29 @ 0x1047b2c88 0x1047c43a4 0x1047c4381 0x1047dddc8 0x1047f27a0 0x10499b324 0x10499b2bd 0x1049ab318 0x1049a226c 0x1049a24f8 0x1049a25f0 0x1049a2830 0x1049a2748 0x1049ab744 0x1049b00ec 0x10494b06c 0x10494c744 0x10494d95c 0x10494a05c 0x1047e1c94
#0x1047dddc7sync.runtime_SemacquireMutex+0x27/usr/local/go/src/runtime/sema.go:71
#0x1047f279fsync.(*Mutex).lockSlow+0x17f/usr/local/go/src/sync/mutex.go:162
#0x10499b323sync.(*Mutex).Lock+0xa3/usr/local/go/src/sync/mutex.go:81
#0x10499b2bcgithub.com/go-redis/redis/internal.(*Once).Do+0x3c/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/internal/once.go:50
#0x1049ab317github.com/go-redis/redis.(*cmdsInfoCache).Get+0x47/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/command.go:1963
#0x1049a226bgithub.com/go-redis/redis.(*ClusterClient).cmdInfo+0x2b/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:754
#0x1049a24f7github.com/go-redis/redis.(*ClusterClient).cmdSlot+0x147/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:780
#0x1049a25efgithub.com/go-redis/redis.(*ClusterClient).cmdSlotAndNode+0x6f/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:791
#0x1049a282fgithub.com/go-redis/redis.(*ClusterClient).defaultProcess+0xaf/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:918
#0x1049a2747github.com/go-redis/redis.(*ClusterClient).Process+0x37/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/cluster.go:905
#0x1049ab743github.com/go-redis/redis.(*cmdable).Get+0xf3/Users/sg00186ml/go/pkg/mod/github.com/go-redis/redis@v6.15.9+incompatible/commands.go:756
#0x1049b00ebmain.sayhello+0x3b/Users/sg00186ml/test/go/redis/goredis/v6.go:25
#0x10494b06bnet/http.HandlerFunc.ServeHTTP+0x3b/usr/local/go/src/net/http/server.go:2084
#0x10494c743net/http.(*ServeMux).ServeHTTP+0x143/usr/local/go/src/net/http/server.go:2462
#0x10494d95bnet/http.serverHandler.ServeHTTP+0x3fb/usr/local/go/src/net/http/server.go:2916
#0x10494a05bnet/http.(*conn).serve+0x56b/usr/local/go/src/net/http/server.go:1966

还是我以前文章写的,业务的性能问题,大部分都是在锁上,这次的锁是基础库的锁。需要我们简单读一下 go-redis 的代码。

在启动 cluster client 的时候,每一个 cluster client 都有一个叫 cmdsInfoCache 的对象:

// http://redis.io/topics/cluster-spec.
func NewClusterClient(opt *ClusterOptions) *ClusterClient {
   .....

   c := &ClusterClient{
      opt:   opt,
      nodes: newClusterNodes(opt),
   }
   .....
   c.cmdsInfoCache = newCmdsInfoCache(c.cmdsInfo) // 这里
   ......

   return c
}

这个对象在这个 client 上第一次执行任意命令时(我们这里的代码例子是 redis 的 Get 命令),会进行初始化:

// get 命令的实现
func (c *cmdsInfoCache) Get() (map[string]*CommandInfo, error) {
   err := c.once.Do(func() error {
      cmds, err := c.fn()
      if err != nil {
         return err
      }
      c.cmds = cmds
      return nil
   })
   return c.cmds, err
}

可以看到,每个命令的前面几行都要执行这个 c.once.Do 逻辑,这个到底是个啥?

func (c *ClusterClient) cmdsInfo() (map[string]*CommandInfo, error) {
   addrs, err := c.nodes.Addrs() // 获取节点信息,没有网络交互
   if err != nil {
      return nil, err
   }

   var firstErr error
   for _, addr := range addrs {
      node, err := c.nodes.Get(addr)
      ......

      info, err := node.Client.Command().Result()
      ......
   }
   return nil, firstErr
}

这里会向 cluster 中的任意一个节点发送 command 命令,只要有一个节点响应了,就把结果返回,并将其缓存在 c.cmds 对象中了。

函数返回的 err 是空的话,cmdsInfoCache 就初始化完成了,根据 sync.Once 的性质,下次所有命令的 once.Do 就只是简单执行一个 atomic.Load,成本不高。

然而我们在长时间压测之后,发现每次命令还是会卡在锁上,说明这里的 err 是非空的,这是怎么回事?

简单来说,redis server 6.0 给 client 返回的 command 命令的响应,在 go-redis/redis v6 版本 parse 会出错: degradation for not caching command response [1] 。

每次 parse 都出错,那自然每次 once.Do 都会进 slow path 了,redis cluster 的 client 是全局公用,所以这里的锁是个全局锁,并且锁内有较慢的网络调用。

从 PR 中的描述来看,这个修复直接进入了最新的两个 client 版本。按照大多开源社区项目惯例,官方只维护最新的两个版本以避免太多版本同时维护造成开发过重的负担。

Go 语言本身也是这样的,如果你用的不是最新的两个版本之一,给官方报一些诡异的问题,一般也会被劝诫先升到新版本再试试。

Kimi K3大模型API实战:从调用到本地知识库问答系统构建 大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例 阅读详情

相关推荐

Comsol固体力学仿真﹣﹣受均匀内压的厚壁球壳弹塑性分析(加载卸载全流程)

COMSOL固体力学及结构力学仿真较少,故而查询了有关资料,才建立了如下模型。图4 加载卸载全历程中的冯米塞斯应力变化。该有限元模型是通过扫掠而得的结构化网格。图2 加载卸载全历程中的塑型区域变化。图3 加载卸载全历程中的位移应力变化。图6 关键节点第一,第三主应力分布。图5 关键节点应力场与塑性区分布。《弹塑性力学》大作业,记录一下。图1 球体的有限元网格模型。

weixin_62236383的博客 1484

Redis变慢的五大原因以及排查方法

一、 慢操作五大原因 如下图所示,主要分为与操作系统相关以及与Redis集群实例之间与内部相关两个方面 1. Redis实例之间以及内部数据传输阻塞(客户端、磁盘、主从通信、切片集群通信) 解决方法 — 主从集群时,限制主库RDB文件大小。 2. 多CPU多核架构(绑核,绑CPU) 解决方法—绑核绑CPU。 3. sql语句执行阻塞(慢查询、过期key) 解决方法—避免慢查询指令、客户端做聚合、对key设置不同的过期时间、使用异步线程删除bigkey。 4. AOF文件系统,RDB大内存页(A

skye_fly的博客 1万+

CANoe/CANalyzer新手必看:从零配置到报文分析的完整流程(附B站官方教程实操)

本文为CANoe/CANalyzer新手提供从零配置到报文分析的完整流程指南,涵盖硬件连接、工程配置、报文捕获及信号级分析等关键步骤。通过详细的实操案例和B站官方教程,帮助工程师快速掌握汽车电子总线分析工具的核心应用,提升诊断效率与通信系统理解。

y7z8a的博客 771

1、Redis变慢原因排查(上)

感觉Redis变慢了,这些可能的原因你查了没 ?(上)

weixin_45817985的博客 701

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 595

使用C#和ASP.NET创建登录页面

在Visual Studio中,右键单击项目,选择"添加",然后选择"新建项"。在对话框中选择"Web",然后选择"Web 窗体"。在Visual Studio中,右键单击项目,选择"添加",然后选择"新建项"。在Visual Studio中,选择"新建项目",然后选择"ASP.NET Web应用程序"。在上面的代码中,我们创建了一个简单的用户界面,包含一个用户名输入框、一个密码输入框和一个登录按钮。在上面的代码中,我们创建了一个简单的用户界面,包含一个用户名输入框、一个密码输入框和一个登录按钮。

TzData的博客 763

【Redis】浅谈Redis变慢的原因及排查解决方法

​ 本篇文章给大家带来了关于Redis的相关知识,其中主要介绍了浅谈Redis变慢的原因及排查方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面一起来看一下,希望对大家有帮助。

欢迎来到 程序猿 的博客 4021

RK3566 Android11默认客户Launcher修改

【代码】RK3566 Android11默认客户Launcher修改。

Android系统开发笔记 1722

Redis 突然变慢了如何排查并解决?

作者 | 码哥字节来源 | 码哥字节Redis 通常是我们业务系统中一个重要的组件,比如:缓存、账号登录信息、排行榜等。一旦 Redis 请求延迟增加,可能就会导致业务系统“雪崩”。最近遇...

优快云云计算 1294

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 123

ARINC429协议分析

如下表所示,ARINC429在发送一帧过程中,首先发送以START开始,以END结束,共发送32bits数据,其中0~7bits为Lable数据,9~8bits为SDI数据,10~28bits为数据,29~30bits为SSM,31bit为校验位End30292827262524校验位SSM2322212019181716DATA15141312111098SDI7654321Start。

5221

hget和get redis_redis hget阻塞 使用redis时遇到的问题 - Redis - 服务器之家

redis hget阻塞 使用redis时遇到的问题发布时间:2017-03-20来源:服务器之家1,redis 报异常redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value@Testpublic void test_fa...

weixin_39588679的博客 782

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2315

Redis 延迟监控深度指南

Redis内置延迟监控(Latency Monitor)可精确追踪命令执行、持久化操作等关键事件的延迟峰值,帮助开发者定位性能瓶颈。该功能通过160个时间桶记录事件类型、时间戳和延迟时长,支持毫秒级精度分析。启用仅需配置阈值,提供LATEST、HISTORY、GRAPH等指令实时查看数据。典型应用场景包括大命令阻塞、fork卡顿、AOF同步延迟等问题的诊断,配合DOCTOR指令可获取优化建议。最佳实践建议持续开启监控,结合SLA设置合理阈值,并集成到告警系统。该工具将Redis从黑盒变为白盒,是保障服务稳定

hello.reader 1193

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

hget和get redis_redis get hget 区别

下标是从 0 开始 的,接着上面例子 redis>substr k 0 8 "hello,wor" redis> get k "hello,world" 3. list redis 的 list 类型其实就是一个每个子元素都......String – >SET NG “NewGrand” – >ok – >GET NG –“NewGrand” Redis常用命令 ?...

weixin_39586235的博客 3047

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

你的Redis为什么变慢了?常见延迟问题定位与分析

Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。 很多时候,Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。 这篇文章我们就来分析一下Redis在使用过程中,经常会遇到的延迟问题以及如何定位和分析。 使用复杂度高的命令 如果在使用Redis时,发现访问延迟突然增大,如何进行排查? 首先,第一步,建议你去查看一下Redis

sunny的专栏 1347

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Redis为什么变慢了?常见延迟问题定位与分析

Redis性能

qq_23350817的博客 1820

Redis 延迟排查与优化全攻略

Redis延迟优化全景指南:从基线测试到分层治理 本文系统梳理Redis延迟问题的排查与优化方法。首先强调通过--intrinsic-latency测试确定系统基础延迟水平,提供5分钟速查清单快速定位常见问题。通过全景图分析延迟来源,分为内部慢命令、系统内核和外部网络三类。详细介绍了Slow Log、Latency Monitor等诊断工具的使用,并针对慢命令、fork卡顿、AOF fsync等典型场景给出优化方案。最后从系统配置、Redis参数、客户端使用等方面提出生产环境调优建议,强调基线测试、分层治理

hello.reader 1175

Redis中常见的延迟问题

使用复杂度高的命令,执行命令时就会耗时存储大key:如果一个key写入的数据非常大,Redis在分配内存、删除大key时都会耗时,并且持久化AOF的写回策略是always时会影响Redis性能集中过期:Redis的主动过期的定时任务,是在Redis主线程中执行的,最差的情况下会有25ms的阻塞实例内存达到上限时,淘汰策略的逻辑都是在访问Redis时,真正命令执行之前执行的,也就是它会影响真正需要执行的命令。

kfashfasf的博客 915

为什么我的Redis这么“慢”?常见延迟问题定位与分析

你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草来源:kaito-kidd.com/推荐:https://www.xtt...

xmt1139057136的专栏 1862

Redis-排查Redis为什么变慢了

Redis为什么变慢了?常见延迟问题定位与分析 Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Redis 的内部实现原理,在排查问题时就会一头雾水。 Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。 以下这篇文章我们就来分析一下 Redis 在使用过程中,经常会遇到的延迟问题以及如何定位和分析。 文章目录链路追踪基准性能使用了复杂度过高的命令操作、存储大的bigkey大量数据集

养歌的博客 2583

Redis 响应延迟

Redis 2.8.7 后, 提供基线性能工具 : - 监测和统计测试期间内的最大延迟 影响 Redis 性能的三要素 : - Redis 自身的操作特性 - 文件系统 : AOF 写回策略 - 操作系统 : Swap , 内存大页

记录点点滴滴 1465
上一篇: 新来个技术总监,把DDD落地的那叫一个高级,服气!
下一篇: 图解 Kafka 网络层实现机制之上篇
Java5658
博客等级 码龄4年 169粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值