PHPからRedisを操作するためのPhpRedisとPredis、両方を試してみます。
環境
- Windows 10 (64bit)
- XAMPP 7.1.4 (PHP 7.1.4)
- PHPのアーキテクチャ: 32bit
Redisをインストール
まずは元となるRedisをインストールします。
RedisをWindowsにインストール - Qiita
特に設定をいじらなければ、ホスト: 127.0.0.1
、ポート: 6379
となるはずです。
また、インストールが終わったらすでに起動しています。
間違ってRedisをシャットダウンしてしまった場合は、redis-server --service-start
とコマンドを打つよりもWindowsのサービス
でRedisを起動する方が余計なウィンドウを減らせていいと思います。
GUIツールをインストール
https://redisdesktop.com/
Redis Desktop Managerを使ってみる - Qiita
やっぱりGUIは便利です。
今は接続だけを済ませておいてください。
PhpRedis
GitHub - phpredis/phpredis: A PHP extension for Redis
まずはPECL拡張モジュールのPhpRedisを試してみます。
DLLを入手する
PHP: PHP 拡張モジュールの Windows へのインストール - Manual
Windows では、PHP の拡張モジュールを読み込む方法は 2 通りあります。 コンパイル時に PHP に組み込む方法と、DLL として読む込む方法です。 コンパイル済みの拡張モジュールを読み込む方法のほうが簡単で、おすすめです。
DLLは下記から入手します。現時点での最新版は3.1.3のようです。
http://windows.php.net/downloads/pecl/releases/redis/
私は、自分の環境に合わせてphp_redis-3.1.3-7.1-ts-vc14-x86.zip
をダウンロードしました。
バージョン番号3.1.3
の後の7.0
や7.1
はPHPのバージョンです。
ts(スレッド・セーフ)かnts(ノン・スレッド・セーフ)か、x86かx64かは、phpinfo()
の下記の項目で見分けられます。
PhpRedisを有効にする
入手したphp_redis.dll
をC:\xampp\php\ext
に移動します。
そして下記のようにphp.ini
に追記した後、Apacheを再起動します。
C:\xampp\php\php.ini
extension=php_redis.dll
phpinfo()
で下記のように項目が追加されていれば成功です。
redis
の項目が追加されず、下記のようにログにエラーが記録されている場合は、間違ったDLLを入手した可能性があります。
私も、x64向けのDLLをインストールしてエラーになりました。
PHPが32ビットか64ビットかを気にしたことなんてありませんでしたよ…。
C:\xampp\apache\logs\error.log
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_redis.dll'
動作確認
下記の通り、ポートがデフォルトの6379の場合はconnect()
の引数を省略できます。
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
をおすすめします。
セッションハンドラをredisに変更する
これまでと同様に$_SESSION
を使いつつ、セッションの保存先を変更できます。
https://github.com/phpredis/phpredis#php-session-handler
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!";
となっています。
下記によると、どうやらキー名を:
で区切ることによって階層化できるようです。
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
GitHub - nrk/predis: Flexible and feature-complete Redis client for PHP and HHVM
Predisの方はComposerで簡単に導入できます。
Composerでインストールする
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'); // 東京特許許可局
Predisでは$_SESSION
を使えないようですが、PredisはLaravelで使うことが大半だと思うので問題ないと思います。