search
LoginSignup
8

More than 5 years have passed since last update.

posted at

updated at

Windows: PhpRedisとPredisの使用準備

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で使うことが大半だと思うので問題ないと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8