ホームページ >バックエンド開発 >PHPチュートリアル >PHP での Redis の基本的な使用例、redisPHP 使用例_PHP チュートリアル

PHP での Redis の基本的な使用例、redisPHP 使用例_PHP チュートリアル

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

PHP での Redis の基本的な使用例、redisPHP の使用例

ダウンロード http://www.oschina.net/p/redis

解凍後のファイルには、lib ソース ファイル、サンプル、テスト テストが含まれています

lib ディレクトリをプロジェクトにコピーすると、predis 操作を開始できます。

//autoload を使用して関連ライブラリをロードします。ここでの焦点は $file;
spl_autoload_register(function($class) {
$file = __DIR__.'/lib/Predis/'.$class.'.php'; を要求することです。
if (file_exists($file)) {
$file が必要;
return true;
}
});

//接続するIP、ポート、対応するデータベースを設定します
$server = array(
'host' => '127.0.0.1',
'port' => 6379,
'database' => 15
);
$redis = 新しいクライアント($server);

//通常の set/get 操作
$redis->set('library', 'predis');
$retval = $redis->get('library');
echo $retval;プレディス

//setex ストレージの有効期間を設定します
$redis->setex(‘str’, 10, ‘bar’); //ストレージの有効期間が 10 秒であることを示します

//setnx/msetnx は add 操作と同等であり、既存の値を上書きしません
$redis->setnx('foo',12); //true
$redis->setnx('foo', 34); //偽

//set の変形である getset 操作、結果は置換前の値を返します
$redis->getset(‘foo’,56);//34 を返します

// incrby/incr/decrby/decr 値をインクリメントおよびデクリメントします
$redis->incr('foo') //foo は 57 です
$redis->incrby('foo',2);ふーさんは59歳

//exists は特定の値が存在するかどうかを検出します
$redis->exists(‘foo’);//true

//del delete
$redis->del(‘foo’);//true

//型の型検出、文字列は文字列を返す、リストはリストを返す、セットテーブルはset/zsetを返す、ハッシュテーブルはハッシュを返す
$redis->type('foo');//存在しない、なしを返す
$redis ->set('str','test');
$redis->type('str'); //文字列、文字列を返します

//append 既存の文字列に接続します
$redis->append(‘str’,’_123’); //蓄積された文字列長 8 を返します、入力された str は 'test_123' です

//setrange 部分置換操作
$redis->setrange('str',0,'abc'); //パラメータ 2 が 0 の場合、set 操作と同等です
$redis->setrange('str',0,'abc'); setrange('str ',2,'cd');//2 文字目からの置換を示す 4 を返し、'str' は 'abcd' になります

//substr部分取得操作
$redis->substr('str',0,2);//0文字目から2文字目の合計3文字を取得することを示し、'abc'返されます

//strlen は文字列の長さを取得します
$redis->strlen(‘str’); //4 を返します

//setbit/getbit ビットの格納と取得
$redis->setbit('binary',31,1); //31 番目のビットに 1 が格納されていることを示します。ここにはビッグ エンディアンまたはスモール エンディアンの問題がある可能性があります。しかし、それは問題ではありません getbit
$redis->getbit('binary',31); //Return 1

//キーのあいまい検索機能、* と ? (1 文字に一致) をサポート
$redis->set('foo1',123);
$redis->set('foo2',456);
$redis ->keys('foo*'); //foo1 と foo2 の配列を返します
$redis->keys('f?o?') //上記と同じです

//randomkey はランダムにキーを返します
$redis->randomkey(); //「foo1」または「foo2」、または redis に存在するその他のキーを返す場合があります

//rename/renamenx キーの名前を変更します。違いは、renamenx では既存のキーへの変更ができないことです
$redis->rename('str','str2') //元のキーの名前を 'str' に変更します。キーが「str2」に変更されました

//expire は Key-Value の適時性を設定し、ttl は残りの有効期間を取得し、persist は永続ストレージにリセットされます
$redis->expire('foo', 1) //有効期間を 1 秒に設定します
$redis-> ;ttl('foo'); //有効期間の値 1s を返します
$redis->expire('foo') //期限切れ動作をキャンセルします

//dbsize は現在の Redis データベース内のレコードの総数を返します
$redis->dbsize();

/*
キュー操作
*/

