検索
ホームページデータベースRedisRedis の実践への入り口と永続性に関する詳細な分析 (概要の共有)

この記事では、redis6.0、redis の永続性、redis レプリケーションの原則、redis の高可用性センチネル監視などの詳細なチュートリアルを含む、入門から実践まで Redis に関する質問をまとめています。クラスター構築に関する知識が皆さんのお役に立てば幸いです。

Redis の実践への入り口と永続性に関する詳細な分析 (概要の共有)

redis6.0、redis の永続性、redis レプリケーションの原則、redis の高可用性センチネル監視、およびクラスター構築を開始するための詳細なチュートリアル。

インタビュアー: 若者、Redis についてのあなたの意見を話しましょう。
: ああ、どう思いますか? 座って見るべきですか、それとも寝転んで見るべきですか?レディスは小さいですか?すぐ?でも長持ちする?

インタビュアー: 真剣に言いました。あなたは運転しているのではないかと思います。運転するだけでなく、カラーリングも行っているのではないかと思います。 ######私###:。 。 。
インタビュアー

: 行って、行って、行って、私の時間は限られています。ナンセンスなことを言わないでください。本題に戻りますが、Redis についてどのくらい知っていますか。

: 軽量かつ小さく、メモリに基づいて非常に高速であり、RDB と AOF の永続性により、同様に強力で耐久性があります。
インタビュアー

: 具体的に言ってください。

:本文をお読みください。

#本文

はじめに

Redis は、オープンソースの高パフォーマンスのキーと値のペアベースのキャッシュであり、ストレージ システムは、さまざまなシナリオでのキャッシュとストレージのニーズに適応するために、さまざまなキーと値のデータ型を提供します。同時に、Redis の多くの高レベル機能により、メッセージ キューやタスク キューなどのさまざまな役割を果たすことができます。さらに、Redis は外部モジュールの拡張もサポートしており、特定のシナリオでメイン データベースとして使用できます。

メモリの読み書き速度はハードディスクに比べてはるかに速いので、現在のソリッドステートディスクの考え方もメモリの考え方に発展しているのかもしれません。長期保存には今でもメカニカルディスクを使用しています。したがって、Redis データベース内のすべてのデータはメモリに保存されるため、非常に高速です。データ損失につながる一定のリスクもありますが、RDB と AOF 永続性を使用するとリスクが軽減されます。
1. 初めての Redis 入門

1. Linux (Redhat7 シリーズ) でのインストール

1.1. インストール

ここで用意するのはソースコードですパッケージ、バージョン 最新であるかどうかではなく、安定していて適用できるかどうかが重要です。

残りのバージョンは、公式 Web サイトまたは github ホスティング プラットフォームで入手できます。以下は Redis の公式 Web サイトのダウンロード アドレスです。

https://redis.io/download

redis-6.0.8.tar.gz#安装tar -zxvf redis-6.0.8.tar.gz#编译make && make install

1.2.エラーのトラブルシューティング

make[1]: *** [server.o] 错误 1

1.3.解決策

1.3.1. 依存環境のインストール

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

1.3.2. 環境変数を追加して有効にする

scl enable devtoolset-9 bashecho "/opt/rh/devtoolset-9/enable" >> /etc/profile

環境変数設定ファイルを再読み込み

source /etc/profile

再コンパイルして問題を解決します

#切换到Redis的安装目录,一般源码包安装会放在/usr/local/下面,看个人使用习惯cd /opt/redis-6.0.8/
#编译make && make install

一般的な基本的なコマンドの演習については、初心者向けチュートリアルを参照してください

https://www.runoob .com/redis /redis-commands.html1.4. 起動とログイン

redis-server サーバーを起動します

#启动redis服务nohup /opt/redis-6.0.8/src/redis-server &

redis-cli クライアントにログインします

#登录redis-cli/opt/redis-6.0.8/src/redis-cli

Test Linux 上の redis が正式に起動したことを確認する 基本的な使い方を紹介します。

pingpong

#1.5. パスワードの設定

デフォルトでは公開パスワード設定はなく、コメントアウトされたパラメータ設定を手動で有効にする必要があります。

