redis缓存lua脚本过多导致内存占用很多问题
现象
生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降。
排查与分析
通过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脚本过多导致内存占用很多问题的更多相关文章
- .Net Core使用分布式缓存Redis:Lua脚本
一.前言 运行环境window,redis版本3.2.1.此处暂不对Lua进行详细讲解,只从Redis的方面讲解. 二.Redis的Lua脚本 在Redis的2.6版本推出了脚本功能,允许开发者使用L ...
- 要想用活Redis,Lua脚本是绕不过去的坎
前言 Redis 当中提供了许多重要的高级特性,比如发布与订阅,Lua 脚本等.Redis 当中也提供了自增的原子命令,但是假如我们需要同时执行好几个命令的同时又想让这些命令保持原子性,该怎么办呢?这 ...
- redis中lua脚本的简单使用
一.背景 在使用redis的过程中,发现有些时候需要原子性去操作redis命令,而redis的lua脚本正好可以实现这一功能.比如: 扣减库存操作.限流操作等等. redis的pipelining虽然 ...
- Redis结合Lua脚本实现高并发原子性操作
从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚 ...
- 快速入门Redis调用Lua脚本及使用场景介绍
Redis 是一种非常流行的内存数据库,常用于数据缓存与高频数据存储.大多数开发人员可能听说过redis可以运行 Lua 脚本,但是可能不知道redis在什么情况下需要使用到Lua脚本. 一.阅读本文 ...
- Linux下php-fpm进程过多导致内存耗尽问题
这篇文章主要介绍了解决Linux下php-fpm进程过多导致内存耗尽问题,需要的朋友可以参考下 最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是 ...
- 【spring boot】【redis】spring boot基于redis的LUA脚本 实现分布式锁
spring boot基于redis的LUA脚本 实现分布式锁[都是基于redis单点下] 一.spring boot 1.5.X 基于redis 的 lua脚本实现分布式锁 1.pom.xml &l ...
- PHP中使用redis执行lua脚本示例
摸索了一下在PHP中如何使用redis执行lua脚本,写了一个脚本如下,供以后参考 <?php $redis = new Redis(); #实例化redis类 $redis->conne ...
- XCode编译文件过多导致内存吃紧解决方法
XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧
- 选择合适Redis数据结构,减少80%的内存占用
redis作为目前最流行的nosql缓存数据库,凭借其优异的性能.丰富的数据结构已成为大部分场景下首选的缓存工具. 由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观.那么在 ...
随机推荐
- git lock fail解决
本地多个分支,remote .remote tracking.local checkout了2个不同版本分支,发现最后版本却是相同的,然后pull时报git lock fail, 看来发送了冲突了,删 ...
- wait notify 实例,生产消费者模式(转)
今天发现了一段很标准的多线程代码,记得以前也写过,但是没有这个这么小巧和标准. import java.util.LinkedList; import java.util.Queue; import ...
- 在windows如何下载android源码
如链接https://blog.csdn.net/freekiteyu/article/details/70939672
- source 跳过登录账号的方法
1 安装 git windows 选择版本为 Git-2.29.2.2-64-bit 2 启动sourcetree 的安装 选择版本为 SourceTreeSetup-2.5.5 2.1 第一次启动 ...
- php redis使用 常用方法 | Windows环境下安装Redis | Windows下php安装redis扩展(详解版)
redis可视化工具:http://www.treesoft.cn/dms.html #php redis使用 常用方法 https://www.cnblogs.com/mg007/p/1043107 ...
- Onur Mutlu 18-447 Lecture9 分支预测-1
=============== 第一部分:branch prediction =========== 1. 最简单的分支预测:总是预测下一条指令的地址在 PC+4 如何让这种分支预测更加有效呢? Id ...
- UCF Local Programming Contest 2018 C. First Last Sorting 思维、简单DP
C. First Last Sorting链接:https://nanti.jisuanke.com/t/44141
- javaweb自学书籍推荐
第一部分:Java语言篇 1.<Java编程规范> 适合对象:初级.中级 介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错. 2.&l ...
- 【ADB命令】安装app
在电脑上安装以下指令 adb install app的文件位置
- nginx 配置react项目 并且开启gzip压缩
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...