キャッシュサーバーを構築するための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オブジェクト指向について学ぼう

推薦する

MySQL ストアド関数(カスタム関数)の定義と使用方法の詳細な説明

ストアド関数ストアド関数とは: SQL コードの一部をカプセル化し、特定の関数を完了して、結果を返し...

Vueリストデータを削除した後、ページを自動的に更新する方法と更新方法の詳細な説明

問題の説明:フロントエンドがデータの一部を削除したり、新しいデータを追加したりすると、バックエンドの...

計算機機能を実装するミニプログラム

この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

WeChatアプレットを少なく使う方法(最適な方法)

序文私は less/sass を書くことに慣れていますが、小さなプログラムを開発するときには、まだ ...

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

Vueログイン機能の実装

目次前面に書かれたログインの概要ログインビジネスプロセスログインサービスの関連技術ポイントログイント...

MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法

コマンド: mysqlhotcopyこのコマンドは、ファイルをコピーする前にテーブルをロックし、不完...

Vueウォッチの監視方法の概要

目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

インライン要素スパンの最小高さの定義

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

MySQLスレーブライブラリの復元の実践記録

状況の説明:今日、MySQL データベースのスレーブ ノード ホストにログインしたところ、/var/...

js の parseInt() の奇妙な動作の調査と修正

背景: parseInt(0.006) または parseInt(0.0006) は 0 という値を...

Windows Server 2012 でファイル サーバーを構築するための詳細な手順

ファイル サーバーは、企業内で最も一般的に使用されるサーバーの一つであり、主にファイル共有を提供する...

CSSは親要素の下の最初の子要素を選択します(:first-child)

序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...