Redis server went away 查看系统日志文件时发现每天定时有该错误抛出: PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away' 抛出该问题的脚本为统计脚本,需要读取前一天数据并入库,最初以为是REDIS读取太频繁
Redis server went away
查看系统日志文件时发现每天定时有该错误抛出:
PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away'
抛出该问题的脚本为统计脚本,需要读取前一天数据并入库,最初以为是REDIS读取太频繁造成的,但将数据导到测试机后执行脚本发现不会出现该情况,仔细调试发现手动执行时有一行代码没有执行,若执行该行则十分缓慢。该行代码为:
$Redis->delete($Redis->keys($pre_key_del.'*'));
查看手册有相应提示:
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集 中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
登录redis通过info查看,内存使用25G多,而KEY也有1.44亿了。。。REIDS中有大量无用而又未设置过期时间的KEY存在。设置个过期时间,举手之劳的事,还是有必要的。
used_memory_human:24.72G db0:keys=144856453,expires=25357
通过测试机执行 keys prefix* 导致REDIS卡死,其他连接也连不上。所以定位到问题出现在keys命令上,也正如手册上说的造成性能问题。
如何删除未用到的KEY?
大部分KEY是有规律的,有特定前缀,需要拿到特定前缀的KEY然后删除,网上有这样的命令:
redis-cli -a redis-pwd -n 0 keys "preffix*" | xargs redis-cli -p 6379 -a redis-pwd -n 0 del
测试机执行keys "preffix-1*"时间大概40多s,这意味着redis要停40s+,而前缀是按天设置的,这样子需要操作多次,因为业务的原因,不允许这么操作,分分钟都是钱~
最后想到的办法是先从测试机上把满足条件的key导到文本,前面的语句通过cat文本去拿。如:
redis-cli -p 6380 -a redis-pwd keys "preffix-1*" > /home/keys_redis/preffix-1
然后通过这些数据删掉生产环境上的key。
cat /home/keys_redis/preffix-1 | xargs redis-cli -a redis-pwd -n 0 del
删除的速度非常快,内存耗的也挺快,感觉像是有多少耗多少的。执行之后KEY的数量减少了95%+,内存也从25G降到了2G。不过有一个指数升高了 ———— mem_fragmentation_ratio,前后的memory对比:
# Memory 处理前 used_memory:26839186032 used_memory_human:25.00G used_memory_rss:23518339072 used_memory_peak:26963439000 used_memory_peak_human:25.11G used_memory_lua:31744 mem_fragmentation_ratio:0.88 mem_allocator:jemalloc-3.2.0 # Memory 处理后 used_memory:2399386704 used_memory_human:2.23G used_memory_rss:4621533184 used_memory_peak:26963439000 used_memory_peak_human:25.11G used_memory_lua:31744 mem_fragmentation_ratio:1.93 mem_allocator:jemalloc-3.2.0
mem_fragmentation_ratio的问题可能还需要优化下,从redis这个问题可以看到,设置cache的时候我们也需要考虑到cache的维护问题,是否该设置cache的过期时间,key的命名方式如何管理,不能只想着把数据塞进去就万事大吉了。
相关网站:
Redis
Redis 命令参考
原文地址:REDIS中批量删除KEY, 感谢原作者分享。

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

redis error就是redis数据库和其组合使用的部件出现错误,这个出现的错误有很多种,例如Redis被配置为保存数据库快照,但它不能持久化到硬盘,用来修改集合数据的命令不能用。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
