30 分で Redis の管理方法を学びます
この記事では、Redis に関する関連知識を提供し、主に Redis 管理ツールの関連問題と Redis データベースの管理方法を紹介します。以下で見てみましょう。皆さん、助かりました。
推奨学習: Redis チュートリアル
この記事では、Redis 管理について詳しく説明します。セキュリティや通信プロトコルなどの知識
同時に、それに密接に関係するサードパーティの管理ツールも導入されます。
1. 安全性
安全性というと、私たちは何を思い浮かべますか?
例えば、信頼できる環境は安心感をもたらしますが、慣れない環境は得体の知れない恐怖や孤独を感じます。
もう 1 つの例は、新荘プロジェクトのローカリゼーション置換 (安科置換) です。ここではこれを国荘プロジェクトと呼びます。これは、信頼性、安全性、信頼性、独立性と制御性の目標を達成することを目的としています。
私は安全意識を高めるために、上でたくさん話しました (くだらないことがたくさんあり、疲れました)。
Redis は、創設者がかつて述べたように、シンプルさが美しいです。しかし、セキュリティレベルに関してはあまり多くの作業が行われていません。
ここで 1 つ付け加えておきたいのですが、前回は Redis サービスを正常にシャットダウンする方法について触れませんでした。プロセスを強制終了して制御することもできますが、次の方法を使用してシャットダウンすることをお勧めします:
$ /opt/redis-6.0.8/src/redis-cli shutdown
bind パラメータを変更することで変更できます。デフォルトのバインド設定は、
bind:127.0.0.1
bind# です。 ## パラメータ 複数の IP アドレスをバインドすることもでき、次の例に示すように、IP アドレスはスペースで区切られます。
# Examples:# bind 192.168.1.100 10.0.0.1# bind 127.0.0.1 ::1

in Redis3. バージョン 2 では、Redis が信頼できる環境で実行されることをより確実にするための保護モードという特別なモードが導入されています。保護モードはデフォルトでオンになっていることに注意してください。
パラメータ設定:
#开启保护模式protected-mode yes#禁止保护模式protected-mode no
:
保護モードを有効にする: 不在時受信バインド バインドされたネットワーク クライアントがコマンドを送信すると、クライアントがパスワードを設定しない場合、Redis はコマンドの実行に対してエラー拒否 (DENIED) を返します。- 保護モードを無効にする: protected-mode no
- を使用して、構成で保護モードを無効にできます。
セキュリティ: 運用環境の場合、信頼できるクライアントがサーバーに接続できるようにシールド (ファイアウォール) がオンになっていることを確認する必要があります。
- たとえば、テストするときは、Windows 上の Linux 上の Redis サービスに接続します。テストを容易にするために、この時点で firewalld ファイアウォールを一時的に閉じるか、
コマンドを使用して 6379 のデフォルト ポートと Redis サービスを追加します。ファイアウォールに関する知識については、以前の記事を参照してください。 "firewalld および iptables ファイアウォール ツール": <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#临时关闭防火墙systemctl stop firewalld.service</pre><div class="contentsignin">ログイン後にコピー</div></div>
: Redis 3.2 より前のバージョンでは、デフォルトですべてのネットワーク インターフェイスがバインドされ、ネットワーク (パブリック ネットワークを含む) 上の任意のコンピューターが接続できます。 Redisサーバー。 古いバージョンを使用している人は注意が必要ですので、このパラメータを変更するか、新しいバージョンにアップグレードすることをお勧めします。 2. データベースパスワード
Redis はデータベースパスワード機能を提供します。最初は直接接続できると愚かにも思っていましたが、パスワードがなかったため、非常に危険でした。これがパスワードの設定に使用できることを知ったのは実際に使ってからのことですが、それまでは知りませんでした。注目に値するのは、
6.0 バージョンでは、マルチユーザー権限制御機能がサポートされているということです。 2.1. Redis のパスワード設定
については前回の記事でも触れました。 Redis データベースのパスワードは、パラメータ
requirepass によって制御されます。デフォルトの 6.0.8 バージョンは無効になっているため、手動で有効にする必要があります。
#默认禁用掉了#requirepass foobared#启用密码requirepass 123456

