Help us understand the problem. What is going on with this article?

Windows: PhpRedisとPredisの使用準備

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

sutara79
宮崎 雄策。1979年生まれ。PHP(Laravel)、 JavaScript(jQuery)、英語を勉強中の文系Webプログラマ。
https://ja.gravatar.com/sutara79
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away