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 では負の数値がよく使用されることに注意してください。
$redis->lindex(‘fooList’,1) //returns ‘bar1’
;
$redis->lset(‘fooList’,1,’123′);//位置 1 の要素を変更し、true を返します
$redis->lrem('fooList',1,'_') //左から 1 文字削除します (右から -1 を使用します) ) キュー内です' _' (ある場合)
$redis->lpop('fooList'); //'bar0'
$redis->rpop(' fooList' ); //'バー2'
$redis->ltrim(‘fooList’, 0,1); //左から 0 番目から 1 番目の要素を保持します
$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')
$redis->linsert('list2', 'before','ab1','123'); //要素 ' の前に挿入することを示しますab1' '123'
$redis->linsert('list2', 'after','ab1','456') //要素 'ab1' の後に '456'
を挿入することを示します
//brpoplpush もブロックして待機します操作、結果は rpoplpush と同じです
$redis->blpop('list3',10); //list3 が空の場合、空でない最初の要素がポップされるまで待機し、10 秒後にタイムアウトします
テーブル操作の設定
*/
$redis->sadd('set1','ab');
$redis->sadd('set1','cd');
$redis ->sadd('set1','ef');
$redis->srem(‘set1’,’cd’) //「cd」要素を削除します
$redis->spop(‘set1’);
$redis->sadd('set2','123');
$redis->smove('set1','set2', ' ab');// 'set1' の 'ab' を 'set2' に移動し、true または false を返します
$redis->scard(‘set2’);//2
$redis->sismember(‘set2’,’123’) //true または false
$redis->smembers('set2'); //array('123','ab');
$redis->sadd('set1′,'ab');
$redis->sinter('set2′ ,' set1'); //配列('ab')を返します
$redis->set('foo',0);
$redis->sinterstore( 'foo' ,'set1'); //これは、'set1' の内容を 'foo' にコピーし、'foo' を set table に変換することと同じです
$redis->sinterstore('foo',array ('set1', 'set2')); //'set1' と 'set2' の同じ要素を 'foo' テーブルにコピーし、'foo' の元の内容を上書きします
$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')
$redis->hincrby('hash1','key5',3) //3 を返します
$redis->hincrby('hash1','key5',10); // 13 を返します
$redis->hkeys('hash1'); //配列('key1','key2','key3','key4','key5')を返します
$redis->hvals(‘hash1’) //array(‘v1’,’v2’,’v3’,’v4’,13)を返します
$redis->hgetall('hash1'); //array('key1'=>'v1','key2'=>'v2','key3 を返します) ' =>'v3','key4'=>'v4','key5'=>13)
並べ替え操作
*/
$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 管理操作
*/
$redis->select(‘mydb’) //mydbを指定します、存在しない場合は作成します
;
$redis->flushdb();
$redis->set('foo', 'bar');
$redis->move('foo', 'mydb2'); 「mydb2」ライブラリが存在します
$redis->info();
$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);
function zpop($client, $zsetKey) {
$element = null;
$options = array(
'cas' => true, // CAS 操作をサポートして初期化します
'watch' => $zsetKey, // 変更を検出するために監視する必要があるキー
'retry' => 3, // クライアントが例外で救済するまでの、中止されたトランザクションの再試行回数
);
;
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”;
$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 番目,
),
);
クラス NaiveDistributionStrategy は IDistributionStrategy を実装します {
private $_nodes, $_nodesCount;
$this->_nodes = array();
$this->_nodesCount = 0;
}
$this->_nodes[] = $node;
$this->_nodesCount++;
}
$this->_nodes = array_filter($this->_nodes, function($n) use($node) {
return $n !== $node;
}) ;
$this->_nodesCount = count($this->_nodes);
}
$count = $this->_nodesCount;
if ($count === 0) {
throw new RuntimeException('接続なし');
}
return $this-> ;_nodes[$count >; 1? abs(crc32($key) % $count) : 0];
}
return crc32($value);
}
}
$options = array(
‘key_distribution’ => new NaiveDistributionStrategy(),
);
for ($i = 0; $i set(“key:$i”, str_pad($i, 4, '0′, 0));
$redis->get(“key:$i”);
}
$server2 = $redis->getClientFor(‘first’)->info();
'first', $server1['db15']['keys'], 'first', $ server2['db15']['keys']
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 かどうか挂掉

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