DENIED
というプロンプトを表示し始めました。 bind
を使用して、信頼できる IP をバインドするか、保護モードを無効にします。最後に、確認のためにパスワードの入力を求められます。 <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/08d9eedbfc607ae01957946d8510e18f-5.png" class="lazy" alt=""></p>
<p>示例:设置键sky,set “sky” “hello redis”</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#设置skyset "sky" "hello redis"</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p>重启redis服务(需要读取到redis.conf文件),会提示验证密码,如下图所示。</p>
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/7821f9c6f024e60ce5971acfaa90efbd-6.png" class="lazy" alt=""></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#获取skyget sky(error) NOAUTH Authentication required.
#提示需要密码认证
#认证auth 123456
#再次获取skyget sky"hello redis"</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p>虽然数据库设置密码很方便,但是在复杂的场景中经常需要使用更加细粒度的访问权限控制。比如:</p>
<ul>
<li>生产环境中的应用程序下不应该具有执行CONFIG、FLUSHALL涉及到管理或者数据安全的命令权限</li>
<li>多个程序因不同用途共用一个Redis服务时,建议限制某个程序访问其它程序产生的键。</li>
</ul>
<p>tips:为此,Redis6.0推出了访问控制列表(ACL)功能,可以支持多用户,并且设置每个用户可以使用的命令和访问的键名规则等。可以通过配置文件设置,如下:</p>
<ul>
<li>将ACL配置直接写在Redis配置文件中</li>
<li>将ACL配置写在单独的文件中,然后在Redis配置文件通过<code>aclfile
指令引入,例如:
aclifile /opt/person/conf.acl
2.1、Redis主从复制注意事项
在配置Redis复制的时候,如果主库设置了密码,需要在从库的配置文件中通过masterauth <master-password>
参数设置主库的密码,使从库连接主库时自动使用auth命令验证,配置如下。
masterauth <master-password>
3、命名命令
Redis支持在配置文件中将命令重命名,例如将FLUSHALL命令重命名为一个比较复杂的名字,达到保证只有自己的应用可以使用该命令。当然,这个功能可以看做在6.0版本之前没有ACL,作为对命令安全性的一个补充。如下配置:
rename-command FLUSHALL redisabcdsky1r2d3is
如果希望直接一点,直接禁用,通过重命名为空字符
rename-command FLUSHALL ""
再次强调:安全起见,无论设置密码还是重命名命令,都应遵循保证配置文件的安全性,否则就无意义了。
二、通信协议
之前有了解到Redis的主从复制以及持久化AOF文件的格式,通过了解Redis通信协议能更好的理解Redis。
当然Redis支持两种通信协议。如下:
- 一种是二进制安全的统一请求协议(unified request protocol)
- 第二种是比较直观的便于在telnet程序中输入的简单协议
1、简单协议
简单协议适合在telnet程序中和Redis通信。如下是通过telnet测试与Redis通信:
linux下Redhat系列安装telnet通过yum命令:
yum -y install telnet
Windows在启用或关闭Windows功能中启用telnet
[root@dywangk redis-6.0.8]# telnet 127.0.0.1 6379Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.auth 123456 #同样需要验证密码,之前设置了密码+OKset foo bar +OK get foo$3bar#输入quit退出telnet
1.1、错误回复
错误回复(error reply)以 - 开头并在后面跟着错误信息:
-ERR unknown command ``, with args beginning with:
1.2、状态回复
状态回复(status reply)以+开头
+OK
1.3、整数回复
整数回复(integer reply)以:开头
:3
1.4、字符串回复
字符串(bulk reply)回复以$开头
$3
2、统一请求协议
统一请求协议是从Redis1.2开始加入的,其命令格式与多行字符串回复格式类似。也以telnet为例演示:
[root@dywangk redis-6.0.8]# telnet 127.0.0.1 6379Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.auth 123456 #同样需要验证密码,之前设置了密码+OK *3$3set$3foo$3bar +OK#输入quit退出telnet
同样,在发送命令的时候指定了后面字符串的长度,所以每个命令的每个参数都可以包含二进制的字符。
Redis的AOF文件和主从复制时数据库发送的内容使用了统一请求协议。如果简单的使用telnet与Redis进行通信,使用简单协议即可。
三、管理工具
1、redis-cli
看到redis-cli大家肯定不陌生,是的我们学习测试快速融入都是使用的redis-cli命令进行的,Redis自带的客户端。Redis可以执行大部分的Redis命令,包括查看数据库信息的info
命令、更改数据库设置的config
命令和强制进行RDB快照的save
命令。简单介绍几个管理Redis常用的命令。
1.1、耗时命令日志
当一条命令执行时间超过限制时,Redis会将该命令的执行时间等信息加入耗时命令日志(slow log)以供开发者查看。通过配置文件的slowlog-log-slower-than 10000
参数设置限制,注意单位是微秒,可以看到默认为10000。通过slowlog-max-len 128
限制记录的条数。
获取当前耗时命令日志
slowlog get
每条日志由以下4个部分组成
- 唯一日志ID
- 执行的Unix时间
- 耗时时间,单位为微秒
- 命令及其参数
测试时,将slowlog-log-slower-than 0 参数设置为0
slowlog-log-slower-than 0
1.2、命令监控
Redis提供了monitor来监控Redis执行的所有命令,redis-cli也支持。例如:
monitor
注意:一般用于调试和纠错使用。
2、Medis
获取地址:https://getmedis.com/
当Redis中的键比较多时,此时使用redis-cli管理略显不足。Medis是一款macOS下的可视化Redis管理工具。通过界面即可实现管理Redis。
3、phpRedisAdmin
看到phpRedisAdmin,大家也许会联想到以网页形式管理MySQL的phpMyAdmin管理工具。
下载地址:https://github.com/erikdubbelboer/phpRedisAdmin
关于工具的使用,可以参考github说明,这里不做过多介绍。
建议:github那访问速度大家都懂的,建议导入到gitee作为镜像仓库使用,每隔一段时间同步。
4、Rdbtools
一款采用Python语言开发的Redis的快照文件解析器,它可以根据快照文件导出json数据文件、分析Redis中每个键的占用空间情况。
下载地址:https://github.com/sripathikrishnan/redis-rdb-tools
关于工具的使用,可以参考github说明,这里不做过多介绍。
5、命令参考
最后介绍一个Redis命令大全参考网站,源自于Redis官网,链接如下:
https://redis.io/commands
推荐学习:Redis学习教程
以上が30 分で Redis の管理方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

Redisのすべてのキーを表示するには、3つの方法があります。キーコマンドを使用して、指定されたパターンに一致するすべてのキーを返します。スキャンコマンドを使用してキーを繰り返し、キーのセットを返します。情報コマンドを使用して、キーの総数を取得します。

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。