//rpush/rpushx 順序付きリスト操作、キューの最後尾から要素を挿入します
//lpush/lpushx と rpush/rpushx の違いは、上記と同様にキューの先頭に挿入されることです。'x ' は既存のキーに対してのみ操作を実行することを意味します Operation
$redis->rpush('fooList', 'bar1') //リストの長さを返します 1
$redis->lpush('fooList', 'bar0) '); //リストの長さを返します 2
$redis->rpushx('fooList', 'bar2'); //rpushx は既存のキューに追加するだけで、それ以外の場合は 0 を返します
//llen現在のリストの長さを返します
$redis-> llen('fooList');//3

;

//lrange キュー内の要素の範囲を返します
$redis->lrange('fooList',0,1); //返される配列には 0 から 1 までの 2 つの要素が含まれます
$redis-> fooList',0,-1);//0 番目から最後のものまでを返します。これは、すべての要素を返すのと同じです。以下同様、redis では負の数値がよく使用されることに注意してください。

//lindex は指定されたシーケンス位置にあるリスト要素を返します

$redis->lindex(‘fooList’,1) //returns ‘bar1’
;

//lset キュー内の指定された位置の値を変更します

$redis->lset(‘fooList’,1,’123′);//位置 1 の要素を変更し、true を返します

//lrem キューの左から指定した数の文字を削除します

$redis->lrem('fooList',1,'_') //左から 1 文字削除します (右から -1 を使用します) ) キュー内です' _' (ある場合)

//lpop/rpop はスタック構造と同様に左端または右端の要素をポップ (および削除) します

$redis->lpop('fooList'); //'bar0'
$redis->rpop(' fooList' ); //'バー2'

//ltrim キューの変更、左からいくつかの要素を保持し、残りを削除

$redis->ltrim(‘fooList’, 0,1); //左から 0 番目から 1 番目の要素を保持します

//rpoplpush は、あるキューから要素をポップし、別のキューにプッシュします

$redis->rpush('list1′,'ab0′);
$redis->rpush('list1′,'ab1′) ;
$redis->rpush('list2','ab2');
$redis->rpush('list2','ab3');
$redis->rpoplpush('list1','list2' ); //結果 list1 =>array('ab0'), list2 =>array('ab1','ab2','ab3')
$redis->rpoplpush('list2','list2') ;/ /同じキューにも適用でき、最後の要素を先頭に移動 list2 =>array('ab3','ab1','ab2')

//linsert はキューの途中で指定された要素の前または後に要素を挿入します

$redis->linsert('list2', 'before','ab1','123'); //要素 ' の前に挿入することを示しますab1' '123'
$redis->linsert('list2', 'after','ab1','456') //要素 'ab1' の後に '456'
を挿入することを示します

//blpop/brpop はキューが空でなくなるまでブロックして待機し、次に左端または右端の要素をポップアウトします (この関数は PHP の外で非常に便利であると言えます)

//brpoplpush もブロックして待機します操作、結果は rpoplpush と同じです
$redis->blpop('list3',10); //list3 が空の場合、空でない最初の要素がポップされるまで待機し、10 秒後にタイムアウトします

/**

テーブル操作の設定
*/

//sadd は要素を追加し、true を返し、false を繰り返し返します

$redis->sadd('set1','ab');
$redis->sadd('set1','cd');
$redis ->sadd('set1','ef');

//srem は指定された要素を削除します

$redis->srem(‘set1’,’cd’) //「cd」要素を削除します

//spop は最初の要素をポップアップします

$redis->spop(‘set1’);

//smove は、現在のセット テーブルの指定された要素を別のセット テーブルに移動します

$redis->sadd('set2','123');
$redis->smove('set1','set2', ' ab');// 'set1' の 'ab' を 'set2' に移動し、true または false を返します

//scard は現在のセット テーブル内の要素の数を返します

$redis->scard(‘set2’);//2

//sismember 要素が現在のテーブルに属するかどうかを決定します

$redis->sismember(‘set2’,’123’) //true または false

//smembers は現在のテーブルのすべての要素を返します

$redis->smembers('set2'); //array('123','ab');

//sinter/sunion/sdiff 2 つのテーブルの要素の交差/和集合/補数を返します

