当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大.本文提供了几种方法. 一. bigKeys 这是redis-cli自带的一个命令.对整个redis进行扫描,寻找较大的key.例: redis-cli -h b.redis -p --bigkeys 输出 # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You ca…
Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成的.当Redis用于高并发场景时,这条线程就变成了它的生命线.如果出现阻塞,哪怕是很短时间,对于我们的应用来说都是噩梦.导致阻塞问题的场景大致分为内在原因和外在原因: □ 内在原因包括: 不合理地使用API或数据结构.CPU饱和.持久化阻塞等. □ 外在原因包括: CPU竞争.内存交换.网络问题等. 1.发现阻塞 当Redis阻塞时,线上应用服务应该最先感知到,这时应用方会收到大量Redis超时异常,比如Jedis客户端会抛出Je…
背景:生产上一台redis服务器,物理内存32G,几个项目都在用,经常不足一月内存就会耗尽,然后开始使用swap,当swap也用尽的时候,系统就宕机.redis配置也优化过几次,但未见成效.因此决定看看redis里存放数据占用内存大小,看看有没有异常数据. 一.安装redis-rdb-tools工具 # wget https://github.com/sripathikrishnan/redis-rdb-tools/archive/master.zip# unzip master# cd red…
一.前言   由于疫情的原因,学校还没有开学,这也就让我有了很多的时间.趁着时间比较多,我终于可以开始学习那些之前一直想学的技术了.最近这几天开始学习Redis,买了本<Redis实战>,看到了第四章,前三章都是讲一些Redis的基本使用以及命令,第四章才开始涉及到原理相关的内容.<Redis实战>的第四章涉及到了Redis的持久化.主从复制以及事务等内容,我个人认为这些应该属于Redis中比较重要的部分,也是面试的常考内容.这篇博客就来记录一下Redis的持久化机制. 二.正文…
对于redis来说,什么是最重要的? 毋庸置疑,是内存. 一.reids 内存分析 redis内存使用情况:info memory 示例: 可以看到,当前节点内存碎片率为226893824/209522728≍1.08,使用的内存分配器是jemalloc. used_memory_rss 通常情况下是大于 used_memory 的,因为内存碎片的存在. 但是当操作系统把redis内存swap到硬盘时,memory_fragmentation_ratio 会小于1.redis使用硬盘作为内存,因…
背景 Redis是基于内存的KV数据库,内存作为存储介质,关注其内存的使用情况是一个重要指标,解析其内部的存储信息是给出优化方法和维护的最基本要求.解析内存有二种方法:第一个是通过scan遍历所有key,针对每个key进行分析(memory usage):第二个是基于RDB文件进行所有key的分析(redis-rdb-tools).本文将介绍如何使用rdbtools工具. 说明 rdbtools工具包括了3个可执行文件: rdb -- 解析整个rdb文件 redis-memory-for-key…
一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是很重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,其相应的源代码在src/zmalloc.h和src/zmalloc.c两个文件里,源代码点这里. 二,redis内存管理源代码分析 redis封装是为了屏蔽底层平台的差异,同一时候方便自己实现相关的函数,我们能够通过src/zmalloc.h 文件里的相…
Redis rdb持久化 Redis支持两种持久化方式:rdb与aof.rdb将一个节点上的内存数据序列化后存储到磁盘中,序列化的数据以尽可能节约空间的方式存储,并非完全的ascii表示.它的优点在于节约空间,恢复速度快,缺点在于每一次操作都需要对整个内存数据进行序列化,并且持久化过程中的修改被丢失.而aof将数据以操作命令的方式进行存储,从aof恢复数据即从aof文件读入命令再执行命令.它的优点是可以记录持久化过程中的产生的命令,而缺点在于完全以ascii编码,使用空间更多,且恢复速度更慢.这…
工欲善其事必先利其器,日常工作中,好的工具能够高效的协助我们工作:今天介绍一款用来解析redis rdb文件的工具,非常好用.会之,受用无穷! 一.rdbtools工具介绍 源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/ redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,我们主要用它生成内存快照. 主要有以下三个功能: 生成内存快照 转储成 json 格式 使用标准的 diff…
Redis时延问题分析及应对 Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞: 当redis的数据量达到一定级别后(比如20G),阻塞操作对性能的影响尤为严重: 下面我们总结下在redis中有哪些耗时的场景及应对方法: 耗时长的命令造成阻塞 keys.sort等命令 keys命令用于查找所有符合给定模式 pattern 的 key,时间复杂度为O(N), N 为数据库中 key 的数量.当数据库中的个数达到千万时,这…