PHPデータベース操作三:redis用法分析

7104 ワード

この例では、PHPデータベース操作redisの使用方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
memcacheは使いやすく、データベースが高同時性に遭遇した場合のIO問題を解決したが、まだ多くの問題が解決されていない.
1、データの持続性の問題、memcacheはメモリで記憶し、memcacheサーバーがダウンタイムすると、記憶したデータはすべて失われる.
2、memcacheが保存するデータ型は単一で、key-value型のデータだけをサポートし、複雑なタイプのデータを保存するには、PHPスクリプトの大量の論理操作が必要である.
redisの基本紹介
redisはメモリ非関係型データベースでもあり、memcacheのデータストレージ上のすべての利点を有し、memcacheに基づいています(memcacheの紹介は前の編を参照できます://www.jb 51.net/article/121,315.html
データ持続性機能を追加し、redisはrdbとaofの2つの方法でデータ持続性を実現し、サーバが突然ダウンタイムしたときにも保存したすべてのデータをほぼ保持することができます.string(文字列)、set(集合)、sorted_を追加set(秩序化された集合)、hash(ハッシュ)、list(チェーンテーブル)データ型は、マルチタイプのストレージとデータベース操作を容易にします.セキュリティ認証が追加されました(サーバに接続パスワードを設定できます).redisの主従分離などのシステムはより完備している(公式開発).オリジナルは、パブリケーション/サブスクリプション、キュー、キャッシュなどのツールをサポートします.
もちろんmemcacheと比較すると、データベースの操作も複雑です.
redisの適用シーンとインストール
redisはmemcacheが使える場所以外にも使えます.
チェーンテーブルでデータを格納し、最新情報を読み取ることができます.シーケンステーブルでデータを格納することができ、そのランキングデータを読み取ることで、注目/注目情報を集合で格納することができる.
公式サイト(http://redis.io/)を最新バージョンにダウンロードし、redis公式にコンパイルされているため、make/make testを直接行い、make install時にインストールパスを指定することができます.
インストールが完了したら、インストールパッケージのredisのconfファイルmvをインストールディレクトリのbinディレクトリの下に配置してredisを起動する必要があります.
このほか、インストールディレクトリファイルの下にbinディレクトリには次のファイルがあります.
redis-benchmark//パフォーマンステストツール-n xxxは、redis-check-aof//aofログをテストするためのツールredis-check-dump//rbdログをチェックするツールredis-cli//クライアントredis-server//redisのサーバプロセスredis-sentinel//redis哨兵モードのプロセス
vimでredisを開きます.confはredisサーバを簡単に構成します.
daemonizeオプションをyesに変更してdatabase nをバックグラウンドで実行し、redisサーバにn個のサーバを設定します.デフォルトは0-15で16個のport nです.redisサーバのリスニングポートを設定します.requirepass yourpasswordを設定してパスワードを設定します.クライアントが接続した後、auth passwordで検証を行います.
我々は./redis-server ./redis.confコマンドを使用してredisサーバを開きます.
使用./redis-cli[-p port]は、サーバに接続するために使用されます(デフォルト6379).
redisのコマンド
基本(string文字列タイプを含む)コマンド

set key value [ex|px n] //   [        n /  ]
get key //   
del key //   
incby|decby key n // key      n
rename key newkey//     
select n//   n    
ttl key //  key     ,-1      ,     -2
expire key n //  key      n  
type key //  key     
flushdb //          
shutdown [nosave]//     [   ]


リストコマンド

lpush/rpush list value1 [value2 value3...] // value     / 
lpop/rpop list //     /   
llen list //      


setコマンド

sadd set value //      value
smembers set //          
srem set value1[value2...]//        
sismember set value //  value           


sorted_set(整列集合)コマンド
zadd sorted_set score1 key1 score2 key2 score3 key3...秩序化されたコレクションにkeyを追加し、scoreを定義します.コレクションはscoreでzrange sorted_をソートします.set a b[withscores]aからbまでの表示順序リストの値bが-1の場合はすべて表示、[各値を表示するscore]zrank/zrevrank sorted_set keyシーケンス/逆シーケンス秩序表示keyシーケンスセット内の位置zrem sorted_set key秩序セットからkey zcard sortedを削除set[m n]計算秩序集合の中で[scoreはmからnの間の]全部で何個あります
hash(ハッシュタイプ)コマンド
hset hashset key value hashテーブルkeyの値をvalue hget hashset key hashテーブルのkey値hdel hashset key hashテーブルの1つのkey hlen hashset hashテーブルの長さを削除する
redisコマンドは多く、ここには簡単なものしかありません.具体的なコマンドは公式サイトや中国語ステーションで行うことができます.http://www.redis.cn/翻訳ドキュメントの表示
redisのトランザクションとパブリッシュ、サブスクリプション
redisのトランザクションはmysqlと似ていますが、文だけが異なります.

        redis        mysql
        multi      start transition
              query  
        exec        commit
        discard       roll back


同時影響の場合、redisにはwatch文制御があり、watch文によって監視されるkey値がトランザクションのコミット前に変化すると、トランザクションは自動的にロールバックされません.
watch key1 [key2...] unwatchはすべてのモニタリングをキャンセルします.
redisのオリジナルパブリケーションとサブスクリプション機能は、設計モードのオブザーバーモードに似ており、被サブスクリプションオブジェクトが新しいメッセージをパブリッシュすると、すべてのサブスクリプションオブジェクトがこのメッセージを受信します.使用方法:

subscribe key //    key,    key       ,     
public key value//    key,  value,               
unsubscribe key //    
psubscribe key1 key2/pattrn //[    ]    key

redisのデータ持続化
redisはrdbとaofの2つの方式でデータの持続化を実現し、2つのデータの持続化方式はいずれもCPU資源を占有し、redisの実行効率を遅らせ、一般的に2つのモードが組み合わせて使用される.
rdb方式の主な原理は、ある書き込み条件に達した後、メモリ内のすべてのデータのスナップショットをディスクに保存し、データ復旧時にデータスナップショットで復旧することである.
aof方式は、各redis実行コマンドをテキストファイルに記録し、データを復元する際に記録を繰り返すコマンドである.
rdb方式によるデータ持続化
save/bgSaveコマンドでrdb方式[バックグラウンド]をアクティブに使用してrdbを格納
redisを変更します.confファイルを構成する

save m n          // m   n          ,      ,         ,         
stop-writes-on-bgsave-error yes //             ,     
rdbcompression yes     //        
rdbchecksum yes       //             
dbfilename xxx.rdb     //      
dir path          //       


aof方式によるデータ持続化
aof永続化の問題は、各命令を記録することであり、1つのキーの繰り返し操作であっても、aofファイルがますます大きくなり、aof書き換えを使用するとaofファイルの体積が大幅に減少します.これは、keyが何度変化したかにかかわらず、最後にデータベース内のデータの状態をコマンドに統一的に逆化するためです.bgrewriteコマンドを使用してaofファイルを手動で書き換えることができます.
配置redis.confファイル:

noapppendfsync-on-rewrite yes    //    rdb     aof,aof         ,dump rdb            。
appendfsync everysec        //      
appendfilename           //path/filename.aof
auto-aof-rewrite-percentage 100   //      100%   
auto-aof-rewrite-min-size 64m    //      64m   


redisのプライマリ・スレーブ・レプリケーション
主従が複製する時、主従はすべて自分のものでなければならない.confファイルを使用してサーバを起動します.プライマリ・サーバは、rdbを閉じてサーバからrdbを生成し、プライマリ・サーバの速度を速めることができます.
サーバからredis 6380をコピーする.confファイル、設定ポート、pid保存ファイル、読み取り専用、プライマリサーバのパスワード.

port 6380
pidfile filename
slave-read-only yes
masterauth password


設定が完了したら、それぞれ異なるconfファイルでサーバを開きます.
プライマリ・サーバのダウンタイムを考慮して、sentinel redis哨兵を使用してサーバのステータスを監視し、プライマリ・サーバのダウンタイム後に反応します.sentinelはredis集積で、インストールパッケージのsentinelだけを必要とします.confファイルをredis/binディレクトリにコピーし、redis-sentinelプロセスファイルを使用してサーバを起動すればよい.

port 26379                    //sentinel      
daemonize yes                  //      
sentinel monitor mymaster 192.168.100.211 6379 2 //     ip    ,                          
sentinel down-after-milliseconds mymaster 30000 //30000             
sentinel parallel-syncs mymaster 1        //         ,          ,              
sentinel failover-timeout mymaster 900000    // 90000               


PHP操作redisサーバ
phpのredis拡張をインストールした後(具体的には前述のLinuxのphpを参照してRedis拡張をインストールする方法//www.jb 51.net/article/99775.htmlを参照)、redisのクラス関数ライブラリを直接使用することができます.
以下に、典型的なredisアプリケーションを示す.

$redis=new Redis();           //     Redis  
$redis->connect('host',port);      //  redis   
$redis->auth('password');        //     
$redis->set($key,$value[,$expire_time]);//     
$content=$redis->get($key);       //   


具体的な関数は、公式のドキュメントを参照できます.https://github.com/phpredis/phpredis
PHPに関する詳細について興味のある読者は、「php+redisデータベースプログラム設計テクニック総括」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「PHP基本文法入門チュートリアル」、「PHP配列(Array)操作テクニック大全」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.