キャッシュサーバーを構築するためのMemcached方式

キャッシュサーバーを構築するためのMemcached方式

序文

多くの Web アプリケーションは、リレーショナル データベース管理システム (RDBMS) にデータを保存し、アプリケーション サーバーはそこからデータを読み取ってブラウザーに表示します。

しかし、データ量が増加し、アクセスが集中すると、RDBMSへの負荷増加、データベースのレスポンス低下、Webサイトの表示遅延など大きな影響が出てしまいます。

Memcached/redis は、データベース クエリ結果をキャッシュし、データベース アクセス回数を減らして、動的 Web などのアプリケーションの速度とスケーラビリティを向上させる、高性能な分散メモリ キャッシュ サーバーです。

RDBMSはリレーショナルデータベース管理システムの略です。

1. はじめに

1. Nosql 製品: redis、mongodb、memcached。

NOSQL 用語の説明: 非リレーショナル データベース

(1)キーと値のペアの形式でデータを保存する --- (キーと値

(2)キャッシュデータベース - キャッシュサーバの役割:アクセスを高速化し、データベースの負荷を軽減する

2. NoSQLの利点と欠点

アドバンテージ:
- 高いスケーラビリティ
- 分散コンピューティング
- 低コスト
- アーキテクチャの柔軟性
- 複雑な関係はありません

欠点:
- 標準化されていない
- クエリ機能が限られている(現時点では)
- 最終的に一貫性のあるプログラミングは直感的ではない

キャッシュサーバー機能: アクセスを高速化し、データベースの負荷を軽減します

3. リレーショナルデータベースと非リレーショナルデータベースの違い:---------面接でよく聞かれる質問

1. まず、リレーショナル データベースとは何かを理解しましょう。
リレーショナル データベースの最も一般的なデータ構造はテーブルです。テーブルは、2 次元のテーブルとそれらの間の接続で構成されるデータ構成です。
アドバンテージ:
1. メンテナンスが容易: すべて一貫した形式のテーブル構造を使用します。
2. 使いやすい: SQL 言語は汎用性があり、複雑なクエリにも使用できます。
3. 複雑な操作: SQL をサポートしており、テーブル内または複数のテーブル間の非常に複雑なクエリに使用できます。
欠点:
1. 読み取りと書き込みのパフォーマンスが比較的低く、特に大量のデータの効率的な読み取りと書き込みが困難です。
2. テーブル構造が固定されており、柔軟性が若干低い。
3. 同時読み取りと書き込みの要件が高い。従来のリレーショナルデータベースでは、ハードディスクI/Oが大きなボトルネックとなる。


2. 非リレーショナル データベースとは何ですか?

非リレーショナル データは、ドキュメントまたはキーと値のペアである構造化されたデータ ストレージ メソッドのコレクションです。

アドバンテージ:
1. 柔軟な形式: 保存されるデータの形式は、キー、値、ドキュメント、画像などです。リレーショナル データベースは基本的なタイプのみをサポートしますが、柔軟に使用でき、幅広いアプリケーション シナリオに対応します。
2. 高速: NoSQL はハードディスクまたはランダム アクセス メモリをキャリアとして使用できますが、リレーショナル データベースはハードディスクのみを使用できます。
3. 高いスケーラビリティ
4. 低コスト: NoSQL データベースは導入が簡単で、基本的にオープンソース ソフトウェアです。

欠点:
1. SQL サポートが提供されておらず、学習および使用コストが高くなります。
2. 取引処理はありません。
3. データ構造が比較的複雑で、複雑なクエリには少し欠けています。

2. メモリキャッシュ

1. 特徴

1. 内蔵メモリ保存方式 ------------ パフォーマンス向上のため、memcached に保存されたデータは memcache の内蔵メモリ保存領域に保存されます。データはメモリ内にのみ存在するため、オペレーティング システムを再起動するとすべてのデータが消えてしまいます。
2. シンプルなキー/値ストレージ--------------シリアル化可能なデータであれば、サーバーはデータ自体の意味や構造を気にしません。

ストレージ項目は、「キー、有効期限、オプションのフラグ、データ」の 4 つの部分で構成されます。

2. サービスフレームワーク

原理

1. クライアントのリクエストデータがmemcachedにあるかどうかを確認します。ある場合は、データベースに対して何も操作せずにリクエストデータを直接返します。パス操作は①②③⑦です。

2. 要求されたデータがmemcachedにない場合は、データベースを確認し、データベースから取得したデータをクライアントに返します。同時に、データのコピーをmemcachedにキャッシュします(memcachedクライアントは責任を負いませんので、プログラムによって明確に実装する必要があります)。パス操作は①②④⑤⑦⑥です。

3. キャッシュを最新の状態に保ちます。データが変更されるたびに (たとえば、データが変更または削除される)、ユーザーがキャッシュから古いデータを取得しないように、キャッシュ情報を同期的に更新する必要があります。

3. Memcachedの設定とインストール

memcache が保存できるデータの量は、サーバー自体のメモリ量によって異なります。

1. インストール - サーバーの準備

[root@memcached ~]# yum install memcached -y
[root@memcached ~]# systemctl start memcached #開始

2. 設定ファイルを変更する

[root@memcached ~]# vim /etc/sysconfig/memcached
PORT="11211" --- リスニング ポート、デフォルトは 11211。変更できます。 USER="memcached" ----- ユーザー MAXCONN="1024" ----- デフォルトの同時実行性、変更できます。 CACHESIZE="64" ------ 指定されたメモリ。デフォルトはM
OPTIONS="" ---- リスニングネットワークアドレス

次に、開発者に IP アドレスを送信します。開発者は API インターフェースを使用して memcached に接続します。
テスト:

[root@memcached ~]# yum install -y telnet #telentをインストール
[root@memcached ~]# telnet 192.168.246.188 11211
192.168.246.188 を試行しています...
192.168.246.188 に接続しました。
エスケープ文字は '^]' です。
set name 0 60 9 #name という名前のキー、key mark bit (id number)、expiration time、size、helloword を設定します。#name の値は STORED です。#stopped が表示されている場合は、保存が成功したことを意味します。
名前を取得 #クエリキー値 VALUE name 0 9
こんにちは
終わり
終了 ---終了

パラメータの説明:
name: キーの名前は自分で定義します
0: キーID番号。他のキーと異なる必要があります
60: キャッシュの有効期限(秒単位、0 は永久)
9: 最大文字列長

使用しない理由: 保存されるデータのタイプは単一であり、データはメモリにのみ保存できます。データの永続化は実現できません。サーバーを再起動すると、データは消えてしまいます。

=================================================================
拡張: memcached をサポートするために PHP 拡張モジュールをインストールします。
php7.0をインストール

[root@memcached ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
[root@memcached ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[root@memcached ~]# yum -y インストール php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-devel zlib-devel php70w-fpm libmemcached php70w-pecl-memcached
[root@memcached ~]# yum install -y make gcc zlib-devel libmemcached-devel git

PHP Memcache拡張機能をダウンロード

nginx を簡単にインストールし、nginx の yum ソースを設定します。 PHP ページへのアクセスをテストします。
[root@memcached ~]# vim /etc/nginx/conf.d/nginx.conf
サーバー{
 聞く 80;
 server_name ローカルホスト;
​
 場所 ~ \.php$ {
 ルート /usr/share/nginx/html;
 127.0.0.1:9000; をデフォルトとして設定します。
 fastcgi_index インデックス.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_params を含めます。
 }
}
php ページを編集 [root@memcached html]# vim /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
nginxを再起動する
php-fpmを起動する
ブラウザアクセス

Memcached を使用したキャッシュ サーバーの構築方法については、これで終わりです。Memcached キャッシュ サーバーに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • NoSQL 入門: NoSQL を使用する理由
  • MySQL シリーズ: MySQL リレーショナル データベースの基本概念
  • MySQL データベースにおける char と varchar の違いの分析と使用上の提案
  • ASP での SQL ステートメントを使用した ASP クラシック入門チュートリアル
  • Osql ツールを使用して SQL Server Desktop Engine (MSDE 2000) アプリケーションを管理する
  • リレーショナルデータベースと非リレーショナルデータベースの紹介

<<:  CentOS7.5 MySQLのインストールチュートリアル

>>:  JavaScriptオブジェクト指向について学ぼう

推薦する

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

純粋な CSS で実装された 3 つの通知バーのスクロール効果

序文通知バー コンポーネントは、比較的一般的なコンポーネントです。基本的に、すべてのサイトにこのよう...

クールなネオンライト効果を実現する純粋な CSS (デモ付き)

私は最近、YouTube の CSS アニメーション効果チュートリアル シリーズをフォローしています...

JavaScript 配列の詳細な概要

目次1. 配列誘導1. 文字列を配列に分割する2. コレクションとマップを新しい配列に変換する3. ...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

Vue+ElementUI Treeの使い方

Vue+ElementUI Treeの使い方は参考までに。具体的な内容は以下のとおりです。 フロント...

MySQL がタイムスタンプを使用するときにタイムゾーンの問題を無視できるのはなぜですか?

私はいつも、なぜMySQLデータベースのtimestampタイムゾーンの問題を無視できるのか疑問に思...

VueでJSXを使用する方法

JSXとは何かJSX は Javascript の構文拡張であり、JSX = Javascript ...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

CSSスタイルとセレクターの使い方

HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...

HTM と HTML の違いは何ですか? HTM と HTML の違いは何ですか?

Web デザインを学習する過程で、html と htm の関係など、遭遇した多くの問題について深く...

Nodejs 配列キューと forEach アプリケーションの詳細な説明

この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...

Dockerバッチコンテナオーケストレーションの実装

導入Dockerfile ビルドの実行は、単一のコンテナの手動操作です。マイクロサービス アーキテク...

いくつかの CSS3 タグの短縮形 (推奨)

border-radius: CSS3 丸い角構文: border-radius: 25px;楕円...