<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Yuzai Blog</title>
        <link>https://docs.yuzai.vip</link>
        <description>Yuzai personal blog</description>
        <lastBuildDate>Fri, 12 Jun 2026 02:56:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <image>
            <title>Yuzai Blog</title>
            <url>https://docs.yuzai.vip/logo.png</url>
            <link>https://docs.yuzai.vip</link>
        </image>
        <copyright>Copyright (c) 2023-present, Yuzai</copyright>
        <item>
            <link>https://docs.yuzai.vip/Task.html</link>
            <guid>https://docs.yuzai.vip/Task.html</guid>
            <content:encoded><![CDATA[<ProtectedContent><h2 id="todo" tabindex="-1">Todo <a class="header-anchor" href="#todo" aria-label="Permalink to &quot;Todo&quot;">&ZeroWidthSpace;</a></h2>
<h2 id="在进行中⏫" tabindex="-1">在进行中⏫ <a class="header-anchor" href="#在进行中⏫" aria-label="Permalink to &quot;在进行中⏫&quot;">&ZeroWidthSpace;</a></h2>
<h2 id="完成" tabindex="-1">完成 <a class="header-anchor" href="#完成" aria-label="Permalink to &quot;完成&quot;">&ZeroWidthSpace;</a></h2>
<p><strong>完成</strong></p>
<ul>
<li>[x] Work ✅ 2024-08-14</li>
</ul>
<hr>
<h2 id="归档" tabindex="-1">归档 <a class="header-anchor" href="#归档" aria-label="Permalink to &quot;归档&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>[x] # lazyvim ✅ 2024-08-14
<ul>
<li>[x] 修改关闭标签页的快捷键 ✅ 2024-08-14</li>
<li>[x] 修改注释注释快捷键 ✅ 2024-08-06</li>
</ul>
</li>
</ul>
<p>%% kanban:settings</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>{"kanban-plugin":"list","list-collapse":[false,false,false],"new-note-folder":"tasks","archive-with-date":true,"append-archive-date":false,"link-date-to-daily-note":true,"move-dates":true}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <title><![CDATA[Yuzai Blog 归档]]></title>
            <link>https://docs.yuzai.vip/archives.html</link>
            <guid>https://docs.yuzai.vip/archives.html</guid>
            <pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<ProtectedContent><Archive /></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <title><![CDATA[Auth0 Callback]]></title>
            <link>https://docs.yuzai.vip/callback.html</link>
            <guid>https://docs.yuzai.vip/callback.html</guid>
            <content:encoded><![CDATA[<ProtectedContent><template>
  <div class="text-center">
    <p v-if="processing" class="text-xl font-semibold text-gray-700">处理登录中...</p>
    <p v-else-if="error" class="text-xl font-semibold text-red-600">{{ error }}</p>
    <p v-else class="text-xl font-semibold text-green-600">登录成功，正在重定向...</p>
  </div>
</template>
<div class="text-center">
  <p class="text-xl font-semibold text-gray-700">处理登录中...</p>
</div>
</ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <title><![CDATA[首页]]></title>
            <link>https://docs.yuzai.vip/</link>
            <guid>https://docs.yuzai.vip/</guid>
            <content:encoded><![CDATA[<ProtectedContent></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <link>https://docs.yuzai.vip/input.html</link>
            <guid>https://docs.yuzai.vip/input.html</guid>
            <content:encoded><![CDATA[<ProtectedContent><h2 id="input" tabindex="-1">input <a class="header-anchor" href="#input" aria-label="Permalink to &quot;input&quot;">&ZeroWidthSpace;</a></h2>
<h2 id="整理" tabindex="-1">整理 <a class="header-anchor" href="#整理" aria-label="Permalink to &quot;整理&quot;">&ZeroWidthSpace;</a></h2>
<p><strong>完成</strong></p>
<hr>
<h2 id="归档" tabindex="-1">归档 <a class="header-anchor" href="#归档" aria-label="Permalink to &quot;归档&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>[x] test_input ✅ 2024-08-14</li>
</ul>
<p>%% kanban:settings</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>{"kanban-plugin":"board","list-collapse":[false,false],"tag-sort":[{"tag":"#input"}]}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <link>https://docs.yuzai.vip/rabbitMQ.html</link>
            <guid>https://docs.yuzai.vip/rabbitMQ.html</guid>
            <description><![CDATA[<ProtectedContent><h2 id="rabbitmq-介绍" tabindex="-1">RabbitMQ 介绍 <a class="header-anchor" href="#rabbitmq-介绍" aria-label="Permalink to &quot;RabbitMQ 介绍&quot;">&ZeroWidthSpace;</a></h2>
</ProtectedContent>]]></description>
            <content:encoded><![CDATA[<ProtectedContent><h2 id="rabbitmq-介绍" tabindex="-1">RabbitMQ 介绍 <a class="header-anchor" href="#rabbitmq-介绍" aria-label="Permalink to &quot;RabbitMQ 介绍&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<ul>
<li>开源 AMQP 实现，Erlang 语言编写，支持多中客户端</li>
<li>分布式、高可用、持久化、可靠、安全</li>
<li>支持多中协议：AMQP、STPMP、MQTT、HTTP</li>
<li>适用于多一同之间的业务解耦的消息中间件</li>
</ul>
<p><strong>消息中间件的比较</strong>
<img src="https://yuzai-1316106379.cos.ap-nanjing.myqcloud.com/img/202305121544087.png" alt="image.png"></p>
<h2 id="消息队列选举建议" tabindex="-1">消息队列选举建议 <a class="header-anchor" href="#消息队列选举建议" aria-label="Permalink to &quot;消息队列选举建议&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<ol>
<li>
<p>Kafka: 只要特点是基于 Pull 的模式来处理消息，追求高吞吐量，一开始的目的适用于日志收集和传输，适合产生大量数据的互联网服务端数据手机业务</p>
<p>⼤型公司建议可以选⽤，如果有⽇志采集功能，肯定是⾸选 kafka 了。</p>
</li>
<li>
<p>RocketMq：为金融互联网领域而生，用于可靠性要求很高的场景，尤其是电商里面的订单扣款，以及业务雪峰，在大量交易涌入时，后端可能无法机是处理的情况</p>
<p>RoketMQ 在稳定性上更值得信赖，这些业务场景在阿里双 11 已经经历了多次考验，如果业务出现这样的情况，建议选中 RocketMQ</p>
</li>
<li>
<p>RabbitMQ：结合 erlang 语言本身的并发优势，性能较好，社区活跃的较高，但是不利于做二次开发和维护。不过，RabbitMQ 的社区十分活跃，可以解决开发过程中遇到的 bug</p>
<p>如果数据量不是很大，小公司优先选择功能比较晚辈的 RabbitMQ</p>
</li>
</ol>
<h2 id="安装-rabbitmq-ubuntu" tabindex="-1">安装 RabbitMQ（ubuntu） <a class="header-anchor" href="#安装-rabbitmq-ubuntu" aria-label="Permalink to &quot;安装 RabbitMQ（ubuntu）&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<p>安装⽅式1(推荐):</p>
<ol>
<li>
<p>安装 Erlang <a href="https://www.rabbitmq.com/which-erlang.html" target="_blank" rel="noreferrer">RabbitMQ Erlang Version Requirements — RabbitMQ</a></p>
</li>
<li>
<p>安装 RabbitMQ 参考官⽹安装步骤<a href="https://www.rabbitmq.com/install-debian.html" target="_blank" rel="noreferrer">Installing on Debian and Ubuntu — RabbitMQ</a></p>
</li>
<li>
<p>rabbitmq-server 安装包下载链接 <a href="https://packagecloud.io/rabbitmq/rabbitmq-server" target="_blank" rel="noreferrer">rabbitmq/rabbitmq-server - Packages · packagecloud</a></p>
</li>
</ol>
<p>安装方式 2：</p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 1. 安装erlang</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#由于rabbitmq需要erlang语⾔的⽀持，在安装rabbitmq之前需要安装erlang</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> erlang-nox</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 2. 安装Rabbitmq</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#更新源</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> update</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#安装</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-server</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div><p><strong>服务器操作</strong></p>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 重启服务器</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-server</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 启动服务器</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> start</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-server</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 关闭服务器</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> stop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-server</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 查看服务器状态</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> status</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 查看rabbitmq 基本信息</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> status</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><h2 id="添加-admin-并赋予-administrator-权限" tabindex="-1">添加 admin，并赋予 administrator 权限 <a class="header-anchor" href="#添加-admin-并赋予-administrator-权限" aria-label="Permalink to &quot;添加 admin，并赋予 administrator 权限&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 添加admin⽤户，密码设置为admin。</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add_user</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> admin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> admin</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 赋予权限</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> set_user_tags</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> admin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> administrator</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 赋予virtual host中所有资源的配置、写、读权限以便管理其中的资源</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> set_permissions</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> admin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '.*'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '.*'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '.*'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 查看⽤户列表</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> list_users</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 删除⽤户</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmqctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> delete_user</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> admin</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><h2 id="启动服务器测试" tabindex="-1">启动服务器测试 <a class="header-anchor" href="#启动服务器测试" aria-label="Permalink to &quot;启动服务器测试&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 安装了Rabbitmq后，默认也安装了该管理⼯具，执⾏命令即可启动</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq-plugins</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> enable</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rabbitmq_management（先定位到rabbitmq安</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">装⽬录）</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 浏览器访问</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">http://localhost:15672/</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><h2 id="python-访问-rabbitmq" tabindex="-1">Python 访问 RabbitMQ <a class="header-anchor" href="#python-访问-rabbitmq" aria-label="Permalink to &quot;Python 访问 RabbitMQ&quot;">&ZeroWidthSpace;</a></h2>
<hr>
<ul>
<li>RabbitMQ 提供默认的 administrator 账户。</li>
<li>⽤户名和密码：guest、guest</li>
<li>协议：amqp</li>
<li>地址：localhost</li>
<li>端⼝：15672</li>
<li>查看队列中的消息：sudo rabbitctl list_queues</li>
</ul>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># Python3虚拟环境下，安装pika</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">$</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pip install pika</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># ⽣产者代码：producer.py</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pika</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 链接到RabbitMQ服务器</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">credentials </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pika.PlainCredentials(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'guest'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'guest'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">connection </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pika.BlockingConnection(pika.ConnectionParameters(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'localhost'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5672</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,credentials))</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#创建频道</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> connection.channel()</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 声明消息队列</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel.queue_declare(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">queue</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'zhuozi'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># routing_key是队列名 body是要插⼊的内容</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel.basic_publish(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">exchange</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">''</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">routing_key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'zhuozi'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">body</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">b</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'Hello RabbitMQ!'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"开始向 'zhuozi' 队列中发布消息 '汉堡做好啦!'"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 关闭链接</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">connection.close()</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br></div></div><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 消费者代码：consumer.py</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pika</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 链接到rabbitmq服务器</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">credentials </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pika.PlainCredentials(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'guest'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'guest'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">connection </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pika.BlockingConnection(pika.ConnectionParameters(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'localhost'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5672</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,credentials))</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 创建频道，声明消息队列</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> connection.channel()</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 和⽣产者声明同⼀个队列，如果⼀⽅挂掉，不会丢失数据</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel.queue_declare(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">queue</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'zhuozi'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 定义接受消息的回调函数</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> callback</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(channel, method, properties, body):</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">	print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(body)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 告诉RabbitMQ使⽤callback来接收信息</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel.basic_consume(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">on_message_callback</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">callback, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">queue</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'zhuozi'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">auto_ack</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 开始接收信息</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">channel.start_consuming()</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br></div></div></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <title><![CDATA[redis学习]]></title>
            <link>https://docs.yuzai.vip/redis.html</link>
            <guid>https://docs.yuzai.vip/redis.html</guid>
            <pubDate>Fri, 17 May 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<ProtectedContent><h1 id="redis" tabindex="-1">redis <a class="header-anchor" href="#redis" aria-label="Permalink to &quot;redis&quot;">&ZeroWidthSpace;</a></h1>
<p>创建时间: October 22, 2023 6:44 PM
标签: redis
AI summary: Redis是一个键值存储系统，可以用于缓存用户信息、实现分布式锁、延迟队列、发布订阅和定时任务等功能。通过setnx和expire命令可以实现分布式锁，通过zset可以实现延迟队列，通过发布订阅功能可以实现消息的发布和订阅，通过键空间通知可以实现定时任务。Redis还支持字符串、哈希、列表、集合和有序集合等多种数据类型的操作。
上次编辑时间: April 13, 2024 11:19 AM</p>
<h1 id="一、引言" tabindex="-1">一、引言 <a class="header-anchor" href="#一、引言" aria-label="Permalink to &quot;一、引言&quot;">&ZeroWidthSpace;</a></h1>
<p>在Web应用发展的初期，那时关系型数据库受到了较为广泛的关注和应用，原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来，随着访问量的提升，使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈，而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展，各种类型的应用层出不穷，这导致在当今云计算、大数据盛行的时代，对性能有了更多的需求，主要体现在以下几个方面：</p>
<blockquote>
<p>低延迟的读写速度：应用快速地反应能极大地提升用户的满意度支撑海量的数据和流量：对于搜索这样大型应用而言，需要利用PB级别的数据和能应对百万级的流量大规模集群的管理：系统管理员希望分布式应用能更简单的部署和管理</p>
</blockquote>
<p>为了克服这一问题，NoSQL应运而生，它同时具备了高性能、可扩展性强、高可用等优点，受到广泛开发人员和仓库管理人员的青睐。</p>
<p><strong>关系型数据库（RMDBS）与非关系型数据库（NoSQL）的对比：</strong></p>
<p>数据库中表与表的数据之间存在某种关联的内在关系，因为这种关系，所以我们称这种数据库为关系型数据库。典型：Mysql/MariaDB、postgreSQL、Oracle、SQLServer、DB2、Access、SQLlite3。特点：</p>
<blockquote>
<p>全部使用SQL（结构化查询语言）进行数据库操作。都存在主外键关系，表，等等关系特征。大部分都支持各种关系型的数据库的特性：事务、存储过程、触发器、视图、临时表、模式、函数</p>
</blockquote>
<p>NOSQL：not only sql，泛指非关系型数据库。泛指那些不使用SQL语句进行数据操作的数据库，所有数据库中只要不使用SQL语句的都是非关系型数据库。典型：Redis、MongoDB、hbase、 Hadoop、elasticsearch、图数据库(Neo4j、GraphDB、SequoiaDB)</p>
<h1 id="二、redis介绍" tabindex="-1">二、redis介绍 <a class="header-anchor" href="#二、redis介绍" aria-label="Permalink to &quot;二、redis介绍&quot;">&ZeroWidthSpace;</a></h1>
<p>img</p>
<h2 id="_2-1、定义" tabindex="-1">2.1、定义 <a class="header-anchor" href="#_2-1、定义" aria-label="Permalink to &quot;2.1、定义&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>Redis（Remote Dictionary Server ，远程字典服务） 是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库，是NoSQL数据库。</p>
</blockquote>
<p>redis的出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)key-value(键值存储)数据库， 支持数据的持久化(基于RDB和AOF，注: 数据持久化时将数据存放到文件中，每次启动redis之后会先将文件中数据加载到内存，经常用来做缓存、数据共享、购物车、消息队列、计数器、限流等。(最基本的就是缓存一些经常用到的数据，提高读写速度)。</p>
<p>redis特性：</p>
<blockquote>
<p>速度快持久化多种数据结构支持多种编程语言主从复制高可用、分布式</p>
</blockquote>
<h2 id="_2-2、redis的数据类型及主要特性" tabindex="-1">2.2、Redis的数据类型及主要特性 <a class="header-anchor" href="#_2-2、redis的数据类型及主要特性" aria-label="Permalink to &quot;2.2、Redis的数据类型及主要特性&quot;">&ZeroWidthSpace;</a></h2>
<p>Redis提供的数据类型主要分为5种自有类型和一种自定义类型，这5种自有类型包括：String类型、哈希类型、列表类型、集合类型和顺序集合类型。</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span></span></span>
<span class="line"><span>redis={</span></span>
<span class="line"><span>"name":"yuan",</span></span>
<span class="line"><span>"age":"23",</span></span>
<span class="line"><span>"scors":[78,79,98,],</span></span>
<span class="line"><span>"info":{"gender":"male","tel":"110"},</span></span>
<span class="line"><span>"set":{1,2,3},</span></span>
<span class="line"><span>"zset":{1,2,3,}</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p><img src="https://www.notion.soassets/139239-20191126141006657-1969131669.png" alt="https://www.notion.soassets/139239-20191126141006657-1969131669.png"></p>
<p>img</p>
<h2 id="_2-3、redis的应用场景有哪些" tabindex="-1">2.3、Redis的应用场景有哪些？ <a class="header-anchor" href="#_2-3、redis的应用场景有哪些" aria-label="Permalink to &quot;2.3、Redis的应用场景有哪些？&quot;">&ZeroWidthSpace;</a></h2>
<p>Redis 的应用场景包括：</p>
<blockquote>
<p>缓存系统（“热点”数据：高频读、低频写）：缓存用户信息，优惠券过期时间，验证码过期时间、session、token等</p>
<p>计数器：帖子的浏览数，视频播放次数，评论次数、点赞次数等</p>
<p>消息队列，秒杀系统</p>
<p>社交网络：粉丝、共同好友（可能认识的人），兴趣爱好（推荐商品）</p>
<p>排行榜（有序集合）</p>
<p>发布订阅：粉丝关注、消息通知</p>
</blockquote>
<h1 id="三、redis环境安装" tabindex="-1">三、redis环境安装 <a class="header-anchor" href="#三、redis环境安装" aria-label="Permalink to &quot;三、redis环境安装&quot;">&ZeroWidthSpace;</a></h1>
<p>redis的官方只提供了linux版本的redis，window系统的redis是微软团队根据官方的linux版本高仿的。</p>
<p>官方原版: <a href="https://redis.io/" target="_blank" rel="noreferrer">https://redis.io/</a></p>
<p>中文官网:<a href="http://www.redis.cn" target="_blank" rel="noreferrer">http://www.redis.cn</a></p>
<h2 id="_3-1、下载和安装" tabindex="-1">3.1、下载和安装 <a class="header-anchor" href="#_3-1、下载和安装" aria-label="Permalink to &quot;3.1、下载和安装&quot;">&ZeroWidthSpace;</a></h2>
<p>下载地址：<a href="https://github.com/tporadowski/redis/releases" target="_blank" rel="noreferrer">https://github.com/tporadowski/redis/releases</a></p>
<p><img src="https://www.notion.soassets/867021-20190120213315530-199992307.png" alt="https://www.notion.soassets/867021-20190120213315530-199992307.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213337245-1919434508.png" alt="https://www.notion.soassets/867021-20190120213337245-1919434508.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213351947-466120029.png" alt="https://www.notion.soassets/867021-20190120213351947-466120029.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213613576-1092651557.png" alt="https://www.notion.soassets/867021-20190120213613576-1092651557.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213732137-1070050780.png" alt="https://www.notion.soassets/867021-20190120213732137-1070050780.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213836094-663215847.png" alt="https://www.notion.soassets/867021-20190120213836094-663215847.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120213850621-1280736381.png" alt="https://www.notion.soassets/867021-20190120213850621-1280736381.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120214101037-1456534345.png" alt="https://www.notion.soassets/867021-20190120214101037-1456534345.png"></p>
<p>img</p>
<p><img src="https://www.notion.soassets/867021-20190120214000974-189830387.png" alt="https://www.notion.soassets/867021-20190120214000974-189830387.png"></p>
<p>img</p>
<p>使用以下命令启动redis服务端</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>redis-server C:/tool/redis/redis.windows.conf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><img src="https://www.notion.soassets/image-20220415174704371-16500160265153.png" alt="https://www.notion.soassets/image-20220415174704371-16500160265153.png"></p>
<p>image-20220415174704371</p>
<p>关闭上面这个cmd窗口就关闭redis服务器服务了。</p>
<p><img src="https://www.notion.soassets/image-20220415103036668.png" alt="https://www.notion.soassets/image-20220415103036668.png"></p>
<p>image-20220415103036668</p>
<p><strong>redis作为windows服务启动方式</strong></p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>redis-server --service-install redis.windows.conf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>启动服务：redis-server –service-start 停止服务：redis-server –service-stop</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span># 如果连接操作redis，可以在终端下，使用以下命令：</span></span>
<span class="line"><span>redis-cli</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>ubuntu下安装：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">安装命令：sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis-server卸载命令：sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> purge</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --auto-remove</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis-server关闭命令：sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> stop开启命令：sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> start重启命令：sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> restart配置文件：/etc/redis/redis.conf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_3-2、redis的配置" tabindex="-1">3.2、redis的配置 <a class="header-anchor" href="#_3-2、redis的配置" aria-label="Permalink to &quot;3.2、redis的配置&quot;">&ZeroWidthSpace;</a></h2>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /etc/redis/redis.conf</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>redis 安装成功以后,window下的配置文件保存在软件 安装目录下,如果是mac或者linux,则默认安装/etc/redis/redis.conf</p>
<h3 id="redis的核心配置选项" tabindex="-1">redis的核心配置选项 <a class="header-anchor" href="#redis的核心配置选项" aria-label="Permalink to &quot;redis的核心配置选项&quot;">&ZeroWidthSpace;</a></h3>
<p>绑定ip：访问白名单，如果需要远程访问，可将此注释，或绑定1个真实ip</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">bind</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 127.0.0.1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   xx.xx.xx.xx</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>端⼝，默认为6379</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">port</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 6379</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>是否以守护进程运行</p>
<ul>
<li>如果以守护进程运行，则不会在命令阻塞，类似于服务</li>
<li>如果以守护进程运行，则当前终端被阻塞</li>
<li>设置为yes表示守护进程，设置为no表示⾮守护进程</li>
<li>推荐设置为yes</li>
</ul>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">daemonize</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yes</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>RDB持久化的备份策略（RDB备份是默认开启的）</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> # save 时间 读写次数 save 900 1     # 当redis在900内至少有1次读写操作，则触发一次数据库的备份操作 save 300 10    # 当redis在300内至少有10次读写操作，则触发一次数据库的备份操作 save 60 10000  # 当redis在60内至少有10000次读写操作，则触发一次数据库的备份操作</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>RDB持久化的备份文件</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dbfilename</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> dump.rdb</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>RDB持久化数据库数据文件的所在目录</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">dir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /var/lib/redis</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>日志文件所载目录</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">loglevel</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> noticelogfile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /var/log/redis/redis-server.log</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>进程ID文件</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pidfile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /var/run/redis/redis-server.pid</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>数据库，默认有16个，数据名是不能自定义的，只能是0-15之间，当然这个15是数据库数量-1</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">database</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 16</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>redis的登录密码，生产阶段打开，开发阶段避免麻烦，一般都是注释的。redis在6.0版本以后新增了ACL访问控制机制，新增了用户管理，这个版本以后才有账号和密码，再次之前只有没有密码没有账号</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># requirepass foobared</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>注意：开启了以后，redis-cli终端下使用 <code>auth 密码</code>来认证登录。</p>
<p><img src="https://www.notion.soassets/image-20211108102339592.png" alt="https://www.notion.soassets/image-20211108102339592.png"></p>
<p>image-20211108102339592</p>
<p>AOF持久化的开启配置项(默认值是no，关闭状态)</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendonly</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> no</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>AOF持久化的备份文件（AOF的备份数据文件与RDB的备份数据文件保存在同一个目录下，由dir配置项指定）</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendfilename</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "appendonly.aof"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>AOF持久化备份策略[时间]</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># appendfsync alwaysappendfsync everysec    # 工作中最常用。每一秒备份一次# appendfsync no</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>哨兵集群：一主二从三哨兵(3台服务器)</p>
<h3 id="redis的使用" tabindex="-1">Redis的使用 <a class="header-anchor" href="#redis的使用" aria-label="Permalink to &quot;Redis的使用&quot;">&ZeroWidthSpace;</a></h3>
<p>redis是一款基于<strong>CS</strong>架构的数据库，所以redis有客户端redis-cli，也有服务端redis-server。</p>
<p>其中，客户端可以使用go、java、python等编程语言，也可以终端下使用命令行工具管理redis数据库，甚至可以安装一些别人开发的界面工具，例如：RDM。</p>
<p><img src="https://www.notion.soassets/1553246999266.png" alt="https://www.notion.soassets/1553246999266.png"></p>
<p>1553246999266</p>
<p>redis-cli客户端连接服务器：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># redis-cli -h `redis服务器ip` -p `redis服务器port`redis-cli -h 10.16.244.3 -p 6379</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h1 id="四、redis数据类型" tabindex="-1">四、redis数据类型 <a class="header-anchor" href="#四、redis数据类型" aria-label="Permalink to &quot;四、redis数据类型&quot;">&ZeroWidthSpace;</a></h1>
<p><img src="https://www.notion.soassets/139239-20191126141006657-1969131669.png" alt="https://www.notion.soassets/139239-20191126141006657-1969131669.png"></p>
<p>img</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>redis可以理解成一个全局的大字典，key就是数据的唯一标识符。根据key对应的值不同，可以划分成5个基本数据类型。</span></span>
<span class="line"><span></span></span>
<span class="line"><span>redis = {</span></span>
<span class="line"><span>    "name":"yuan",</span></span>
<span class="line"><span>    "scors":["100","89","78"],</span></span>
<span class="line"><span>    "info":{</span></span>
<span class="line"><span>        "name":"rain"</span></span>
<span class="line"><span>        "age":22</span></span>
<span class="line"><span>    },</span></span>
<span class="line"><span>    "s":{item1,itme2,..}</span></span>
<span class="line"><span>}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>1. string类型:</span></span>
<span class="line"><span>    字符串类型，是 Redis 中最为基础的数据存储类型，它在 Redis 中是二进制安全的，也就是byte类型。</span></span>
<span class="line"><span>    单个数据的最大容量是512M。</span></span>
<span class="line"><span>        key: 值</span></span>
<span class="line"><span></span></span>
<span class="line"><span>2. hash类型:</span></span>
<span class="line"><span>    哈希类型，用于存储对象/字典，对象/字典的结构为键值对。key、域、值的类型都为string。域在同一个hash中是唯一的。</span></span>
<span class="line"><span>        key:{</span></span>
<span class="line"><span>            域（属性）: 值，</span></span>
<span class="line"><span>            域:值，</span></span>
<span class="line"><span>            域:值，</span></span>
<span class="line"><span>            域:值，</span></span>
<span class="line"><span>            ...</span></span>
<span class="line"><span>        }</span></span>
<span class="line"><span>3. list类型:</span></span>
<span class="line"><span>    列表类型，它的子成员类型为string。</span></span>
<span class="line"><span>        key: [值1，值2, 值3.....]</span></span>
<span class="line"><span>4. set类型:</span></span>
<span class="line"><span>    无序集合，它的子成员类型为string类型，元素唯一不重复，没有修改操作。</span></span>
<span class="line"><span>        key: {值1, 值4, 值3, ...., 值5}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>5. zset类型(sortedSet):</span></span>
<span class="line"><span>    有序集合，它的子成员值的类型为string类型，元素唯一不重复，没有修改操作。权重值(score,分数)从小到大排列。</span></span>
<span class="line"><span>        key: {</span></span>
<span class="line"><span>            值1 权重值1(数字);</span></span>
<span class="line"><span>            值2 权重值2;</span></span>
<span class="line"><span>            值3 权重值3;</span></span>
<span class="line"><span>            值4 权重值4;</span></span>
<span class="line"><span>        }</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br></div></div><h2 id="_4-1-string-字符串" tabindex="-1">4.1. string（字符串） <a class="header-anchor" href="#_4-1-string-字符串" aria-label="Permalink to &quot;4.1. string（字符串）&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>SET/SETEX/MSET/MSETNXGET/MGETGETSETINCR/DECRDEL</p>
</blockquote>
<h3 id="_1-设置键值" tabindex="-1">1. 设置键值 <a class="header-anchor" href="#_1-设置键值" aria-label="Permalink to &quot;1. 设置键值&quot;">&ZeroWidthSpace;</a></h3>
<p>set 设置的数据没有额外操作时，是不会过期的。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>设置键为<code>name</code>值为<code>yuan</code>的数据</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yuanset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rain</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> # 一个变量可以设置多次</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><img src="https://www.notion.soassets/image-20220415103809481-16499902909211.png" alt="https://www.notion.soassets/image-20220415103809481-16499902909211.png"></p>
<p>image-20220415103809481</p>
<p>注意：redis中的所有数据操作，如果设置的键不存在则为添加，如果设置的键已经存在则修改。</p>
<p>设置一个键，当键不存在时才能设置成功，用于一个变量只能被设置一次的情况。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setnx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>一般用于给数据加锁(分布式锁)</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">setnx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> goods_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 101</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> setnx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> goods_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 102</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # 表示设置不成功127.0.0.1:6379> del goods_1(integer) 1127.0.0.1:6379> setnx goods_1 102(integer) 1</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-设置键值的过期时间" tabindex="-1">2. 设置键值的过期时间 <a class="header-anchor" href="#_2-设置键值的过期时间" aria-label="Permalink to &quot;2. 设置键值的过期时间&quot;">&ZeroWidthSpace;</a></h3>
<p>redis中可以对一切的数据进行设置有效期。以秒为单位</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> seconds</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>设置键为<code>goods_1</code>值为<code>101</code>过期时间为10秒的数据</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> goods_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-关于设置保存数据的有效期" tabindex="-1">3. 关于设置保存数据的有效期 <a class="header-anchor" href="#_3-关于设置保存数据的有效期" aria-label="Permalink to &quot;3. 关于设置保存数据的有效期&quot;">&ZeroWidthSpace;</a></h3>
<p>setex 添加保存数据到redis，同时设置有效期，格式：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> time</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><img src="https://www.notion.soassets/image-20220415104126645-16499904877172.png" alt="https://www.notion.soassets/image-20220415104126645-16499904877172.png"></p>
<p>image-20220415104126645</p>
<h3 id="_4-设置多个键值" tabindex="-1">4. 设置多个键值 <a class="header-anchor" href="#_4-设置多个键值" aria-label="Permalink to &quot;4. 设置多个键值&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>例3：设置键为<code>a1</code>值为<code>goland</code>、键为<code>a2</code>值为<code>java</code>、键为<code>a3</code>值为<code>c</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> goland</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> java</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> c</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-字符串拼接值" tabindex="-1">5. 字符串拼接值 <a class="header-anchor" href="#_5-字符串拼接值" aria-label="Permalink to &quot;5. 字符串拼接值&quot;">&ZeroWidthSpace;</a></h3>
<p>常见于大文件上传</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">append</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>向键为<code>a1</code>中拼接值<code>haha</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> title</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "我的"append</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> title</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "redis"append</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> title</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "学习之路"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-根据键获取值" tabindex="-1">6. 根据键获取值 <a class="header-anchor" href="#_6-根据键获取值" aria-label="Permalink to &quot;6. 根据键获取值&quot;">&ZeroWidthSpace;</a></h3>
<p>根据键获取值，如果不存在此键则返回<code>nil</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键<code>name</code>的值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>根据多个键获取多个值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键<code>a1、a2、a3</code>的值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a3</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>getset：设置key的新值，返回旧值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">redis</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">GETSET</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> db</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mongodb</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    # 没有旧值，返回 nil(nil)redis> GET db"mongodb"redis> GETSET db redis      # 返回旧值 mongodb"mongodb"redis> GET db"redis"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_7-自增自减" tabindex="-1">7. 自增自减 <a class="header-anchor" href="#_7-自增自减" aria-label="Permalink to &quot;7. 自增自减&quot;">&ZeroWidthSpace;</a></h3>
<p>web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1incr</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> id</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">   # 相当于id+1get id    # 2incr id   # 相当于id+1get id    # 3set goods_id_1 10decr goods_id_1  # 相当于 id-1get goods_id_1    # "9"decr goods_id_1   # 相当于id-1get goods_id_1    # 8 set age 22 incrby age 2 # 自增自减大于1的值时候用incrby</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_8-获取字符串的长度" tabindex="-1">8. 获取字符串的长度 <a class="header-anchor" href="#_8-获取字符串的长度" aria-label="Permalink to &quot;8. 获取字符串的长度&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaomingstrlen</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # 8</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_9-比特流操作" tabindex="-1">9. 比特流操作 <a class="header-anchor" href="#_9-比特流操作" aria-label="Permalink to &quot;9. 比特流操作&quot;">&ZeroWidthSpace;</a></h3>
<p>————————</p>
<p>mykey 00000011</p>
<p>1字节=8比特 1kb = 1024字节 1mb = 1024kb 1gb = 1024mb</p>
<p>1个int8就是一个字节，一个中文：3个字节</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">SETBIT</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     # SETBIT key offset value 按从左到右的偏移量设置一个bit数据的值GETBIT     # 获取一个bit数据的值BITCOUNT   # 统计字符串被设置为1的bit数.BITPOS     # 返回字符串里面第一个被设置为1或者0的bit位。</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>案例1：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">SETBIT</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mykey</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 7</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 00000001getbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mykey</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 7#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 00000001SETBIT</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mykey</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 00001001SETBIT</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mykey</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 15</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1#</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0000100100000001</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>我们知道 ‘a’ 的ASCII码是 97。转换为二进制是：01100001。offset的学名叫做“偏移” 。二进制中的每一位就是offset值啦，比如在这里 offset 0 等于 ‘0’ ，offset 1等于 ‘1’ ,offset 2 等于 ‘1’,offset 6 等于 ‘0’ ，没错，offset是从左往右计数的，也就是从<strong>高位往低位</strong>。</p>
<p>我们通过SETBIT 命令将 andy中的 ‘a’ 变成 ‘b’ 应该怎么变呢？</p>
<p>也就是将 01100001 变成 01100010 （b的ASCII码是98），这个很简单啦，也就是将’a’中的offset 6从0变成1，将offset 7 从1变成0 。</p>
<p>案例2：签到系统</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 6</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 0setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 0setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1setbit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1BITCOUNT</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> # 统计一周的打卡情况</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_4-2-key操作" tabindex="-1">4.2. key操作 <a class="header-anchor" href="#_4-2-key操作" aria-label="Permalink to &quot;4.2. key操作&quot;">&ZeroWidthSpace;</a></h2>
<p>redis中所有的数据都是通过key（键）来进行操作，这里我们学习一下关于任何数据类型都通用的命令。</p>
<h3 id="_1-查找键" tabindex="-1">（1）查找键 <a class="header-anchor" href="#_1-查找键" aria-label="Permalink to &quot;（1）查找键&quot;">&ZeroWidthSpace;</a></h3>
<p>参数支持简单的正则表达式</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">keys</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pattern</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>查看所有键</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">keys</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> *</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>例子：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 查看名称中包含`a`的键keys *a*# 查看以a开头的键keys a*# 查看以a结尾的键keys *a</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-判断键是否存在" tabindex="-1">（2）判断键是否存在 <a class="header-anchor" href="#_2-判断键是否存在" aria-label="Permalink to &quot;（2）判断键是否存在&quot;">&ZeroWidthSpace;</a></h3>
<p>如果存在返回<code>1</code>，不存在返回<code>0</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">exists</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key1</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>判断键<code>title</code>是否存在</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">exists</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> title</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-查看键的的值的数据类型" tabindex="-1">（3）查看键的的值的数据类型 <a class="header-anchor" href="#_3-查看键的的值的数据类型" aria-label="Permalink to &quot;（3）查看键的的值的数据类型&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> string</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    字符串#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> hash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      哈希类型#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> list</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      列表类型#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">       无序集合#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      有序集合</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>查看键的值类型</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a1#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> stringsadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member_list</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaobai#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (integer) 3type member_list# sethset user_1 name xiaobai age 17 sex 1# (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) 3type user_1# hashlpush brothers zhangfei guangyu liubei xiaohei# (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) 4type brothers# listzadd achievements 61 xiaoming 62 xiaohong 83 xiaobai  78 xiaohei 87 xiaohui 99 xiaolong# (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) 6type achievements# zset</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-删除键以及键对应的值" tabindex="-1">（4）删除键以及键对应的值 <a class="header-anchor" href="#_4-删除键以及键对应的值" aria-label="Permalink to &quot;（4）删除键以及键对应的值&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-查看键的有效期" tabindex="-1">（5）查看键的有效期 <a class="header-anchor" href="#_5-查看键的有效期" aria-label="Permalink to &quot;（5）查看键的有效期&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ttl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 结果结果是秒作为单位的整数#</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 表示永不过期#</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 表示当前数据已经过期，查看一个不存在的数据的有效期就是-2</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-设置key的有效期" tabindex="-1">（6）设置key的有效期 <a class="header-anchor" href="#_6-设置key的有效期" aria-label="Permalink to &quot;（6）设置key的有效期&quot;">&ZeroWidthSpace;</a></h3>
<p>给已有的数据重新设置有效期，redis中所有的数据都可以通过expire来设置它的有效期。有效期到了，数据就被删除。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">expire</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> seconds</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_7-清空所有key" tabindex="-1">（7）清空所有key <a class="header-anchor" href="#_7-清空所有key" aria-label="Permalink to &quot;（7）清空所有key&quot;">&ZeroWidthSpace;</a></h3>
<p>慎用，一旦执行，则redis所有数据库0~15的全部key都会被清除</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">flushall</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_8-key重命名" tabindex="-1">（8）key重命名 <a class="header-anchor" href="#_8-key重命名" aria-label="Permalink to &quot;（8）key重命名&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">rename</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  oldkey</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> newkey</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>把name重命名为username</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yuanrename</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> usernameget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> username</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>select切换数据库</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">redis的配置文件中，默认有0~15之间的16个数据库，默认操作的就是0号数据库select</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">数据库I</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">D</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>操作效果：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 默认处于0号库127.0.0.1:6379> select 1OK# 这是在1号库127.0.0.1:6379[1]> set name xiaomingOK127.0.0.1:6379[1]> select 2OK# 这是在2号库127.0.0.1:6379[2]> set name xiaoheiOK</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_4-3-list-数组" tabindex="-1">4.3. list（数组） <a class="header-anchor" href="#_4-3-list-数组" aria-label="Permalink to &quot;4.3. list（数组）&quot;">&ZeroWidthSpace;</a></h2>
<p>队列，列表的子成员类型为string</p>
<blockquote>
<p>lpush key value</p>
<p>rpush key value</p>
<p>linsert key after|before 指定元素 value</p>
<p>lindex key index</p>
<p>lrange key start stop</p>
<p>lset key index value</p>
<p>lrem key count value</p>
</blockquote>
<h3 id="_1-添加子成员" tabindex="-1">（1）添加子成员 <a class="header-anchor" href="#_1-添加子成员" aria-label="Permalink to &quot;（1）添加子成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># a在左侧(前)添加一条或多条数据lpush key value1 value2 ...</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在右侧(后)添加一条或多条数据rpush key value1 value2 ...</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 在指定元素的左边(前)/右边（后）插入一个或多个数据linsert key before 指定元素 value1 value2 ....linsert key after 指定元素 value1 value2 ....</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>从键为<code>brother</code>的列表左侧添加一个或多个数据<code>liubei、guanyu、zhangfei</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> liubei#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [liubei]lpush brother guanyu zhangfei xiaoming# [xiaoming,zhangfei,guanyu,liubei]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>从键为brother的列表右侧添加一个或多个数据，<code>xiaohong,xiaobai,xiaohui</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">rpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [xiaoming,zhangfei,guanyu,liubei,xiaohong]rpush brother xiaobai xiaohui# [xiaoming,zhangfei,guanyu,liubei,xiaohong,xiaobai,xiaohui]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>从key=brother的xiaohong的列表位置左侧添加一个数据，<code>xiaoA,xiaoB</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">linsert</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> before</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoA#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaobai,xiaohui]linsert brother before xiaohong xiaoB# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaoB,xiaohong,xiaobai,xiaohui]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>从key=brother，key=xiaohong的列表位置右侧添加一个数据，<code>xiaoC,xiaoD</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">linsert</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> after</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoC#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaoC,xiaobai,xiaohui]linsert brother after xiaohong xiaoD# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>注意：当列表如果存在多个成员值一致的情况下，默认只识别第一个。</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">linsert</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> before</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoA</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong#</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [xiaoming,zhangfei,guanyu,liubei,xiaohong,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]127.0.0.1:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">6379></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> linsert brother before xiaohong xiaoE# [xiaoming,zhangfei,guanyu,liubei,xiaoE,xiaohong,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]127.0.0.1:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">6379></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> linsert brother after xiaohong xiaoF# [xiaoming,zhangfei,guanyu,liubei,xiaoE,xiaohong,xiaoF,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-基于索引获取列表成员" tabindex="-1">（2）基于索引获取列表成员 <a class="header-anchor" href="#_2-基于索引获取列表成员" aria-label="Permalink to &quot;（2）基于索引获取列表成员&quot;">&ZeroWidthSpace;</a></h3>
<p>根据指定的索引(下标)获取成员的值，负数下标从右边-1开始，逐个递减</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lindex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> index</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取brother下标为2以及-2的成员</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brotherlpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> guanyu</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zhangfei</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaominglindex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 2#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "guanyu"lindex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"># </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"zhangfei"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-获取列表的切片" tabindex="-1">（3）获取列表的切片 <a class="header-anchor" href="#_3-获取列表的切片" aria-label="Permalink to &quot;（3）获取列表的切片&quot;">&ZeroWidthSpace;</a></h3>
<p>闭区间[包括stop]</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lrange</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> start</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> stop</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>操作：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brotherrpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> liubei</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> guanyu</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zhangfei</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xaiohong#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 获取btother的全部成员lrange</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"># 获取brother的前2个成员lrange brother 0 1# 获取brother的后2个成员lrange brother -2 -1</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-获取列表的长度" tabindex="-1">（4）获取列表的长度 <a class="header-anchor" href="#_4-获取列表的长度" aria-label="Permalink to &quot;（4）获取列表的长度&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">llen</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取brother列表的成员个数</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">llen</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-按索引设置值" tabindex="-1">（5）按索引设置值 <a class="header-anchor" href="#_5-按索引设置值" aria-label="Permalink to &quot;（5）按索引设置值&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> index</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 注意：#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> redis的列表也有索引，从左往右，从0开始，逐一递增，第1个元素下标为0#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 索引可以是负数，表示尾部开始计数，如`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">表示最后1个元素</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>修改键为<code>brother</code>的列表中下标为<code>4</code>的元素值为<code>xiaohongmao</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohonghong</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-删除指定成员" tabindex="-1">（6）删除指定成员 <a class="header-anchor" href="#_6-删除指定成员" aria-label="Permalink to &quot;（6）删除指定成员&quot;">&ZeroWidthSpace;</a></h3>
<p>移除并获取列表的第一个成员或最后一个成员</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lpop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # 第一个成员出列rpop key  # 最后一个成员出列</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取并移除brother中的第一个成员</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lpop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 开发中往往使用rpush和lpop实现队列的数据结构</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">实现入列和出列</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">lrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> count</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 注意：#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> count表示删除的数量，value表示要删除的成员。该命令默认表示将列表从左侧前count个value的元素移除#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> count==0，表示删除列表所有值为value的成员#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">0，表示删除列表左侧开始的前count个value成员#</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> count</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">0，表示删除列表右侧开始的前count个value成员del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brotherrpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> B</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A["B","C"]del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brotherrpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> B</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A["A","B","C"]del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brotherrpush</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> B</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> brother</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> A["B","C","A"]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_4-4-hash-哈希" tabindex="-1">4.4. hash（哈希） <a class="header-anchor" href="#_4-4-hash-哈希" aria-label="Permalink to &quot;4.4. hash（哈希）&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>hset key field value</p>
<p>hget key field</p>
<p>hgetall info</p>
<p>hmget key field1 field2 …</p>
<p>hincrby key field number</p>
</blockquote>
<p>专门用于结构化的数据信息。对应的就是map/结构体</p>
<p>结构：</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>键key:{</span></span>
<span class="line"><span>    域field: 值value,</span></span>
<span class="line"><span>    域field: 值value,</span></span>
<span class="line"><span>    域field: 值value,</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><h3 id="_1-设置指定键的属性-域" tabindex="-1">（1）设置指定键的属性/域 <a class="header-anchor" href="#_1-设置指定键的属性-域" aria-label="Permalink to &quot;（1）设置指定键的属性/域&quot;">&ZeroWidthSpace;</a></h3>
<p>设置指定键的单个属性</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>设置键 <code>user_1</code>的属性<code>name</code>为<code>xiaoming</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user_1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">   # user_1没有会自动创建(integer) 1127.0.0.1:6379> hset user_1 name xiaohei    # user_1中重复的属性会被修改(integer) 0127.0.0.1:6379> hset user_1 age 16          # user_1中不存在的属性会被新增(integer) 1127.0.0.1:6379> hset user:1 name xiaohui    # user:1会在redis界面操作中以:作为目录分隔符(integer) 1127.0.0.1:6379> hset user:1 age 15(integer) 1127.0.0.1:6379> hset user:2 name xiaohong age 16  # 一次性添加或修改多个属性</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-获取指定键的域-属性的值" tabindex="-1">（2）获取指定键的域/属性的值 <a class="header-anchor" href="#_2-获取指定键的域-属性的值" aria-label="Permalink to &quot;（2）获取指定键的域/属性的值&quot;">&ZeroWidthSpace;</a></h3>
<p>获取指定键所有的域/属性</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hkeys</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键user的所有域/属性</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hkeys</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:21</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">2) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"age"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">127.0.0.1:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">6379></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> hkeys user:31) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">2) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"age"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">3) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"sex"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取指定键的单个域/属性的值</p>
<div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>hget key field</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键<code>user:3</code>属性<code>name</code>的值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name"xiaohong"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取指定键的多个域/属性的值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hmget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键<code>user:2</code>属性<code>name</code>、<code>age</code>的值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hmget</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> age1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"xiaohong"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">2) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"16"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取指定键的所有值</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hvals</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取指定键的所有域值对</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hvals</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:31</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"xiaohong"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">2) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"17"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">3) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"1"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-获取hash的所有域值对" tabindex="-1">（3）获取hash的所有域值对 <a class="header-anchor" href="#_3-获取hash的所有域值对" aria-label="Permalink to &quot;（3）获取hash的所有域值对&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hset</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> age</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 16</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sex</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">3127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> hgetall</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:11</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">2) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"xiaoming"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">3) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"age"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">4) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"16"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">5) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"sex"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">6) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"1"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-删除指定键的域-属性" tabindex="-1">（4）删除指定键的域/属性 <a class="header-anchor" href="#_4-删除指定键的域-属性" aria-label="Permalink to &quot;（4）删除指定键的域/属性&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hdel</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>删除键<code>user:3</code>的属性<code>sex/age/name</code>，当键中的hash数据没有任何属性，则当前键会被redis删除</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hdel</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> age</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-判断指定属性-域是否存在于当前键对应的hash中" tabindex="-1">（5）判断指定属性/域是否存在于当前键对应的hash中 <a class="header-anchor" href="#_5-判断指定属性-域是否存在于当前键对应的hash中" aria-label="Permalink to &quot;（5）判断指定属性/域是否存在于当前键对应的hash中&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hexists</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  field</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>判断user:2中是否存在age属性</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">hexists</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> age</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">0127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> hexists</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> age</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-属性值自增自减" tabindex="-1">（6）属性值自增自减 <a class="header-anchor" href="#_6-属性值自增自减" aria-label="Permalink to &quot;（6）属性值自增自减&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">hincrby</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> field</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>给user:2的age属性在原值基础上+/-10，然后在age现有值的基础上-2</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#按指定数值自增127.0.0.1:6379> hincrby user:2 age 10(integer) 77127.0.0.1:6379> hincrby user:2 age 10(integer) 87# 按指定数值自减127.0.0.1:6379> hincrby user:2 age -10(integer) 77127.0.0.1:6379> hincrby user:2 age -10</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_4-5-set-集合" tabindex="-1">4.5. set（集合） <a class="header-anchor" href="#_4-5-set-集合" aria-label="Permalink to &quot;4.5. set（集合）&quot;">&ZeroWidthSpace;</a></h2>
<p>无序集合，重点就是去重和无序。</p>
<h3 id="_1-添加元素" tabindex="-1">（1）添加元素 <a class="header-anchor" href="#_1-添加元素" aria-label="Permalink to &quot;（1）添加元素&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ...</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>向键<code>authors</code>的集合中添加元素<code>zhangsan</code>、<code>lisi</code>、<code>wangwu</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> authors</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zhangsan</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> lisi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> wangwu</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-获取集合的所有的成员" tabindex="-1">（2）获取集合的所有的成员 <a class="header-anchor" href="#_2-获取集合的所有的成员" aria-label="Permalink to &quot;（2）获取集合的所有的成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smembers</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取键<code>authors</code>的集合中所有元素</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">smembers</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> authors</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-获取集合的长度" tabindex="-1">（3）获取集合的长度 <a class="header-anchor" href="#_3-获取集合的长度" aria-label="Permalink to &quot;（3）获取集合的长度&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">scard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> keys</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取s2集合的长度</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> b</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> c</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> e127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> scard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-随机抽取一个或多个元素" tabindex="-1">（4）随机抽取一个或多个元素 <a class="header-anchor" href="#_4-随机抽取一个或多个元素" aria-label="Permalink to &quot;（4）随机抽取一个或多个元素&quot;">&ZeroWidthSpace;</a></h3>
<p>抽取出来的成员被删除掉</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">spop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [count=1]# 注意：# count为可选参数，不填则默认一个。被提取成员会从集合中被删除掉</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>随机获取s2集合的成员</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> c</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> e127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> spop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s2"d"127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> spop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s2"c"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-删除指定元素" tabindex="-1">（5）删除指定元素 <a class="header-anchor" href="#_5-删除指定元素" aria-label="Permalink to &quot;（5）删除指定元素&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">srem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>删除键<code>authors</code>的集合中元素<code>wangwu</code></p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">srem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> authors</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> wangwu</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-交集、差集和并集" tabindex="-1">（6）交集、差集和并集 <a class="header-anchor" href="#_6-交集、差集和并集" aria-label="Permalink to &quot;（6）交集、差集和并集&quot;">&ZeroWidthSpace;</a></h3>
<p>推荐、（协同过滤，基于用户、基于物品）</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">sinter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  key1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ....</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    # 交集、比较多个集合中共同存在的成员sdiff   key1 key2 key3 ....    # 差集、比较多个集合中不同的成员sunion  key1 key2 key3 ....    # 并集、合并所有集合的成员，并去重</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">del</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:4sadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> user:1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 4</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     # user:1 = {1,2,3,4}sadd user:2 1 3 4 5     # user:2 = {1,3,4,5}sadd user:3 1 3 5 6     # user:3 = {1,3,5,6}sadd user:4 2 3 4       # user:4 = {2,3,4}# 交集127.0.0.1:6379> sinter user:1 user:21) "1"2) "3"3) "4"127.0.0.1:6379> sinter user:1 user:31) "1"2) "3"127.0.0.1:6379> sinter user:1 user:41) "2"2) "3"3) "4"127.0.0.1:6379> sinter user:2 user:41) "3"2) "4"# 并集127.0.0.1:6379> sunion user:1 user:2 user:41) "1"2) "2"3) "3"4) "4"5) "5"# 差集127.0.0.1:6379> sdiff user:2 user:31) "4"  # 此时可以给user:3推荐4127.0.0.1:6379> sdiff user:3 user:21) "6"  # 此时可以给user:2推荐6127.0.0.1:6379> sdiff user:1 user:31) "2"2) "4"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="_4-6-zset-有序集合" tabindex="-1">4.6. zset（有序集合） <a class="header-anchor" href="#_4-6-zset-有序集合" aria-label="Permalink to &quot;4.6. zset（有序集合）&quot;">&ZeroWidthSpace;</a></h2>
<p>有序集合（score/value），去重并且根据score权重值来进行排序的。score从小到大排列。</p>
<h3 id="_1-添加成员" tabindex="-1">（1）添加成员 <a class="header-anchor" href="#_1-添加成员" aria-label="Permalink to &quot;（1）添加成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> score1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> score2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> score3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ....</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>设置榜单achievements，设置成绩和用户名作为achievements的成员</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">zadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 61</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 62</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 83</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaobai</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  78</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohei</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 87</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohui</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 99</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaolan</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">6127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 85</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohuang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zadd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 54</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoqing</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-获取score在指定区间的所有成员" tabindex="-1">（2）获取score在指定区间的所有成员 <a class="header-anchor" href="#_2-获取score在指定区间的所有成员" aria-label="Permalink to &quot;（2）获取score在指定区间的所有成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">zrangebyscore key </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">min</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> max</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     # 按score进行从低往高排序获取指定score区间zrevrangebyscore key min max  # 按score进行从高往低排序获取指定score区间zrange key start stop         # 按scoer进行从低往高排序获取指定索引区间zrevrange key start stop      # 按scoer进行从高往低排序获取指定索引区间</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">zrange achievements </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> -</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  # 从低到高全部成员</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-获取集合长度" tabindex="-1">（3）获取集合长度 <a class="header-anchor" href="#_3-获取集合长度" aria-label="Permalink to &quot;（3）获取集合长度&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zcard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取users的长度</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zcard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_4-获取指定成员的权重值" tabindex="-1">（4）获取指定成员的权重值 <a class="header-anchor" href="#_4-获取指定成员的权重值" aria-label="Permalink to &quot;（4）获取指定成员的权重值&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zscore</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取users中xiaoming的成绩</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">zscore</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaobai"93"127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zscore</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohong"62"127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zscore</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming"61"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-获取指定成员在集合中的排名" tabindex="-1">（5）获取指定成员在集合中的排名 <a class="header-anchor" href="#_5-获取指定成员在集合中的排名" aria-label="Permalink to &quot;（5）获取指定成员在集合中的排名&quot;">&ZeroWidthSpace;</a></h3>
<p>排名从0开始计算</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zrank</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">      # score从小到大的排名zrevrank key member   # score从大到小的排名</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取achievements中xiaohei的分数排名，从大到小</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">zrevrank</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaohei</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">4</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_6-获取score在指定区间的所有成员数量" tabindex="-1">（6）获取score在指定区间的所有成员数量 <a class="header-anchor" href="#_6-获取score在指定区间的所有成员数量" aria-label="Permalink to &quot;（6）获取score在指定区间的所有成员数量&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zcount</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> min</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> max</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>获取achievements从0~60分之间的人数[闭区间]</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">zcount</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 60</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">2127.0.0.1:637</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">9></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> zcount</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 54</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 60</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">integer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_7-给指定成员增加增加权重值" tabindex="-1">（7）给指定成员增加增加权重值 <a class="header-anchor" href="#_7-给指定成员增加增加权重值" aria-label="Permalink to &quot;（7）给指定成员增加增加权重值&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zincrby</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> score</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>给achievements中xiaobai增加10分</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">127.0.0.1:6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">ZINCRBY</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaobai"93</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_8-删除成员" tabindex="-1">（8）删除成员 <a class="header-anchor" href="#_8-删除成员" aria-label="Permalink to &quot;（8）删除成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> member3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ....</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>从achievements中删除xiaoming的数据</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">zrem</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> achievements</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xiaoming</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_9-删除指定数量的成员" tabindex="-1">（9）删除指定数量的成员 <a class="header-anchor" href="#_9-删除指定数量的成员" aria-label="Permalink to &quot;（9）删除指定数量的成员&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 删除指定数量的成员，从最低score开始删除zpopmin key [count]# 删除指定数量的成员，从最高score开始删除zpopmax key [count]</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>例子：</p>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 从achievements中提取并删除成绩最低的2个数据127.0.0.1:6379> zpopmin achievements 21) "xiaoqing"2) "54"3) "xiaolv"4) "60"# 从achievements中提取并删除成绩最高的2个数据127.0.0.1:6379> zpopmax achievements 21) "xiaolan"2) "99"3) "xiaobai"4) "93"</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h1 id="五、python操作redis" tabindex="-1">五、Python操作redis <a class="header-anchor" href="#五、python操作redis" aria-label="Permalink to &quot;五、Python操作redis&quot;">&ZeroWidthSpace;</a></h1>
<h2 id="一、python对redis基本操作" tabindex="-1">一、python对redis基本操作 <a class="header-anchor" href="#一、python对redis基本操作" aria-label="Permalink to &quot;一、python对redis基本操作&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="_1-连接redis" tabindex="-1">（1）连接redis <a class="header-anchor" href="#_1-连接redis" aria-label="Permalink to &quot;（1）连接redis&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 方式1import redisr = redis.Redis(host='127.0.0.1', port=6379)r.set('foo', 'Bar')print(r.get('foo'))# 方式2import redispool = redis.ConnectionPool(host='127.0.0.1', port=6379)r = redis.Redis(connection_pool=pool)r.set('bar', 'Foo')print(r.get('bar'))</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接,一般情况下, 这是没问题的, 但当并发量比较高的时候, 频繁的连接创建和释放对性能会有较高的影响。于是, 连接池就发挥作用了。连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作。这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。</p>
<h3 id="_2-数据类型操作" tabindex="-1">（2）数据类型操作 <a class="header-anchor" href="#_2-数据类型操作" aria-label="Permalink to &quot;（2）数据类型操作&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> redispool = redis.ConnectionPool(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'127.0.0.1'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">port</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">db</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">decode_responses</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)r = redis.Redis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">connection_pool</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pool)</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># （1）字符串操作：不允许对已经存在的键设置值ret = r.setnx("name", "yuan")print(ret)  # False# （2）字符串操作：设置键有效期r.setex("good_1001", 10, "2")# （3）字符串操作：自增自减r.set("age", 20)r.incrby("age", 2)print(r.get("age"))  # b'22'# （4）hash操作：设置hashr.hset("info", "name", "rain")print(r.hget("info", "name"))  # b'rain'r.hmset("info", {"gedner": "male", "age": 22})print(r.hgetall("info"))  # {b'name': b'rain', b'gender': b'male', b'age': b'22'}# （5）list操作：设置listr.rpush("scores", "100", "90", "80")r.rpush("scores", "70")r.lpush("scores", "120")print(r.lrange("scores", 0, -1))  # ['120', '100', '90', '80', '70']r.linsert("scores", "AFTER", "100", 95)print(r.lrange("scores", 0, -1))  # ['120', '100', '95', '90', '80', '70']print(r.lpop("scores"))  # 120print(r.rpop("scores"))  # 70print(r.lindex("scores", 1)) # '95'# （6）集合操作# key对应的集合中添加元素r.sadd("name_set", "zhangsan", "lisi", "wangwu")# 获取key对应的集合的所有成员print(r.smembers("name_set"))  # {'lisi', 'zhangsan', 'wangwu'}# 从key对应的集合中随机获取 numbers 个元素print(r.srandmember("name_set", 2))r.srem("name_set", "lisi")print(r.smembers("name_set"))  # {'wangwu', 'zhangsan'}# （7）有序集合操作# 在key对应的有序集合中添加元素r.zadd("jifenbang", {"yuan": 78, "rain": 20, "alvin": 89, "eric": 45})# 按照索引范围获取key对应的有序集合的元素# zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'yuan', 'alvin']print(r.zrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']print(r.zrevrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']print(r.zrangebyscore("jifenbang", 0, 100))print(r.zrangebyscore("jifenbang", 0, 100, start=0, num=1))# 删除key对应的有序集合中值是values的成员print(r.zrem("jifenbang", "yuan"))  # 删除成功返回1print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'alvin']# （8）键操作r.delete("scores")print(r.exists("scores"))print(r.keys("*"))r.expire("name",10)</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="二、关于redis的实战案例" tabindex="-1">二、关于redis的实战案例 <a class="header-anchor" href="#二、关于redis的实战案例" aria-label="Permalink to &quot;二、关于redis的实战案例&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="_1-案例1-kv缓存" tabindex="-1">（1）案例1：KV缓存 <a class="header-anchor" href="#_1-案例1-kv缓存" aria-label="Permalink to &quot;（1）案例1：KV缓存&quot;">&ZeroWidthSpace;</a></h3>
<p><img src="https://www.notion.soassets/src=http%253A%252F%252Ffilescdn.proginn.com%252F85891f3fb0eba3d2abd96f2558d70901%252Fdf95fabf1eba4716abaedd0a1e683bb2.webp&amp;refer=http%253A%252F%252Ffilescdn.proginn.png" alt="https://www.notion.soassets/src=http%253A%252F%252Ffilescdn.proginn.com%252F85891f3fb0eba3d2abd96f2558d70901%252Fdf95fabf1eba4716abaedd0a1e683bb2.webp&amp;refer=http%253A%252F%252Ffilescdn.proginn.png"></p>
<p>img</p>
<p>第1个是最基础也是最常?的就是KV功能，我们可以用Redis来缓存用户信息、会话信息、商品信息等等。下面这段代码就是通过缓存读取逻辑。</p>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> redispool = redis.ConnectionPool(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'127.0.0.1'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">port</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">db</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">decode_responses</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)r = redis.Redis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">connection_pool</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pool)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">def</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> get_user(user_id):    user = r.get(user_id)    </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> not</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user:        user = UserInfo.objects.get(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">pk</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">user_id)        r.setex(user_id, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">3600</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, user)    </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_2-案例2-分布式锁" tabindex="-1">（2）案例2：分布式锁 <a class="header-anchor" href="#_2-案例2-分布式锁" aria-label="Permalink to &quot;（2）案例2：分布式锁&quot;">&ZeroWidthSpace;</a></h3>
<p>什么是分布式锁</p>
<blockquote>
<p>❝</p>
<p>分布式锁其实就是，控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源，往往需要互斥来防止彼此干扰，以保证一致性。</p>
<p>❞</p>
</blockquote>
<p>提到Redis的分布式锁，很多小伙伴马上就会想到<code>setnx</code>+ <code>expire</code>命令。即先用<code>setnx</code>来抢锁，如果抢到之后，再用<code>expire</code>给锁设置一个过期时间，防止锁忘记了释放。</p>
<blockquote>
<p>❝</p>
<p>SETNX 是SET IF NOT EXISTS的简写.日常命令格式是SETNX key value，如果 key不存在，则SETNX成功返回1，如果这个key已经存在了，则返回0。</p>
<p>❞</p>
</blockquote>
<p>假设某电商网站的某商品做秒杀活动，key可以设置为key_resource_id,value设置任意值，伪代码如下：</p>
<h3 id="方案1" tabindex="-1">方案1 <a class="header-anchor" href="#方案1" aria-label="Permalink to &quot;方案1&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> redispool = redis.ConnectionPool(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'127.0.0.1'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)r = redis.Redis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">connection_pool</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pool)ret = r.setnx(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"key_resource_id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"ok"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ret:    r.expire(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"key_resource_id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)  </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 设置过期时间    print("抢购成功！")    r.delete("key_resource_id")  # 释放资源else:    print("抢购失败！")</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>但是这个方案中，<code>setnx</code>和<code>expire</code>两个命令分开了，<strong>「不是原子操作」</strong>。如果执行完<code>setnx</code>加锁，正要执行<code>expire</code>设置过期时间时，进程crash或者要重启维护了，那么这个锁就“长生不老”了，<strong>「别的线程永远获取不到锁啦」</strong>。</p>
<h3 id="方案2-setnx-value值是-系统时间-过期时间" tabindex="-1">方案2：SETNX + value值是(系统时间+过期时间) <a class="header-anchor" href="#方案2-setnx-value值是-系统时间-过期时间" aria-label="Permalink to &quot;方案2：SETNX + value值是(系统时间+过期时间)&quot;">&ZeroWidthSpace;</a></h3>
<p>为了解决方案一，<strong>「发生异常锁得不到释放的场景」</strong>，可以把过期时间放到<code>setnx</code>的value值里面。如果加锁失败，再拿出value值校验一下即可。加锁代码如下：</p>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timedef foo():    expiresTime = time.time() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    ret = r.setnx(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"key_resource_id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, expiresTime)    </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ret:        </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"当前锁不存在，加锁成功"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)        </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    oldExpiresTime = r.get(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"key_resource_id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)    </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> float</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(oldExpiresTime) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.time():  </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 如果获取到的过期时间，小于系统当前时间，表示已经过期        # 锁已过期，获取上一个锁的过期时间，并设置现在锁的过期时间        newExpiresTime = r.getset("key_resource_id", expiresTime)        if oldExpiresTime == newExpiresTime:            #  考虑多线程并发的情况，只有一个线程的设置值和当前值相同，它才可以加锁            return True  # 加锁成功    return False  # 其余情况加锁皆失败foo()</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="方案3" tabindex="-1">方案3 <a class="header-anchor" href="#方案3" aria-label="Permalink to &quot;方案3&quot;">&ZeroWidthSpace;</a></h3>
<p>实际上，我们还可以使用Py的redis模块中的set函数来保证原子性（包含setnx和expire两条指令）代码如下：</p>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">r.set(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"key_resource_id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">nx</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">ex</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_3-案例4-延迟队列" tabindex="-1">（3）案例4：延迟队列 <a class="header-anchor" href="#_3-案例4-延迟队列" aria-label="Permalink to &quot;（3）案例4：延迟队列&quot;">&ZeroWidthSpace;</a></h3>
<p>延时队列可以通过Redis的zset(有序列表)来实现。我们将消息序列化为一个字符串作为zset的值。这个消息的到期时间处理时间作为score，然后用多个线程轮询zset获取到期的任务进行处理，多线程时为了保障可用性，万一挂了一个线程还有其他线程可以继续处理。因为有多个线程，所有需要考虑并发争抢任务，确保任务不能被多次执行。</p>
<p><img src="https://www.notion.soassets/20200513191721238606-16509537356372.png" alt="https://www.notion.soassets/20200513191721238606-16509537356372.png"></p>
<p>20200513191721238606</p>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timeimport uuidimport redispool = redis.ConnectionPool(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'127.0.0.1'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">port</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">decode_responses</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)r = redis.Redis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">connection_pool</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">pool)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">def</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> delay_task(task_name, delay_time):    </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 保证value唯一    task_id = task_name + str(uuid.uuid4())    retry_ts = time.time() + delay_time    r.zadd("delay-queue", {task_id: retry_ts})def loop():    print("循环监听中...")    while True:        # 最多取1条        task_list = r.zrangebyscore("delay-queue", 0, time.time(), start=0, num=1)        if not task_list:            # 延时队列空的，休息1s            print("cost 1秒钟")            time.sleep(1)            continue        task_id = task_list[0]        success = r.zrem("delay-queue", task_id)        if success:            # 处理消息逻辑函数            handle_msg(task_id)def handle_msg(msg):    """消息处理逻辑"""    print(f"消息{msg}已经被处理完成！")import threadingt = threading.Thread(target=loop)t.start()delay_task("任务1延迟5", 5)delay_task("任务2延迟2", 2)delay_task("任务3延迟3", 3)delay_task("任务4延迟10", 10)</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>redis的zrem方法是对多线程争抢任务的关键，它的返回值决定了当前实例有没有抢到任务，因为loop方法可能会被多个线程、多个进程调用， 同一个任务可能会被多个进程线程抢到，通过zrem来决定唯一的属主。同时，一定要对handle_msg进行异常捕获， 避免因为个别任务处理问题导致的循环异常退出。</p>
<h3 id="_4-案例5-发布订阅" tabindex="-1">（4）案例5：发布订阅 <a class="header-anchor" href="#_4-案例5-发布订阅" aria-label="Permalink to &quot;（4）案例5：发布订阅&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">subscribe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> channel</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> # 订阅publish channel mes # 发布消息</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> threadingimport redisr = redis.Redis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'127.0.0.1'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">def</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> recv_msg():    pub = r.pubsub()    pub.subscribe(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"fm104.5"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)    pub.parse_response()    </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">while</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">:        msg = pub.parse_response()        </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(msg)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">def</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> send_msg():    msg = </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">input</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">">>>"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)    r.publish(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"fm104.5"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, msg)t = threading.Thread(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">target</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">send_msg)t.start()recv_msg()</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="_5-案例3-定时任务" tabindex="-1">（5）案例3：定时任务 <a class="header-anchor" href="#_5-案例3-定时任务" aria-label="Permalink to &quot;（5）案例3：定时任务&quot;">&ZeroWidthSpace;</a></h3>
<p>利用 Redis 也能实现订单30分钟自动取消。</p>
<p>用户下单之后，在规定时间内如果不完成付款，订单自动取消，并且释放库存使用技术：Redis键空间通知（过期<a href="https://so.csdn.net/so/search?q=%E5%9B%9E%E8%B0%83&amp;spm=1001.2101.3001.7020" target="_blank" rel="noreferrer">回调</a>）用户下单之后将订单id作为key，任意值作为值存入redis中，给这条数据设置过期时间，也就是订单超时的时间启用键空间通知</p>
<h3 id="开启过期key监听" tabindex="-1">开启过期key监听 <a class="header-anchor" href="#开启过期key监听" aria-label="Permalink to &quot;开启过期key监听&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-python vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> redis </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> StrictRedisredis = StrictRedis(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">host</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'localhost'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">port</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6379</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 监听所有事件# pubsub = redis.pubsub()# pubsub.psubscribe('__keyspace@0__:*')## print('Starting message loop')# while True:#     message = pubsub.get_message()#     if message:#         print(message)# 监听过期keydef event_handler(msg):    print("sss",msg)    thread.stop()pubsub = redis.pubsub()pubsub.psubscribe(**{'__keyevent@0__:expired': event_handler})thread = pubsub.run_in_thread(sleep_time=0.01)</span></span></code></pre>
<div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h3 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.notion.so/redis-aa94df9116d043a2b48ba93e605fff4c?pvs=21" target="_blank" rel="noreferrer">redis数据库</a></p>
<p><a href="https://www.notion.so/redis1-c3fb638aca47482b9290e8de00ab4efa?pvs=21" target="_blank" rel="noreferrer">redis1</a></p>
</ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <title><![CDATA[Yuzai Blog 标签]]></title>
            <link>https://docs.yuzai.vip/tags.html</link>
            <guid>https://docs.yuzai.vip/tags.html</guid>
            <content:encoded><![CDATA[<ProtectedContent><TagPage/></ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
        <item>
            <link>https://docs.yuzai.vip/欢迎.html</link>
            <guid>https://docs.yuzai.vip/欢迎.html</guid>
            <content:encoded><![CDATA[<ProtectedContent><p>这是你的新<em>仓库</em>。</p>
<p>写点笔记，[[创建链接]]，或者试一试<a href="https://help.obsidian.md/Plugins/Importer" target="_blank" rel="noreferrer">导入器</a>插件!</p>
<p>当你准备好了，就将该笔记文件删除，使这个仓库为你所用。</p>
</ProtectedContent>]]></content:encoded>
            <author>yao958684803@gmail.com (Yuzai)</author>
        </item>
    </channel>
</rss>