ホームページ  >  記事  >  バックエンド開発  >  PHP 環境で Memcache を使用する方法_PHP チュートリアル

PHP 環境で Memcache を使用する方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:33:42855ブラウズ

Memcache は danga.com のプロジェクトで、最初は LiveJournal に提供されていました。現在、世界中の多くの人々がこのキャッシュ プロジェクトを使用して独自の高負荷 Web サイトを構築し、データベースへの負担を軽減しています。任意の数の接続を処理でき、ノンブロッキング ネットワーク IO を使用します。 Memcached の動作メカニズムは、メモリ内のスペースを開いて HashTable を作成することであるため、Memcached はこれらの HashTable を独自に管理します。 Memcache 公式 Web サイト: http://www.danga.com/memcached、詳細情報はここでご覧いただけます。

Memcache と memcached という 2 つの名前があるのはなぜですか?実際、Memcache はこのプロジェクトの名前であり、memcached はサーバー側のメイン プログラム ファイルの名前です。 1 つはプロジェクト名で、もう 1 つはメイン プログラムのファイル名です。インターネット上では理解できず、これらを同じ意味で使用している人がたくさんいました。

Memcacheのインストール

これは、memcache サーバーのインストールと memcached クライアントのインストールの 2 つのプロセスに分かれています。

いわゆるサーバー側インストールは、データを保存するためにサーバー (通常は Linux システム) に Memcache をインストールすることです。

いわゆるクライアントインストールとは、PHP (または他のプログラム、Memcache には他の優れた API インターフェイスもあります) を指し、サーバー側で Memcache が提供する機能を使用するには、拡張機能を追加する必要があります。

PHP 用の Memcache

リーリー

正常であれば、ブラウザは次のように出力します:

リーリー

プログラムコード解析

Memcache オブジェクトを初期化します: $mem = new Memcache;

Memcache サーバーに接続します。最初のパラメーターはサーバーの IP アドレスで、2 番目のパラメーターは Memcache のオープン ポートです: $mem->connect("192.168.0.200", 12000) ;

データを Memcache サーバーに保存します。最初のパラメータはデータのキーであり、2 番目のパラメータは保存する必要があるデータの内容です。通常は 0 または MEMCACHE_COMPRESSED に設定します。これは、データがこの期間内に有効であることを意味します。単位は秒です。 0 に設定すると、永久に有効になります。ここでは 1 分間有効となる 60 を設定しました。 $mem->set('key1', 'This is first value', 0, 60) );

Memcache サーバーからデータを取得します。これには、データを取得するためのキーとなるパラメーターが 1 つだけあります。このデータを取得した後、出力を出力します。 リーリー

ここで、replace メソッドを使用して、上記の key1 の値を置き換えます。replace メソッドのパラメータは設定されたものと同じですが、最初のパラメータ key1 は、データの内容を置き換えるキーである必要があります。

リーリー

同様に、Memcache も配列を保存できます。以下は Memcache に保存され、取得されて出力される配列です。 リーリー

ここでデータを削除し、delte インターフェイスを使用します。パラメータはキーです。その後、Memcache サーバー内のキーのデータを削除できます。最終的な出力には結果はありません。 リーリー

最後に、Memcache サーバーに保存されているすべてのデータを消去します。最終的に出力された key2 データが空になり、最後に接続が閉じられることがわかります。 リーリー

Memcacheの使用法

Memcache を使用する Web サイトは、一般的に比較的大きなトラフィックを伴います。データベースへの負荷を軽減するために、Memcache は、フロントエンドで高速にアクセスできるように、情報の一部をメモリに保存するキャッシュ領域として使用されます。結局のところ、単一の Memcache のメモリ容量には限界があります。ここでは私の個人的な意見を述べているだけであり、実践したわけではないので、参考としてのみ使用してください。

分散アプリケーション

Memcache はもともと分散配布をサポートしていますが、より良いサポートを提供するためにクライアントがわずかに変更されました。たとえば、ユーザーベースの Web サイトの場合、各ユーザーはユーザー ID を持っているため、固定 ID に従って抽出してアクセスできます。たとえば、1 で始まるユーザーは に保存されます。最初の 1 つの Memcache サーバーでは、2 で始まるユーザーのデータが 2 番目の Memcache サーバーに保存され、まずユーザー ID に従ってアクセス データが変換され、アクセスされます。

ただし、これにはユーザー ID を判断する必要があるという欠点があります。ビジネスに一貫性がない場合、または他の種類のアプリケーションがあまり適していない可能性がある場合は、実際のビジネスに基づいて検討するか、より適切な方法を考えることができます。

データベースの負荷を軽減します

これはさらに重要で、基本的にすべてのデータがデータベースに頻繁にアクセスされると、データベースのパフォーマンスが大幅に低下し、同時により多くのユーザーにサービスを提供できなくなります。たとえば、MySQL では特に頻繁にロックが発生します。 .table を使用して、Memcache にデータベースへの負荷を分散させます。変更が比較的小さく、フロントエンドへの大規模な変更を必要としない方法で、現在のアーキテクチャを変更する方法が必要です。

私が考えた簡単な方法:

后端的数据库操作模块,把所有的Select操作提取出来(update/delete/insert不管),然后把对应的SQL进行相应的hash算法计算得出一个hash数据key(比如MD5或者SHA),然后把这个key去Memcache中查找数据,如果这个数据不存在,说明还没写入到缓存中,那么从数据库把数据提取出来,一个是数组类格式,然后把数据在set到Memcache中,key就是这个SQL的hash值,然后相应的设置一个失效时间,比如一个小时,那么一个小时中的数据都是从缓存中提取的,有效减少数据库的压力。缺点是数据不实时,当数据做了修改以后,无法实时到前端显示,并且还有可能对内存占用比较大,毕竟每次select出来的数据数量可能比较巨大,这个是需要考虑的因素。

Memcache的安全

我们上面的Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

内网访问

最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的访问能够有效阻止其他非法的访问。

# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid

Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接。

设置防火墙

防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。

# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT

上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752433.htmlTechArticleMemcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。