#编辑配置文件vim /opt/redis-6.0.8/redis.conf
#原本的被注释掉,复制一行改成你设置的密码即可
#requirepass foobaredrequirepass 123456

2. Windows でのインストール

2.1. インストール

Redis-x64-3.2.100.zip

2.1.1. Windows で解凍するか、msi 経由で直接インストールします。

2.1.2. サービスコマンドの設定 (サービスモードとして登録、自動起動)

サービスのインストール

redis-server --service-install redis.windows-service.conf --loglevel verbose

サービスのアンインストール
redis-server --service-uninstall

2.2. 起動とシャットダウン

redis-server redis.windows.conf
2.2.1. サービスの開始

redis-server --service-start

2.2.2. サービスの停止

redis-server --service-stop

2.3. Redis の起動service

#同样在redis解压的或者安装的目录以管理员身份运行cmdredis-server --service-start

2.4. cmd

#在redis解压的或者安装的目录以管理员身份运行cmdredis-cli.exe -h 127.0.0.1 -p 6379
#或者直接执行redis-cli
#执行redis-cli
#登录测试ping

5 でテスト ログインを実行します。Windows の管理ツール rdm はビジュアル インターフェイスです

https://redisdesktop.com/download

2 , 基礎知識


1. 面接でよくある質問

面接官

: Redis のデータ型とは何ですか? それについて話してもらえますか?

: string (文字列型)、hash (ハッシュ型)、list (リスト型)、set (セット型)、zset (順序セット型)、

stream (ストリーム タイプ)

ストリームは、redis5.0 でサポートされる新機能です。 インタビュアー
: ああ、この若い男は何かを持っています。ストリームの種類まで、たくさんのことを知っています。

I: 混乱しています...

3. 前進1. 粘り強さ

面接官

: Redis の高度な機能をいくつか知っていますか?

#I: 少し理解できました。

インタビュアー: 詳しく話してもらえますか?

#I

: ブレインサーチャーの前に、ざっと読んで要約しました。キャッシュと永続化が登場します。

将Redis作为缓存服务器,但缓存被穿透后会对性能照成较大影响,所有缓存同时失效缓存雪崩,从而使服务无法响应。

我们希望Redis能将数据从内存中以某种形式同步到磁盘中,使之重启以后根据磁盘中的记录恢复数据。这一过程就是持久化。

面试官:知道Redis有哪几种常见的持久化方式吗?

:Redis默认开启的RDB持久化,AOF持久化方式需要手动开启。

Redis支持两种持久化。一种是RDB方式,一种是AOF方式。前者会根据指定的规则“定时”将内存中的数据存储到硬盘上,而后者在每次执行命令后将命令本书记录下来。对于这两种持久化方式,你可以单独使用其中一种,但大多数情况下是将二者紧密结合起来。

此时的面试官一脸期待,炯炯有神的看向了我,请继续。

2、RDB方式

继续介绍,RDB采取的是快照方式,默认设置自定义快照【自动同步】,默认配置如下。

同样可以手动同步

#不推荐在生产环境中使用SAVE
#异步形式BGSAVE
#基于自定义快照FLASHALL

3、AOF方式

当使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程终止导致数据的丢失。AOF可以将Redis执行的每一条命令追加到硬盘文件中,着这个过程中显然会让Redis的性能打折扣,但大部分情况下这种情况可以接受。这里强调一点,使用读写较快的硬盘可以提高AOF的性能。

默认没有开启,需要手动开启AOF,当你查看redis.conf文件时也会发现appendonly配置的是no

appendonly yes

开启AOF持久化后,每次执行一条命令会会更改Redis中的数据的目录,Redis会将该命令写入磁盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。

appendfilename "appendonly.aof

实际上Redis也正是这样做的,每当达到一定的条件时Redis就会自动重写AOF文件,这个条件可以通过redis.conf配置文件中设置:

auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb

在启动时Redis会逐行执行AOF文件中的命令将硬盘中的数据加载到内存中,加载的速度相比RDB会慢一些。

虽然每次执行更改数据库内容的操作时,AOF都将命令记录在AOF文件中。但事实上,由于操作系统的缓存机制,数据并没与真正写入硬盘,而是进入了操作系统的硬盘缓存。在默认情况下,操作系统每30秒会执行一次同步操作,以便将硬盘缓存中的内容写入硬盘。