$redis->sadd('set1′,'ab');
$redis->sinter('set2′ ,' set1'); //配列('ab')を返します

//sinterstore/sunionstore/sdiffstore 2 つのテーブルの交差/和集合/補要素を 3 番目のテーブルにコピーします

$redis->set('foo',0);
$redis->sinterstore( 'foo' ,'set1'); //これは、'set1' の内容を 'foo' にコピーし、'foo' を set table に変換することと同じです
$redis->sinterstore('foo',array ('set1', 'set2')); //'set1' と 'set2' の同じ要素を 'foo' テーブルにコピーし、'foo' の元の内容を上書きします

//srandmember はテーブル内のランダムな要素を返します

$redis->srandmember(‘set1’);

/**

オーダーセットテーブルオペレーション
*/

//sadd は要素を追加してシリアル番号を設定し、true を返し、false を繰り返し返します
$redis->zadd('zset1',1,'ab');
$redis->zadd('zset1',2 , 'cd');
$redis->zadd('zset1',3,'ef');

//zincrby は、指定された要素のインデックス値を増減させ、要素の順序を変更します
$redis->zincrby(‘zset1’,10,’ab’);//11 を返します

//zrem は指定された要素を削除します
$redis->zrem(‘zset1’,’ef’) //true または false

//zrange はテーブル内の指定された範囲の要素を位置順に返します
$redis->zrange('zset1',0,1) //位置 0 と 1 の間の要素を返します (2 つ)
$redis - >zrange('zset1',0,-1);//位置 0 と最後から最初の要素の間の要素を返します (すべての要素に相当)

//zrevrange 上記と同様に、テーブル内の指定された範囲の要素を逆順に返します
$redis->zrevrange('zset1',0,-1); //要素の順序は zrange と逆です。

//zrangebyscore/zrevrangebyscore テーブル内の指定されたインデックス範囲内の要素を順序/降順で返します
$redis->zadd('zset1',3,'ef');
$redis->zadd(' zset1′,5 ,'gh');
$redis->zrangebyscore('zset1',2,9); //要素を返す array('ef','gh')
//インデックス値間のパラメータ形式2-9
$redis->zrangebyscore('zset1',2,9,'withscores'); //インデックス値 2-9 の間の要素を返し、インデックス値を含みますarray(array('ef') ,3),array( 'gh',5))
$redis->zrangebyscore('zset1',2,9,array('withscores' =>true,'limit'=>array(1, 2) ))); // インデックス値 2 ~ 9 の間の要素を返します。 'withscores' =>true はインデックス値が含まれることを意味します。 'limit'=>array(1, 2) は、最大値が含まれることを意味します。 2 つの項目が返され、結果は array(array('ef ',3),array('gh',5)) になります

//zunionstore/zinterstore 複数のテーブルの結合/交差を別のテーブルに格納します
$redis->zunionstore('zset3',array('zset1','zset2','zset0')); 'zset1'、'zset2'、'zset0' を 'zset3' に変換します
//その他のパラメータ
$redis->zunionstore('zset3',array('zset1','zset2'),array ('weights' = > array(5,0)));//weights パラメータは重みを表します。つまり、結合後の値が 5 より大きい要素が最初にランク付けされ、0 より大きい要素が最後にランク付けされます
$redis-> ;zunionstore ('zset3',array('zset1','zset2'),array('aggregate' => 'max'));//'aggregate' => 'max' または 'min' は同じ意味ですUnion の後、要素は大きな値を取るのか、それとも小さな値を取るのか

//zcount はインデックス範囲内の要素の数をカウントします
$redis->zcount('zset1',3,5);//2
$redis->zcount('zset1','(3', 5 )); //'(3' は、インデックス値が 3 ~ 5 であるが 3 を含まないことを意味します。同様に、上限が 5 であるが 5 を含まないことを意味する '(5' を使用することもできます

//zcard は要素の数をカウントします
$redis->zcard(‘zset1’);//4

//zscore 要素のインデックスをクエリします
$redis->zscore(‘zset1′,’ef’);//3

//zremrangebyscore インデックス範囲内の要素を削除します
$redis->zremrangebyscore('zset1',0,2); //0 ~ 2 ('ab','cd') のインデックスを持つ要素を削除し、return要素数 2

//zrank/zrevrank テーブルの順序/降順で要素の位置を返します (インデックスではありません)
$redis->zrank('zset1','ef');//最初の要素であるため 0 を返します;zrevrank 次に 1 (最後のもの) を返します

//zremrangebyrank テーブル内の指定された位置範囲の要素を削除します
$redis->zremrangebyrank(‘zset1’,0,10); //位置 0 ~ 10 の要素を削除し、削除された要素の数 2 を返します

/**
ハッシュテーブル操作
*/

//hset/hget ハッシュテーブルデータにアクセス
$redis->hset('hash1','key1','v1') //キー「key1」と値「v1」を持つ要素を保存
$redis ->hset('hash1','key2','v2');
$redis->hget('hash1','key1'); //テーブル 'hash1' からキーを取得します 'key1' の値' は 'v1' を返します

//hexists は、指定されたキーがハッシュ テーブルに存在するかどうかを返します
$redis->hexists ('hash1','key1') //true または false

;

//hdel ハッシュテーブル内の指定されたキーを持つ要素を削除します
$redis->hdel(‘hash1’,’key2’) //true または false

//hlen はハッシュ テーブルの要素の数を返します
$redis->hlen(‘hash1’); //1

//hsetnx は要素を追加しますが、それを繰り返すことはできません
$redis->hsetnx('hash1','key1','v2'); //false
$redis->hsetnx('hash1','key2) ') ,'v2') //本当

