Edited at

Windows: PhpRedisとPredisの使用準備

More than 1 year has passed since last update.

PHPからRedisを操作するためのPhpRedisPredis、両方を試してみます。


環境


  • Windows 10 (64bit)

  • XAMPP 7.1.4 (PHP 7.1.4)

  • PHPのアーキテクチャ: 32bit


Redisをインストール

まずは元となるRedisをインストールします。

:link: RedisをWindowsにインストール - Qiita

特に設定をいじらなければ、ホスト: 127.0.0.1ポート: 6379となるはずです。

また、インストールが終わったらすでに起動しています。

間違ってRedisをシャットダウンしてしまった場合は、redis-server --service-startとコマンドを打つよりもWindowsのサービスでRedisを起動する方が余計なウィンドウを減らせていいと思います。

003.png


GUIツールをインストール

:link: https://redisdesktop.com/

:link: Redis Desktop Managerを使ってみる - Qiita

やっぱりGUIは便利です。

今は接続だけを済ませておいてください。

rdm01.png


PhpRedis

:link: GitHub - phpredis/phpredis: A PHP extension for Redis

まずはPECL拡張モジュールのPhpRedisを試してみます。


DLLを入手する

:link: PHP: PHP 拡張モジュールの Windows へのインストール - Manual


Windows では、PHP の拡張モジュールを読み込む方法は 2 通りあります。 コンパイル時に PHP に組み込む方法と、DLL として読む込む方法です。 コンパイル済みの拡張モジュールを読み込む方法のほうが簡単で、おすすめです。


DLLは下記から入手します。現時点での最新版は3.1.3のようです。

:link: http://windows.php.net/downloads/pecl/releases/redis/

私は、自分の環境に合わせてphp_redis-3.1.3-7.1-ts-vc14-x86.zipをダウンロードしました。

001.png

バージョン番号3.1.3の後の7.07.1はPHPのバージョンです。

ts(スレッド・セーフ)かnts(ノン・スレッド・セーフ)か、x86かx64かは、phpinfo()の下記の項目で見分けられます。

000.png


PhpRedisを有効にする

入手したphp_redis.dllC:\xampp\php\extに移動します。

そして下記のようにphp.iniに追記した後、Apacheを再起動します。

:page_facing_up: C:\xampp\php\php.ini

extension=php_redis.dll

phpinfo()で下記のように項目が追加されていれば成功です。

002.png

redisの項目が追加されず、下記のようにログにエラーが記録されている場合は、間違ったDLLを入手した可能性があります。

私も、x64向けのDLLをインストールしてエラーになりました。

PHPが32ビットか64ビットかを気にしたことなんてありませんでしたよ…。

:page_facing_up: C:\xampp\apache\logs\error.log

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_redis.dll'


動作確認

下記の通り、ポートがデフォルトの6379の場合はconnect()の引数を省略できます。

:link: https://github.com/phpredis/phpredis#example-1

<?php

$redis = new Redis();
$redis->connect('127.0.0.1');
$redis->set('foo', 'こんにちはこんにちは!!');
echo $redis->get('foo'); // こんにちはこんにちは!!

RDMでも確認します。Ctrl+Rでリロードしてください。

なお、値の表示はPlain Textをおすすめします。

rdm02.png


セッションハンドラをredisに変更する

これまでと同様に$_SESSIONを使いつつ、セッションの保存先を変更できます。

:link: https://github.com/phpredis/phpredis#php-session-handler

:page_facing_up: C:\xampp\php\php.ini

session.save_handler=redis

session.save_path="tcp://127.0.0.1:6379"

その後、Apacheを再起動して下記を実行ます。

<?php

session_start();
$_SESSION['bar'] = 'Hello World!';
echo $_SESSION['bar']; // Hello World!

RDMで確認すると、PHPREDIS_SESSION:onfdvajno0mfi6iim76jmge3kdという長いキー名が与えられ、その値がbar|s:12:"Hello World!";となっています。

rdm03.png

下記によると、どうやらキー名を:で区切ることによって階層化できるようです。

:link: key value store - What is the purpose of colons within Redis keys - Stack Overflow

PhpRedisのREADMEにも、PHPREDIS_SESSION:という接頭辞がデフォルトで使われると書かれています。


prefix (string, defaults to "PHPREDIS_SESSION:"): used as a prefix to the Redis key in which the session is stored. The key is composed of the prefix followed by the session ID.



Predis

:link: GitHub - nrk/predis: Flexible and feature-complete Redis client for PHP and HHVM

Predisの方はComposerで簡単に導入できます。


Composerでインストールする

:computer: PowerShell

> composer require predis/predis


動作確認

<?php

require_once __DIR__.'/vendor/autoload.php';
Predis\Autoloader::register();

$client = new Predis\Client();
$client->set('baz', '東京特許許可局');
echo $client->get('baz'); // 東京特許許可局

rdm04.png

Predisでは$_SESSIONを使えないようですが、PredisはLaravelで使うことが大半だと思うので問題ないと思います。