在Redis中可以通过appendfsync设置同步的时机

# appendfsync always
#默认设置为everysecappendfsync everysec
# appendfsync no

Redis允许同时开启AOF和RDB。这样既保证了数据的安全,又对进行备份等操作比较友好。此时重新启动Redis后,会使用AOF文件来恢复数据。因为AOF方式的持久化,将会丢失数据的概率降至最小化。

4、Redis复制

通过持久化功能,Redis保证了即使服务器重启的情况下也不会丢失(少部分遗失)数据。但是数据库是存储在单台服务器上的,难免不会发生各种突发情况,比如硬盘故障,服务器突然宕机等等,也会导致数据遗失。

为了尽可能的避免故障,通常做法是将数据库复制多个副本以部署在不同的服务器上。这样即使有一台出现故障,其它的服务器依旧可以提供服务。为此,Redis提供了复制(replication)功能。即实现一个数据库中的数据更新后,自动将更新的数据同步到其它数据库上。

此时熟悉MySQL的同学,是不是觉得与MySQL的主从复制很像,以开启二进制日志binlog实现同步复制。

而Redis中使用复制功能更为容易,相比MySQL而言。只需要在从库中启动时加入slaveof 从数据库地址。

#在从库中配置slaveof master_database_ip_addr
#测试,加了nohup与&是放入后台,并且输出日志到/root/目录下的nohup.outnohup /opt/redis-6.0.8/src/redis-server --6380 --slaveof 192.168.245.147 6379 &

4.1、原理

复制初始化。这里主要原理是从库启动,会向主库发送SYNC命令。同时主库接收到SYNC命令后会开始在后台保存快照,即RDB持久化的过程,并将快照期间接收的命令缓存起来。当快照完成后,Redis会将快照文件和所有缓存的命令发送给从数据库。从数据库收到后,会载入快照文件并执行收到的缓存命令。

复制同步阶段会贯穿整个主从同步过程,直到主从关系终止为止。在复制的过程中快照起到了至关重要的作用,只要执行复制就会进行快照,即使关闭了RDB方式的持久化,通过删除所有save参数。

4.2、乐观复制

Redis采用了乐观复制(optimistic replication)的复制策略。容忍在一定时间内主从数据库的内容是不同的,但是两者的数据最终是会同步的。具体来讲,Redis在主从数据库之间复制数据的过程本身是异步的,这就意味着,主数据库执行完客户端请求的命令会立即将命令在主数据库的执行结果反馈给客户端,并异步的将数据同步给从库,不会等待从数据库接收到该命令在返回给客户端。

当数据至少同步给指定数量的从库时,才是可写,通过参数指定:

#设置最少限制3min-slaves-to-write 3
#设置允许从数据最长失去连接时间min-slaves-max-lag 10

4.3、增量复制

基于以下三点实现

  • 从库会存储主库的运行ID(run id)。每个Redis运行实例均会拥有一个唯一运行ID,每当实例重启后,就会自动生成一个新的运行ID。类似于MySQL的从节点配置的唯一ID去识别。
  • 在复制同步阶段,主库一条命令被传送到从库时,会同时把该命令存放到一个积压队列(backlog)中,记录当前积压队列中存放的命令的偏移量范围
  • 从库接收到主库传来的命令时,会记录该命令的偏移量

4.4、注意

当主数据库崩溃时,情况略微复杂。手动通过从数据库数据库恢复主库数据时,需要严格遵循以下原则:

  • 在从数据库中使用SLAVEOF NO ONE命令将从库提升为主库继续服务。
  • 启动之前崩溃的主库,然后使用SLAVEOF命令将其设置为新的主库的从库。

注意:当开启复制且数据库关闭持久化功能时,一定不要使用supervisor以及类似的进程管理工具令主库崩溃后重启。同样当主库所在的服务器因故障关闭时,也要避免直接重新启动。因为当主库重启后,没有开启持久化功能,数据库中所有数据都被清空。此时从库依然会从主库中接收数据,从而导致所有从库也被清空,导致数据库的持久化开了个寂寞