;

//hmset/hmget ハッシュ テーブルの複数の要素にアクセスします
$redis->hmset('hash1',array('key3'=>'v3','key4'=>'v4')); $redis->hmget('hash1',array('key3','key4')) //対応する値を返す array('v3','v4')

//hincrby は指定されたキーを蓄積します

$redis->hincrby('hash1','key5',3) //3 を返します
$redis->hincrby('hash1','key5',10); // 13 を返します

//hkeys ハッシュ テーブル内のすべてのキーを返します

$redis->hkeys('hash1'); //配列('key1','key2','key3','key4','key5')を返します

//hvals はハッシュテーブル内のすべての値を返します

$redis->hvals(‘hash1’) //array(‘v1’,’v2’,’v3’,’v4’,13)を返します

//hgetall はハッシュ テーブル要素全体を返します

$redis->hgetall('hash1'); //array('key1'=>'v1','key2'=>'v2','key3 を返します) ' =>'v3','key4'=>'v4','key5'=>13)

/**

並べ替え操作
*/

//sort 並べ替え

$redis->rpush('tab',3);
$redis->rpush('tab',2);
$redis->rpush('tab',17);
$redis->sort('tab'); //配列(2,3,17)を返す
//パラメータを使用して、array('sort' => 'desc','limit' => ; array( 1, 2))
$redis->sort('tab',array('sort' => 'desc')) //降順に並べて、array(17,3,2)を返します
$ redis ->sort('tab',array('limit' => array(1, 2))); // 連続した位置にある 1 の 2 つの要素を返します (ここでの 2 は位置ではなく数値を指します) ) , return array(3,17)
$redis->sort('tab',array('limit' => array('alpha' => true)))); //最初の文字でソートされた配列を返します。 (17,2,3)、17 の最初の文字が '1' であるため、最初にランク付けされます
$redis->sort('tab',array('limit' => array('store' =>) ; ' 順序付け'))); //永続的な並べ替えを示し、要素の数を返します
$redis->sort('tab',array('limit' => array('get' => 'pre_*) ') )); // ワイルドカード文字 '*' は要素のフィルタリングに使用されます。つまり、'pre_' で始まる要素のみが返されます

/**

redis 管理操作
*/

//select 操作するデータベースを指定します

$redis->select(‘mydb’) //mydbを指定します、存在しない場合は作成します
;

//flushdb 現在のライブラリをクリアします

$redis->flushdb();

//move 現在のライブラリから他のライブラリに要素を移動します

$redis->set('foo', 'bar');
$redis->move('foo', 'mydb2'); 「mydb2」ライブラリが存在します

//info はサービスのステータス情報を表示します

$redis->info();

//slaveof スレーブサーバーを設定します

$redis->slaveof('127.0.0.1',80); //127.0.0.1 ポート 80 のサーバーをスレーブサーバーとして設定します
$redis->slaveof(); //サーバーからクリア

//サーバー データを同期的にディスクに保存します

$redis->save();
//サーバー データを非同期的にディスクに保存します
$redis->bgsave();
//??
$redis->bgrewriteaof ();
//ディスクが最後に更新された時刻を返します
$redis->lastsave();

//複数のキーと値を設定/取得

$mkv = array(
'usr:0001' => '最初のユーザー',
'usr:0002' => '2 番目のユーザー',
'usr:0003 ' =>'3 番目のユーザー'
);
$redis->mset($mkv); //複数のキーに対応するストレージ値
$retval = $redis->mget(array_keys($mkv)); //複数のキーに対応する値を取得
print_r($retval);

//バッチ操作

$replies = $redis->pipeline(function($pipe) {
$pipe->ping();
$pipe->flushdb();
$pipe->incrby( 'counter', 10); //インクリメント操作
$pipe->incrby('counter', 30);
$pipe->exists('counter');
$pipe->get('counter ' );
$pipe->mget('does_not_exist', 'counter');
});
print_r($replies);

//CAS、トランザクション操作

function zpop($client, $zsetKey) {
$element = null;
$options = array(
'cas' => true, // CAS 操作をサポートして初期化します
'watch' => $zsetKey, // 変更を検出するために監視する必要があるキー
'retry' => 3, // クライアントが例外で救済するまでの、中止されたトランザクションの再試行回数
);
;

$txReply = $client->multiExec($options, function($tx)

use ($zsetKey, &$element) {
@list($element) = $tx->zrange($zsetKey, 0, 0);
if (isset($element)) {
$tx->multi(); // CAS では、MULTI を明示的に呼び出す必要があります。
$tx->zrem($zsetKey, $element) ;
}
});
return $element;
}
$zpopped = zpop($redis, 'zset');
echo isset($zpopped) ? “ZPOPed $zpopped” : “ZPOP には何もありません!”, “n”;

//保存されているキー追加前、例: ‘nrk:’

$redis->getProfile()->setPreprocessor(new KeyPrefixPreprocessor(‘nrk:’));

// 分散形式を保持するいくつかの方法

$multiple_servers = array(
array(
'host' => '127.0.0.1',
'port' => 6379,
'database' => 15,
'エイリアス' => '最初',
),
array(
'ホスト' => '127.0.0.1',
'ポート' => 6380,
'データベース' => 15,
'エイリアス' => 2 番目,
),
);

PredisDistributionIDistributionStrategy を使用します;

クラス NaiveDistributionStrategy は IDistributionStrategy を実装します {

private $_nodes, $_nodesCount;

パブリック関数 __constructor() {

$this->_nodes = array();
$this->_nodesCount = 0;
}

public function add($node, $weight = null) {

$this->_nodes[] = $node;
$this->_nodesCount++;
}

パブリック関数remove($node) {

$this->_nodes = array_filter($this->_nodes, function($n) use($node) {
return $n !== $node;
}) ;
$this->_nodesCount = count($this->_nodes);
}

public function get($key) {

$count = $this->_nodesCount;
if ($count === 0) {
throw new RuntimeException('接続なし');
}
return $this-> ;_nodes[$count >; 1? abs(crc32($key) % $count) : 0];
}

パブリック関数generateKey($value) {

return crc32($value);
}
}

//配置键分布戦略略

$options = array(
‘key_distribution’ => new NaiveDistributionStrategy(),
);

$redis = 新しい PredisClient($multiple_servers, $options);

for ($i = 0; $i set(“key:$i”, str_pad($i, 4, '0′, 0));

$redis->get(“key:$i”);
}

$server1 = $redis->getClientFor(‘first’)->info();

$server2 = $redis->getClientFor(‘first’)->info();

printf(“サーバー '%s' には %d 個のキーがあり、サーバー '%s' には %d 個のキーがあります。n”,

'first', $server1['db15']['keys'], 'first', $ server2['db15']['keys']

php redis怎解决回复功可

php の redis は、データを内部ストレージに保存し、電気的損失を防ぐ可能性があります。ウェブ上に php-redis の中国語ハンドラがあります。以下の例:
connect('127.0.0.1', 6379); // 6379 は默认端口$result = $redis->set('9639002718',"comment"); // 設置键值echo $result = $redis->get('9639002718'); // 取得键值$all = $redis->getMultiple(array('9639002718', '9639002718')); // 同時に複数のセキュリティ値を取得します。 // すべてのセキュリティ値を取得する方法は提供されていません。次の句では、使用できるかどうかはわかりませんが、試してみることができます。 $all = $redis->getMultiple(array('*' ));
望取纳、谢谢サポート!  



php 接続redis,怎判断Redis かどうか挂掉

redis ping コマンド経由

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/888532.html技術記事 PHP での Redis の基本的な使用例、redisPHP 使用例のダウンロード http://www.oschina.net/p/redis 解凍後、lib ソース ファイル、サンプル、テスト テスト lib ディレクトリを次の場所にコピーします。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。