ホームページ > バックエンド開発 > PHPチュートリアル > PHP が Redis に接続するための predis 操作の完全なコレクション

PHP が Redis に接続するための predis 操作の完全なコレクション

WBOY
リリース: 2016-07-25 08:46:27
オリジナル
1346 人が閲覧しました

predis は、PHP が Redis に接続するための操作ライブラリです。完全に PHP で書かれており、多くの名前空間とクロージャーを使用するため、PHP5.3 以降のみをサポートします。そのため、測定されたパフォーマンスは平均で 25,000 回の読み取りと書き込みです。毎秒 c に変更されると思います。 この言語で書かれた PHP は、拡張後 (たとえば、C を使用して phpredis https://github.com/owlient/phpredis を拡張する) にパフォーマンスが大幅に向上します。

セッション データを Redis に保存するのも非常に簡単です:
session.save_handler = redis
session.save_path = “tcp://127.0.0.1:6379”

以下はいくつかの操作の概要であり、継続的に更新されます。

  1. //autoload を使用して関連ライブラリをロードします。ここでの焦点は $file;
  2. spl_autoload_register(function($class) {
  3. $file = __DIR__.'/lib/Predis/'.$class.' を要求することです。 php ';
  4. if (file_exists($file)) {
  5. require $file;
  6. return true;
  7. }
  8. });
  9. //接続 IP、ポート、および対応するデータベースを構成します
  10. $server = array(
  11. 'host' => '127.0.0.1',
  12. 'port' => 6379,
  13. 'database' = > ; 15
  14. );
  15. $redis = new Client($server);
  16. //通常の set/get 操作
  17. $redis->set('library', 'predis');
  18. $retval = $redis- > ;get('library');
  19. echo $retval; //'predis' を表示
  20. //setex 保存時間制限を設定します
  21. $redis->setex('str', 10, 'bar');ストレージの有効期間が 10 秒であることを示します
  22. //setnx/msetnx は add 操作と同等であり、既存の値を上書きしません
  23. $redis->setnx('foo',12); //true
  24. $redis ->setnx( 'foo',34); //false
  25. //set の変形である getset 操作、結果は置換前の値を返します
  26. $redis->getset('foo',56);/ /returns 34
  27. // incrby/incr/decrby/decr 値を増減します
  28. $redis->incr('foo') //foo は 57
  29. $redis->incrby('foo',2) ); //foo は 59
  30. //exists は特定の値が存在するかどうかを検出します
  31. $redis->exists('foo');//true
  32. //del は削除します
  33. $redis->del('foo ');//true
  34. //型の検出、文字列は文字列を返し、リストはリストを返し、セットテーブルはset/zsetを返し、ハッシュテーブルはハッシュを返します
  35. $redis->type('foo');//ではありません存在し、なしを返します
  36. $redis ->set('str','test');
  37. $redis->type('str'); //文字列、文字列を返します
  38. //既存の文字列に接続を追加します
  39. $redis-> ;append('str','_123'); //蓄積された文字列長 8 を返します、今回は str は 'test_123' です
  40. //setrange 部分置換操作
  41. $redis->setrange(' str', 0,'abc'); //Return 3、パラメータ 2 が 0 の場合、set 操作と同等
  42. $redis->setrange('str',2,'cd');//Return 4、つまり、文字の後の 2 番目の Replace から開始すると、'str' は 'abcd' になります
  43. //取得操作の substr 部分
  44. $redis->substr('str',0,2);// 0番目から始まり0番目までの2文字、合計3個を取得するという意味です return 'abc'
  45. //strlen 文字列の長さを取得します
  46. $redis->strlen('str'); //Return 4
  47. / /setbit/getbit ビットの保存と取得
  48. $redis->setbit('binary',31,1); // ビッグエンディアンまたはスモールエンディアンの問題があることを示します。問題はありません。getbit では問題ありません。
  49. $redis-> ;getbit('binary',31); //return 1
  50. //keys は * 記号と ? 記号をサポートします。 Character)
  51. $redis->set('foo1',123);
  52. $redis->set('foo2',456);
  53. $redis->keys('foo*'); // を返します。 foo1 と foo2 の配列
  54. $redis->keys('f?o?' ); //上記と同じ
  55. //randomkey はランダムにキーを返します
  56. $redis->randomkey(); //返される場合もあります'foo1' または 'foo2'、または redis に存在するその他のキー
  57. //rename /renamenx キーの名前を変更します。違いは、renamenx では既存のキーへの変更が許可されていないことです
  58. $redis->rename('str' ,'str2'); //もともと 'str' という名前のキーを 'str2' に変更します
  59. //expire はキーと値の適時性を設定し、ttl は残りの有効期間を取得し、persist は永続ストレージにリセットされます
  60. $redis- >expire('foo', 1); //有効期間を 1 秒に設定します
  61. $redis->ttl('foo'); //有効期間の値 1s を返します
  62. $redis->expire(' foo'); //期限切れ動作をキャンセルします
  63. //dbsize 現在の Redis データベース内のレコードの総数を返します
  64. $redis->dbsize();
  65. /*
  66. Queue オペレーション
  67. */
  68. // rpush/rpushx 順序付きリスト操作、キューから要素を挿入します
  69. //lpush/lpushx rpush/rpushx の違いは挿入です。上記と同じようにキューの先頭に移動します。「x」は既存のキーのみを操作することを意味します
  70. $ redis->rpush('fooList', 'bar1'); //長さ 1 のリストを返します
  71. $redis->lpush('fooList', 'bar0'); //リストの長さ 2 を返します
  72. $redis->rpushx('fooList', 'bar2'); //3 を返します。rpushx は既存のキューでのみ機能します。加算、それ以外の場合は 0 を返します
  73. //llen は現在のリストの長さを返します
  74. $redis->llen(' fooList');//3
  75. //lrange はキュー内の範囲の要素を返します
  76. $redis->lrange( 'fooList',0,1); //返される配列には、次の合計 2 つの要素が含まれます。 0 番目から 1 番目まで
  77. $redis->lrange('fooList',0,-1); // 0 番目から最後のものを返すことは、redis では負の数値がよく使用されることに注意してください。以下同様
  78. //lindexは指定されたシーケンス位置のリスト要素を返します
  79. $redis->lindex('fooList',1); //Return 'bar1'
  80. //lset の指定された位置の値を変更しますthe queue
  81. $redis->lset('fooList',1,'123');//位置 1 の要素を変更し、true を返します
  82. / /lrem キューの左から指定された数の文字を削除します
  83. $redis->lrem('fooList',1,'_'); //キュー (存在する場合) の左から 1 文字 '_' を削除します (右から -1 を使用します)
  84. //lpop/ rpop はスタック構造と同様に左端または右端の要素をポップ (および削除) します
  85. $redis->lpop('fooList'); //'bar0'
  86. $redis- >rpop('fooList'); //' bar2'
  87. //ltrim キューの変更、左からいくつかの要素を保持し、残りを削除
  88. $redis->ltrim('fooList', 0,1) //左から0番目から1番目の要素を保持する
  89. //rpoplpush は、あるキューから要素をポップし、別のキューにプッシュします
  90. $redis->rpush('list1','ab0');
  91. $redis-> ;rpush('list1','ab1');
  92. $redis->rpush('list2','ab2');
  93. $redis->rpush('list2','ab3');
  94. $redis->rpoplpush('list1','list2');//結果 list1 =>array('ab0'),list2 =>array('ab1','ab2','ab3')
  95. $ redis->rpoplpush('list2','list2');//同じキューにも適用され、最後の要素を先頭に移動 list2 =>array('ab3','ab1','ab2')
  96. //linsert はキューの途中で指定された要素の前または後に要素を挿入します
  97. $redis->linsert('list2', 'before','ab1','123') //要素 'ab1 の前を示します' Insert '123'
  98. $redis->linsert('list2', 'after','ab1','456') //要素 'ab1' の後に '456' を挿入することを示します
  99. //blpop/brpop のブロックそして、キューが空でなくなるまで待ってから、左端または右端の要素をポップアウトします (この関数は、PHP 以外では非常に便利であると言えます)
  100. //brpoplpush もブロックして操作を待ちます。結果は次と同じです。 rpoplpush
  101. $redis ->blpop('list3',10); //list3 が空の場合、空でない場合は最初の要素がポップされるまで待機します
  102. /**
  103. テーブル操作の設定
  104. */
  105. / /sadd は要素を追加し、true を返し、false を繰り返し返します
  106. $redis->sadd('set1','ab');
  107. $redis->sadd('set1','cd');
  108. $ redis->sadd('set1','ef');
  109. //srem 指定された要素を削除します
  110. $redis->srem('set1','cd') //「cd」要素を削除します
  111. //spop 最初の要素をポップします
  112. $redis->spop('set1');
  113. //smove 現在のセットテーブルの指定された要素を別のセットテーブルに移動します
  114. $redis->sadd('set2' ,'123');
  115. $redis->smove('set1','set2','ab');//'set1' の 'ab' を 'set2' に移動し、true または false を返します
  116. // scard は現在のセットテーブルを返します 要素の数
  117. $redis->scard('set2');//2
  118. //sismember 要素が現在のテーブルに属しているかどうかを判断します
  119. $redis->sismember('set2' ,'123'); //true または false
  120. //smembers は現在のテーブルのすべての要素を返します
  121. $redis->smembers('set2'); //array('123','ab');
  122. //sinter/sunion/sdiff は、テーブル内の要素の交差/和集合/補数を 2 つ返します
  123. $redis->sadd('set1','ab');
  124. $redis->sinter('set2' ,'set1'); //配列 ('ab') を返します
  125. //sinterstore/sunionstore/sdiffstore 2 つのテーブルの交差/和集合/補要素を 3 番目のテーブルにコピーします
  126. $redis->set('foo) ',0);
  127. $ redis->sinterstore('foo','set1'); //これは、'set1' の内容を 'foo' にコピーし、'foo' を set テーブルに変換することと同等です
  128. $ redis->sinterstore ('foo',array('set1','set2')); //'set1' と 'set2' の同じ要素を 'foo' テーブルにコピーし、'foo' の元の内容を上書きします。 '
  129. // srandmember はテーブル内のランダムな要素を返します
  130. $redis->srandmember('set1');
  131. /**
  132. オーダーセットテーブルオペレーション
  133. */
  134. //sadd は要素を追加し、シリアル番号を設定します、 true を返し、繰り返し false を返します
  135. $ redis->zadd('zset1',1,'ab');
  136. $redis->zadd('zset1',2,'cd');
  137. $redis-> ;zadd('zset1',3, 'ef');
  138. //zincrby は、指定された要素のインデックス値を増減し、要素の順序を変更します
  139. $redis->zincrby('zset1',10, 'ab');//11 を返します
  140. // zrem は指定された要素を削除します
  141. $redis->zrem('zset1','ef'); //true または false
  142. //zrange は、テーブル内の指定された範囲を位置順に並べます
  143. $redis->zrange( 'zset1',0,1); //位置 0 と 1 の間の要素を返します (2 つ)
  144. $redis->zrange('zset1', 0,-1); //位置 0 と最後の要素を返します 1 つの要素の間の要素 (すべての要素に相当)
  145. //zrevrange 上記と同様に、テーブル内の指定された範囲の要素を逆順に返します
  146. $redis->zrevrange('zset1',0,-1); //要素の順序は zrange
  147. と逆です
  148. //zrangebyscore/zrevrangebyscore はテーブル内の指定されたインデックス間隔の要素を順序/降順で返します
  149. $redis->zadd('zset1',3,'ef');
  150. $redis->zadd('zset1',5,'gh');
  151. $redis->zrangebyscore('zset1', 2,9); //インデックス値 2 ~ 9 gh' の間の要素を返します
  152. //パラメータ形式
  153. $redis->zrangebyscore('zset1',2,9,'withscores) '); //インデックス値 2 ~ 9 の間の要素を返し、インデックス値を含む array(array(' ef',3),array('gh',5))
  154. $redis->zrangebyscore('zset1 ',2,9,array('withscores' =>true,'limit'=>array(1 , 2))); //インデックス値 2 ~ 9 の間の要素を返します。 true はインデックス値を含むことを意味し、'limit'=>array(1, 2) は最大 2 つの項目を返すことを意味し、結果は array(array('ef',3),array('gh',5)) になります。
  155. //zunionstore/zinterstore 複数のテーブルの結合/交差を別のテーブルに格納します
  156. $redis-> zset3',array('zset1','zset2','zset0')); 'zset1'、'zset2'、'zset0' を 'zset3' に結合
  157. //その他のパラメータ
  158. $redis->zunionstore('zset3',array('zset1','zset2'),array('weights' => array(5,0)));//weights パラメータは和集合を表す重みを表します 最終値が 5 より大きい要素は最初にランク付けされ、0 より大きい要素は最後にランク付けされます
  159. $redis-> ;zunionstore('zset3',array('zset1','zset2'),array('aggregate' => 'max' ));//'aggregate' => は、結合後の同じ要素は大きい値または小さい値を取ります
  160. //zcount はインデックス範囲内の要素の数をカウントします
  161. $redis ->zcount('zset1',3,5);//2
  162. $redis- >zcount('zset1','(3',5)); //'(3' はインデックス値が 3 であることを意味します。5 の間 (3 は含まない) を示すために '(5' を使用することもできます)上限は 5 ですが、5 は含まれません
  163. //zcard は要素の数をカウントします
  164. $redis->zcard('zset1');//4
  165. //zscore 要素のインデックスをクエリします🎜$redis->zscore('zset1','ef');//3
  166. //zremrangebyscore インデックス範囲内の要素を削除します
  167. $redis->zremrangebyscore('zset1',0,2); //削除0 ~ 2 ('ab'、'cd') のインデックスを持つ要素の場合、削除された要素の数 2 を返します
  168. //zrank/zrevrank はテーブルの順序/降順で要素の位置を返します (インデックスではありません)
  169. $redis-> ;zrank('zset1','ef');//最初の要素であるため 0 を返します; zrevrank は 1 (最後の要素) を返します
  170. //zremrangebyrank は、指定された位置範囲の要素を削除しますtable
  171. $redis- >zremrangebyrank('zset1',0,10); //位置 0 ~ 10 の要素を削除し、削除された要素の数 2 を返します
  172. /**
  173. ハッシュテーブル操作
  174. */
  175. //hset /hget ハッシュ テーブルのデータにアクセス
  176. $redis->hset('hash1','key1','v1'); //キー 'key1' と値 'v1' を持つ要素をハッシュ 1 テーブルに保存します
  177. $redis-> ; hset('hash1','key2','v2');
  178. $redis->hget('hash1','key1'); // テーブル 'hash1' のキー 'key1' の値を取得して返します。 ' v1'
  179. //hexists 指定されたキーがハッシュテーブルに存在するかどうかを返します
  180. $redis->hexists ('hash1','key1'); //true または false
  181. //hdel で指定されたキーを削除しますハッシュ テーブル要素
  182. $redis->hdel('hash1','key2'); //true または false
  183. //hlen はハッシュ テーブル要素の数を返します
  184. $redis->hlen('hash1') ; //1
  185. //hsetnx は要素を追加しますが、繰り返すことはできません
  186. $redis->hsetnx('hash1','key1','v2') //false
  187. $redis->hsetnx(' hash1','key2 ','v2'); //true
  188. //hmset/hmget ハッシュ テーブルの複数の要素にアクセスします
  189. $redis->hmset('hash1',array('key3'=>') v3',' key4'=>'v4'));
  190. $redis->hmget('hash1',array('key3','key4')); //対応する値を返します array('v3') ,'v4' )
  191. //hincrby は指定されたキーを蓄積します
  192. $redis->hincrby('hash1','key5',3); //3 を返します
  193. $redis->hincrby('hash1',' key5', 10); //Return 13
  194. //hkeys ハッシュテーブル内のすべてのキーを返します
  195. $redis->hkeys('hash1') //Return array('key1','key2','key3); ',' key4','key5')
  196. //hvals ハッシュテーブル内のすべての値を返します
  197. $redis->hvals('hash1') //Return array('v1','v2', 'v3',' v4',13)
  198. //hgetall はハッシュ テーブル要素全体を返します
  199. $redis->hgetall('hash1') //array('key1'=>'v1',' を返します) key2'=>' v2','key3'=>v3','key4'=>'v4','key5'=>13)
  200. /**
  201. 並べ替え操作
  202. */
  203. / /sort ソート
  204. $redis ->rpush('tab',3);
  205. $redis->rpush('tab',2);
  206. $redis->rpush('tab',17);
  207. $ redis->sort( 'tab'); //配列(2,3,17)を返します
  208. //パラメータを使用できます、array('sort' => 'desc','limit' => 配列(1, 2))
  209. $redis->sort('tab',array('sort' => 'desc')) //降順に並べて、array(17,3,2)を返します
  210. $ redis->sort('tab ',array('limit' => array(1, 2))); //連続した位置にある 1 の 2 つの要素を返します (ここでの 2 は位置ではなく数値を指します)、 return array(3,17 )
  211. $redis->sort('tab',array('limit' => array('alpha' => true))); // 最初の文字でソートして return array( 17,2,3), 17 の最初の文字が '1' なので、1 位になります
  212. $redis->sort('tab',array('limit' => array('store' => 'owned'))); // 永続的なソートを表し、要素の数を返します
  213. $redis->sort('tab',array('limit' => array('get' => 'pre_*') ))); //ワイルドカードが使用されます '*' フィルター要素は 'pre_' で始まる要素のみを返すことを意味します
  214. /**
  215. redis 管理操作
  216. */
  217. //select は操作するデータベースを指定します
  218. $redis-> select('mydb'); / /mydb として指定し、存在しない場合は作成します
  219. //flushdb 現在のライブラリをクリアします
  220. $redis->flushdb();
  221. //move の要素を移動します現在のライブラリを他のライブラリに移動
  222. $redis->set('foo ', 'bar');
  223. $redis->move('foo', 'mydb2') //'mydb2' ライブラリが存在する場合
  224. //info はサービスのステータス情報を表示します
  225. $redis->info( ; //サーバーをクリアします
  226. //サーバーのデータをディスクに同期的に保存します
  227. $redis->save();
  228. //サーバーのデータをディスクに保存します非同期的に
  229. $redis->bgsave();
  230. //??
  231. $redis->gt;bgrewriteaof();
  232. //ディスクが最後に更新された時刻を返します
  233. $redis->lastsave();
  234. //複数の Key-Value を設定/取得します
  235. $mkv = array(
  236. 'usr: 0001' => '最初のユーザー',
  237. 'usr:0002' => '2 番目のユーザー',
  238. 'usr:0003' = > '3 番目のユーザー'
  239. );
  240. $redis->mset($mkv ); //複数のキーに対応するストレージ値
  241. $retval = $redis->mget(array_keys($mkv)) / /複数のキーに対応する値を取得
  242. print_r($retval);
  243. //バッチ操作
  244. $replies = $redis->pipeline(function($pipe) {
  245. $pipe->ping();
  246. $pipe->flushdb();
  247. $pipe->incrby('counter', 10); //インクリメント操作
  248. $pipe->incrby('counter', 30);
  249. $pipe->exists ('カウンター');
  250. $pipe->get('カウンター');
  251. $pipe->mget('does_not_exist', 'counter');
  252. });
  253. print_r($replies);
  254. //CAS,事务性操作
  255. function zpop($client, $zsetKey) {
  256. $element = null;
  257. $options = array(
  258. 'cas' => true , // CAS 操作をサポートして初期化します
  259. 'watch' => $zsetKey, // 変更を検出するために監視する必要があるキー
  260. 'retry' => 3, // 中止されたトランザクションの再試行回数
  261. ; // クライアントは例外で救済します。
  262. );
  263. $txReply = $client->multiExec($options, function($tx)
  264. use ($zsetKey, &$element) {
  265. @list($ element) = $tx->zrange($zsetKey, 0, 0);
  266. if (isset($element)) {
  267. $tx->multi(); // CAS では、MULTI を明示的に呼び出す必要があります。 .
  268. $tx->zrem($zsetKey, $element);
  269. }
  270. });
  271. return $element;
  272. }
  273. $zpopped = zpop($redis, 'zset');
  274. echo isset($zpopped) ? "ZPOPed $zpopped" : "ZPOP には何もありません!", "n";
  275. //对存取的キー加前缀,如: 'nrk:'
  276. $redis->getProfile()->setPreprocessor(new KeyPrefixPreprocessor('nrk:'));
  277. // 分散形式で保存されるいくつかの方法
  278. $multiple_servers = array(
  279. array(
  280. 'host' => '127.0.0.1',
  281. 'port' => 6379,
  282. 'データベース' => 15,
  283. 'エイリアス' => '最初',
  284. ),
  285. 'ホスト' => '127.0.0.1',
  286. 'ポート' => 6380,
  287. 'データベース' => 15,
  288. 'エイリアス' => 'セカンド',
  289. ),
  290. );
  291. PredistributionIDistributionStrategy;
  292. class NaiveDistributionStrategy は IDistributionStrategy {
  293. private $_nodes, $_nodesCount;
  294. public function __constructまたは( ) {
  295. $this->_nodes = array();
  296. $this->_nodesCount = 0;
  297. }
  298. public function add($node, $weight = null) {
  299. $this->_nodes[] = $node;
  300. $this->_nodesCount++;
  301. }
  302. public function Remove($node) {
  303. $this->_nodes = array_filter($this->_nodes, function($n) use($node) ) {
  304. return $n !== $node;
  305. });
  306. $this->_nodesCount = count($this->_nodes);
  307. }
  308. public function get($key) {
  309. $count = $this->_nodesCount;
  310. if ($count === 0) {
  311. throw new RuntimeException('接続なし');
  312. }
  313. return $this->_nodes[$count > 1? abs(crc32($key) % $count) : 0];
  314. }
  315. public functiongenerateKey($value) {
  316. return crc32($value);
  317. }
  318. }
  319. //構成键分布戦略略
  320. $options = array(
  321. 'key_distribution' => new NaiveDistributionStrategy(),
  322. );
  323. $redis = new PredisClient($multiple_servers, $options);
  324. for ($i = 0; $i set("key:$ i", str_pad($i, 4, '0', 0));
  325. $redis->get("key:$i");
  326. }
  327. $server1 = $redis->getClientFor('first ')->info();
  328. $server2 = $redis->getClientFor('second')->info();
  329. printf("サーバー '%s' には %d 個のキーがありますが、サーバー '%s ' には %d 個のキーがあります。n",
  330. 'first', $server1['db15']['keys'], 'first', $server2['db15']['keys']
  331. );
复制代コード

php、redis、predis
本主题由小贝 2015-11-12 08:43 移動

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート