💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## redis变慢的原因 * 使用复杂度过高的命令 ~~~ 设置慢日志的阈值   命令执行耗时超过 5 毫秒,记录慢日志 CONFIG SET slowlog-log-slower-than 5000 只保留最近 500 条慢日志 CONFIG SET slowlog-max-len 500 (1)经常使用 O(N) 以上复杂度的命令,例如 SORT、SUNION、ZUNIONSTORE 聚合类命令 (2)使用 O(N) 复杂度的命令,但 N 的值非常大(注:N<=300最佳) ~~~ * 操作bigkey 插入数据分配内存时比较耗时,删除数据释放内存也会比较耗时 * 集中过期 主动过期策略的原因 **这个主动过期 key 的定时任务,是在 Redis 主线程中执行的**。 也就是说如果在执行主动过期的过程中,出现了需要大量删除过期 key 的情况,那么此时应用程序在访问 Redis 时,必须要等待这个过期任务执行结束,Redis 才可以服务这个客户端请求。此时就会出现,应用访问 Redis 延时变大。 * 实例内存达到上限 配置了**maxmemory**,设置了内存淘汰策略,写入是延迟变大,当 Redis 内存达到 maxmemory 后,每次写入新的数据之前,**Redis 必须先从实例中踢出一部分数据,让整个实例的内存维持在 maxmemory 之下**,然后才能把新数据写进来 * fork耗时严重 ~~~ 操作 Redis 延迟变大,都发生在 Redis 后台 RDB 和 AOF rewrite 期间**,那你就需要排查,在这期间有可能导致变慢的情况。 当 Redis 开启了后台 RDB 和 AOF rewrite 后,在执行时,它们都需要主进程创建出一个子进程进行数据的持久化。 主进程创建子进程,会调用操作系统提供的 fork 函数。 而 fork 在执行过程中,**主进程需要拷贝自己的内存页表给子进程**,如果这个实例很大,那么这个拷贝的过程也会比较耗时。 ~~~ 补充: 什么是内存大页? 我们都知道,应用程序向操作系统申请内存时,是按**内存页**进行申请的,而常规的内存页大小是 4KB。 Linux 内核从 2.6.38 开始,支持了**内存大页机制**,该机制允许应用程序以 2MB 大小为单位,向操作系统申请内存。 应用程序每次向操作系统申请的内存单位变大了,但这也意味着申请内存的耗时变长。 内容来源:https://mp.weixin.qq.com/s/iYCiaa53nXWugU5uTHjeSw