手动维护确实很麻烦,好在Redis提供了一种自动化方案:哨兵去实现这一过程,避免手动维护易出错的问题。

5、哨兵(sentinel)

从Redis的复制历中,我们了解到在一个典型的一主多从的Redis系统中,从库在整个系统中起到了冗余备份以及读写分离的作用。当主库遇到异常中断服务后,开发人员手动将从升主时,使系统继续服务。过程相对复杂,不好实现自动化。此时可借助哨兵工具。

哨兵的作用

  • 监控Redis系统运行情况
  • 监控主库和从库是否正常运行
  • 主库gg思密达,自动将从库升为主库,美滋滋

当然也有多个哨兵监控主从数据库模式,哨兵之间也会互相监控,如下图:

首先需要建立起一主多从的模型,然后开启配置哨兵。

#主库sentinel monitor master 127.0.0.1 6379 1
#建立配置文件,例如sentinel.confredis-sentinel /opt/path/to/sentinel.conf

关于哨兵就介绍这么多,现在大脑中有印象。至少知道有那么回事,可以和美女面试官多掰扯掰扯。

6、集群(cluster)

从Redis3.0开始加入了集群这一特性。

即使使用哨兵,此时的Redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用内存最小的数据库节点,继而出现木桶效应。正因为Redis所有数据都是基于内存存储,问题已经很突出,尤其是当Redis作为持久化存储服务时。

有这样一种场景。就扩容来说,在客户端分片后,如果像增加更多的节点,需要对数据库进行手动迁移。迁移的过程中,为了保证数据的一致性,需要将进群暂时下线,相对比较复杂。

此时考虑到Redis很小,啊不口误,是轻量的特点。可以采用预分片(presharding)在一定程度上避免问题的出现。换句话说,就是在部署的初期,提前考虑日后的存储规模,建立足够多的实例。

从上面的理论知识来看,哨兵和集群类似,但哨兵和集群是两个独立的功能。如果要进行水平扩容,集群是不错的选择。

配置集群,开启配置文件redis.conf中的cluster-enabled

cluster-enabled yes

配置集群每个节点配置不同工作目录,或者修改持久化文件

cluster-config-file nodes-6379.conf

集群测试大家可以执行配置,参考其他书籍亦可,实现并不难。只要是知其原理。

四、Redis for Java

示例

package com.jedis;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class Test {

	@org.junit.Test
	public void demo() {
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		jedis.set("name", "sky");
		String params = jedis.get("jedis");
		System.out.println(params);
		jedis.close();
	}
	
	@org.junit.Test
	public void config() {
		// 获取连接池的配置对象
		JedisPoolConfig config = new JedisPoolConfig();
		// 设置最大连接数
		config.setMaxTotal(30);
		// 设置最大空闲连接数
		config.setMaxIdle(10);
		// 获取连接池
		JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
		// 获得核心对象
		Jedis jedis = null;
		try {
			//通过连接池获取连接
			jedis = pool.getResource();
			//设置对象
			jedis.set("poolname", "pool");
			//获取对象
			String pools = jedis.get("poolname");
			System.out.println("values:"+pools);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//释放资源
			if(jedis != null){
				jedis.close();
			}
			if(pool != null){
				pool.close();
			}
		}	
	}}

最后放一个制作很粗超的思维导图。

推荐学习:《Redis视频教程》、《2022最新redis面试题大全及答案

以上がRedis の実践への入り口と永続性に関する詳細な分析 (概要の共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis vs. SQLデータベース:重要な違​​いRedis vs. SQLデータベース:重要な違​​いApr 25, 2025 am 12:02 AM

RedisデータベースとSQLデータベースの主な違いは、Redisが高性能および柔軟性要件に適したインメモリデータベースであることです。 SQLデータベースは、複雑なクエリとデータの一貫性要件に適したリレーショナルデータベースです。具体的には、1)Redisは高速データアクセスとキャッシュサービスを提供し、キャッシュおよびリアルタイムのデータ処理に適した複数のデータ型をサポートします。 2)SQLデータベースは、テーブル構造を介してデータを管理し、複雑なクエリとトランザクション処理をサポートし、データの一貫性を必要とするeコマースや金融システムなどのシナリオに適しています。

Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、