现象

生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降。

排查与分析

通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然很高,所以排除了内存碎片率的问题。

然后在info memory命令返回数据中,看到 number_of_cached_scripts 这个指标特别高,有987W,也就是说业务使用script load命令在redis服务端缓存了987W个lua脚本,占用了大量内存,因此不管怎么清理数据,内存使用率无法下降。

经过和业务沟通证实,他们未正确理解script load命令导致将每条执行的lua脚本都调用该命令进行了缓存。

调用 SCRIPT FLUSH 命令清除缓存的lua脚本即可。

script load正确使用

会被大量重复使用的lua脚本,尤其并且脚本本身比较大的情况下,应该先使用script load命令将lua脚本在redis服务端进行缓存,然后每次重复执行时,使用evalsha命令,可减少redis服务端流入流量。

redis缓存lua脚本过多导致内存占用很多问题的更多相关文章

  1. .Net Core使用分布式缓存Redis:Lua脚本

    一.前言 运行环境window,redis版本3.2.1.此处暂不对Lua进行详细讲解,只从Redis的方面讲解. 二.Redis的Lua脚本 在Redis的2.6版本推出了脚本功能,允许开发者使用L ...

  2. 要想用活Redis,Lua脚本是绕不过去的坎

    前言 Redis 当中提供了许多重要的高级特性,比如发布与订阅,Lua 脚本等.Redis 当中也提供了自增的原子命令,但是假如我们需要同时执行好几个命令的同时又想让这些命令保持原子性,该怎么办呢?这 ...

  3. redis中lua脚本的简单使用

    一.背景 在使用redis的过程中,发现有些时候需要原子性去操作redis命令,而redis的lua脚本正好可以实现这一功能.比如: 扣减库存操作.限流操作等等. redis的pipelining虽然 ...

  4. Redis结合Lua脚本实现高并发原子性操作

    从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚 ...

  5. 快速入门Redis调用Lua脚本及使用场景介绍

    Redis 是一种非常流行的内存数据库,常用于数据缓存与高频数据存储.大多数开发人员可能听说过redis可以运行 Lua 脚本,但是可能不知道redis在什么情况下需要使用到Lua脚本. 一.阅读本文 ...

  6. Linux下php-fpm进程过多导致内存耗尽问题

    这篇文章主要介绍了解决Linux下php-fpm进程过多导致内存耗尽问题,需要的朋友可以参考下   最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是 ...

  7. 【spring boot】【redis】spring boot基于redis的LUA脚本 实现分布式锁

    spring boot基于redis的LUA脚本 实现分布式锁[都是基于redis单点下] 一.spring boot 1.5.X 基于redis 的 lua脚本实现分布式锁 1.pom.xml &l ...

  8. PHP中使用redis执行lua脚本示例

    摸索了一下在PHP中如何使用redis执行lua脚本,写了一个脚本如下,供以后参考 <?php $redis = new Redis(); #实例化redis类 $redis->conne ...

  9. XCode编译文件过多导致内存吃紧解决方法

    XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧

  10. 选择合适Redis数据结构,减少80%的内存占用

    redis作为目前最流行的nosql缓存数据库,凭借其优异的性能.丰富的数据结构已成为大部分场景下首选的缓存工具. 由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观.那么在 ...

随机推荐

  1. tif文件拼接+转换成netcdf格式

    2022-11-16 11:33 手上有若干个SRTM1V3.0 的高程数据,为HGT格式,需要将其拼接并转换成netcdf格式,以让ncl能够进行读取 步骤: gdal_translate A.hg ...

  2. jeecgboot <j-popup

    <a-col :span="24"> <a-form-item label=" 规格" :labelCol="labelCol&qu ...

  3. 金蝶K3无法查看关联信息

    场景: 某个用户点击采购订单界面--关联信息,界面显示正在加载,但是无法显示所有关联单据. 步骤: 1. 在其他电脑登录存在同样问题. 2. 其他模块可以正常显示 3. 删除该用户t_UserProf ...

  4. Json数组转List

    List<Person> list = obj.list.ToObject<List<Person>>()

  5. 【C++复习】第八章 多态性(1)(多态类型、运算符重载)

    1.多态性 1.1 什么是多态? 多态是指相同消息被不同对象接收后导致不同的行为,所谓消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数. 消息在C++编程中指的是对类的成员 ...

  6. viewpager加fragment可滑动加radio跟随滑动

    public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, V ...

  7. Typora+PicGo+GitHub

    图片可以成功上传github,但是picgo相册无法预览,typora里也加载不出 image load failed 方法: 在`C:\Windows\System32\drivers\etc\ho ...

  8. Java本地缓存解决方案---使用Google的CacheBuilder

    一.背景 当业务实现上需要用到本地缓存,来解决一些数据量相对较小但是频繁访问数据的场景,可以采用Google的CacheBuilder解决方案. 二.代码实现 1. 首先在maven中引入下面的包 & ...

  9. 全新BPMN常用图形标识一览表

    BPMN符号与BPMN的关系 BPMN,即业务流程建模与标记(手法),表达此类手法的即是业务流程模型示意图.业务流程示意图是由一系列的元素符号构成.作为BPMN的基础,这些符号将业务流程建模简单化.图 ...

  10. MySQL 打开慢查询 主从同步状态

    MySql 打开慢查询 set global log_output='FILE'; SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time ...