<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cmd on Happy Coding</title>
    <link>https://xujiahua.github.io/tags/cmd/</link>
    <description>Recent content in Cmd on Happy Coding</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 12 Jun 2025 14:42:02 +0800</lastBuildDate>
    <atom:link href="https://xujiahua.github.io/tags/cmd/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>rdb command</title>
      <link>https://xujiahua.github.io/posts/20250612-rdb/</link>
      <pubDate>Thu, 12 Jun 2025 14:42:02 +0800</pubDate>
      <guid>https://xujiahua.github.io/posts/20250612-rdb/</guid>
      <description>&lt;h2 id=&#34;一些-redis-内存分析清理脚本&#34;&gt;一些 Redis 内存分析、清理脚本&lt;/h2&gt;&#xA;&lt;p&gt;Redis 内存了近 32GB 的计数。&lt;/p&gt;&#xA;&lt;p&gt;使用 redis-cli 删除符合前缀匹配的所有 key。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export REDISCLI_AUTH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export REDIS_HOST&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# SCAN 是一个非阻塞的迭代命令，可以逐步获取匹配的键，适用于大型数据库。它使用游标来分批返回结果，不要使用 KEYS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis-cli -h $REDIS_HOST --scan --pattern &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;f1:i00004*&amp;#34;&lt;/span&gt; | xargs -I &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; -t redis-cli -h $REDIS_HOST del &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;二次开发了 &lt;a href=&#34;https://github.com/HDT3213/rdb&#34; target=&#34;_blank&#34; rel=&#34;noopener noreffer &#34;&gt;rdb&lt;/a&gt;。可以基于 rdb 进行分析和操作。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下载、解压到本地 https://github.com/XUJiahua/rdb/releases&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/XUJiahua/rdb/releases/download/v0.2.1/rdb_0.2.1_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzvf rdb_0.2.1_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下载 redis 备份 dump.rdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 阿里云控制台提供了内网下载地址&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -O dump.rdb &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://rdsbak-hk-v3-3az.oss-cn-hongkong-internal.aliyuncs.com/custins62059427/hins33306587_data_20250611150501.rdb&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 分析内存占用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# prefixv2 原版 prefix 命令会爆内存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -max-depth 10 按前10个字符分组统计内存占用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -n 200 top 200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./rdb -c prefixv2 -n &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt; -max-depth &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; dump.rdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 因为设计失误，时间字段在整个 key 的最后&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 从 dump.rdb 中使用正则过滤，然后根据日期进一步过滤，默认是打印每个 key，打印到标准输出，可以通过管道与其他命令组合使用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 20250401 之前的数据，比较的是 key 的最后一个字段&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 正则先使用工具测试 https://regex101.com/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./rdb -c filter -filter-date &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20250401&amp;#39;&lt;/span&gt; -regex &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;f1:i00066:.*&amp;#39;&lt;/span&gt; dump.rdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;f1:100066:xxxxxx:2025030505&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 对过滤内容进行聚合，key 数量，key 占用空间，对要清理多少空间有数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./rdb -c filter -filter-date &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20250401&amp;#39;&lt;/span&gt; -regex &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;f1:i00066:.*&amp;#39;&lt;/span&gt; -action sum dump.rdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;key count: 4802086,* 4802086, total size: 940581576&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;897M&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 对过滤内容进行删除，使用内置 redis client 删除&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export REDIS_ADDR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;localhost:6379&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export REDIS_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export REDIS_DB&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./rdb -c filter -filter-date &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20250401&amp;#39;&lt;/span&gt; -regex &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;f1:i00136:.*&amp;#39;&lt;/span&gt; -action del dump.rdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;k8s 内操作&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
