背景:

开发环境大家共用redis集群, 出现设置的redis key随机丢失

1. 检查key是否设置了过期时间

执行ttl key

发现值是-1,并没有设定过期时间

2. 检查是否有人删除key,或者flushdb,flushall

执行info commandstats

  • cmdstat_XXXcalls=XXX,usec=XXX,usec_per_call=XXX

看出命令执行的次数、命令耗费的 CPU 时间(单位毫秒)、执行每个命令耗费的平均 CPU 时间(单位毫秒)

看看del,flushdb,flushall的次数,可能执行的时候已经有大量的调用,先执行config resetstat进行重置

3. 检查内存配置,是否超出内存设定被回收

a. info命令查看

  • evicted_keys: 因最大内存容量限制而被驱逐(evict)的键数量

当时发现evicted keys值大于0,怀疑内存不够

b. 检查是否设置最大内存

执行CONFIG GET maxmemory

c. 检查内存使用

执行info memory, 可以看到当前使用内存量,和峰值

d.看到设定了最大内存,内存也将要接近并且曾经的峰值非常大, 那就需要看看设定的淘汰策略

执行config get maxmemory-policy

发现设定的淘汰策略为: allkeys-lru

Redis提供6种数据淘汰策略:

  1. volatile-lru:从已设置过期时间的内存数据集中挑选最近最少使用的数据 淘汰;
  2. volatile-ttl: 从已设置过期时间的内存数据集中挑选即将过期的数据 淘汰;
  3. volatile-random:从已设置过期时间的内存数据集中任意挑选数据 淘汰;
  4. allkeys-lru:从内存数据集中挑选最近最少使用的数据 淘汰;
  5. allkeys-random:从数据集中任意挑选数据 淘汰;
  6. no-enviction(驱逐):禁止驱逐数据。(默认淘汰策略。当redis内存数据达到

至此大概率确认是内存不够导致KEY被删除。

列举2种解决方案:

1. 调整合适的策略,内存不足清除过期的key

执行 config set maxmemory-policy volatile-lru

2. 设置更大的内存

CONFIG SET maxmemory XXXX

结果:

调整策略为volatile-lru后,经过观察,设定的key没有再出现丢失。

参考:

https://www.jianshu.com/p/ca7e15348323

https://www.cnblogs.com/mushroom/p/4738170.html

https://blog.csdn.net/wufaliang003/article/details/80742978

记一次开发环境redis出现key丢失排查相关推荐

  1. 利用Kubernetes搭建便携式开发环境之MySQL和Redis

    之前给大家介绍过, 我自己用的开发环境都是容器化的,只不过前两年不会用K8,大部分都是用的 Docker 或者 Docker-Compose.随着这一年多对 K8 的学习和工作中的使用,一直有想法用K ...

  2. SAP开发环境ABAP的搭建(客户端和服务器),Developer Key和AccessKey的绕过方法

    目录 一.前言 二.客户端GUI安装 1.下载好SAP GUI 750 2.解压后找到SAPGUISetup.exe 3.安装 4.安装完整教程 三.服务端搭建 1.安装VmWare虚拟机 2.下载虚 ...

  3. 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP开发环境)

    文章来源:https://segmentfault.com/a/1190000000606752 OS X Mavericks 重新安装系统,在苹果商店下载好OS X Mavericks安装文件,然后 ...

  4. 【Spring Boot2.x】整合redis、mybatisPlus这篇文章就够了【真实开发环境实用】

    概述 - 采用springboot2.2.4.RELEASE版本,采用lettuce对redis进行整合,并且使用mybatisPlus实战- - 源码地址:https://github.com/Bl ...

  5. 记一次线上环境 redis偶尔连接超时报错 解决

    记一次线上环境 redis偶尔连接超时报错 解决 贴出本地控制台日志 说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题 因为程序为 springboot 2 spring ...

  6. 区块链100讲:如何使用开发环境命令行注册EOS靓号及变更EOS账号的active key和owner key?

    1 摘要 [本文目标] 通过本文学习,程序员可以在EOS本地环境完成主网心意的12位EOS账号注册,并且可以通过EOS本地环境完成EOS注册账号的active key和owner key的变更. 在E ...

  7. 记一次Qt5.12.2 Android 开发环境配置

    记一次Qt Android开发环境配置 文章目录 记一次Qt Android开发环境配置 前言 一.配置需要的安装包及测试环境 二.配置步骤 1安装Qt5.12.2 2.安装Java SDK 3.解压 ...

  8. HUAWEI 擎云L420 折腾记 (搭建arm gcc、openocd 雅特力 MCU开发环境)

    HUAWEI 擎云L420 折腾记 前言 1. java 环境 2. python 3. C++/C 4. arm-gcc-none-eabi mcu开发 5. 雅特力修改的atlink版 openo ...

  9. elementary安装Java,使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)...

    前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...

最新文章

  1. 您有一个新的订单mp3在线_Airtable,不仅仅是强大的在线表格应用,而是一个新物种...
  2. Python让你成为AI 绘画大师,简直太惊艳了!(附代码))
  3. java汉字转换成拼音_Java代码将汉字转换成拼音
  4. Webservices
  5. 并发用户数和TPS的关系
  6. 假如我是面试官,我会这样虐你
  7. Qt学习笔记之QChar
  8. 【uni-app】H5中使用videojs播放器播放视频
  9. 关于Sleuth的几个问题
  10. 计算机网络实训简介,计算机网络实验报告介绍.doc
  11. keras callback中的stop_training
  12. UbuntuSkills
  13. linux怎样重启命令,Linux重启命令介绍
  14. python导入Wordcloud包
  15. Allegro PCB设计中Etch层走线阻焊开窗的一种方法
  16. Unity3D Content Size Fitter的坑
  17. winform抓取淘宝宝贝详细页的上下架时间等信息
  18. 蜂鸣器电路中有大内容
  19. Ubuntu系统重装Ubuntu系统
  20. RFSoC全面解析(八)—— ZCU111 RFSoC评估工具的上位机界面

热门文章

  1. ANTLR4 入门学习(一):下载和测试
  2. vs2017 fatal error LNK1104: 无法打开文件“\.obj”
  3. 投资者书单:用大师的智慧武装头脑
  4. 计算机中线性结构定义,数据结构基本概念
  5. JavaScript中的触发事件
  6. 小白快速变大神,零基础菜鸟应该怎么学编程
  7. 大数据技术背景介绍(开号篇)
  8. ubuntu-安装Wine
  9. Java 9 - JShell介绍
  10. 2022国赛数学建模A题B题C题资料思路汇总(含有代码可运行)