forget for get

覚えるために忘れる

phpredisまとめ

PHPでRedisを扱う場合に使うphpredisのまとめ。

redis-cliコマンドとほとんど同じなので、説明を省略しています。
redis-cliコマンドを理解してない人は先にこちらを読んでください。

lightwill.hatenablog.com


ほとんど同じだけど微妙に違う。(引数指定でより拡張されてる)
 
phpredisのgithubにあるドキュメントを参考にしました。

github.com

 

基本

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->get('key');
$redis->set('key', 'value');
$redis->setEx('key', 3600, 'value');
$redis->pSetEx('key', 100, 'value');
$redis->setNx('key', 'value');
//setで書くこともできる
$redis->set('key','value', 10); //有効期限10秒
$redis->set('key', 'value', ['nx', 'ex'=>10]); //キーが存在してなかったら設定
$redis->set('key', 'value', ['xx', 'px'=>1000]); //キーが存在してたら設定
 
$redis->del('key3');
$redis->del(['key3', 'key4']);
$redis->unlink(['key1', 'key2']); //Redis >= 4.0.0
$redis->exists('key');
$redis->exists(['foo', 'bar', 'baz]);
 
$redis->incr('key1');
$redis->incr('key1', 10);
$redis->incrBy('key1', 10);
$redis->incrByFloat('key1', 1.5);
$redis->decr('key1');
$redis->decr('key1', 10);
$redis->decrBy('key1', 10);
 
$redis->expire('x', 3);
$redis->pexpire('x', 3000);
$redis->expireAt('x', time() + 3);
$redis->pexpireAt('x', time() . 500);
$redis->ttl('key');
$redis->persist('key');
 
$redis->mGet(['key1', 'key2', 'key3']);
$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);
$exValue = $redis->getSet('x', 'lol');
$redis->append('key', 'value2');
$redis->randomKey();
$redis->keys('*');
$redis->keys('user*');
$redis->type('key');
$redis->strlen('key');

$redis->getRange('key', 0, 5);
$redis->setRange('key', 6, "redis");
$redis->getBit('key', 0);
$redis->setBit('key', 5, 1);
$redis->rename('x', 'y');
$redis->move('x', 1);
$redis->select(1);
$val = $redis->dump('foo');
$redis->restore('bar', 0, $val);
 

ハッシュ

$redis->hSet('lightwill', 'hp', 100);
$redis->hGet('lightwill', 'hp');
$redis->hSetNx('lightwill', 'hp', 200);
$redis->hGetAll('lightwill');
$delCount = $redis->hDel('lightwill','hp','pow');
$redis->hLen('lightwill');
$redis->hExists('lightwill', 'hp');
$redis->hKeys('lightwill');
$redis->hVals('lightwill');
$redis->hMSet('lightwill', ['def' => 30, 'spd' => 50]);
$redis->hMGet('lightwill', ['hp', 'spd']);
$redis->hIncrBy('lightwill', 'hp', -1);
$redis->hIncrByFloat('lightwill','hp', -0.5);
$redis->hStrLen('lightwill','name');
 

リスト

$redis->lPush('key1', 'D'); //先頭(left)に追加
$redis->lPush('key1', 'C', 'B', 'A');
$redis->lPushx('none', 'A'); //キーがなければ何もしない
$redis->lRange('key1', 0, -1);
$redis->lPop('key1'); //A
$redis->rPush('key1', 'A'); //末尾(right)に追加
$redis->rPushX('none', 'A');
$redis->rPop('key1');
$redis->lLen('key1');
$redis->lRem('key1', 'A', 2); //左から2個Aを削除。-なら右から。0ならすべて。
$redis->lInsert('key1', Redis::AFTER, 'A', 'X');
$redis->lInsert('key1', Redis::BEFORE, 'C', 'X');
$redis->lindex('key1', 0); //-なら右から
$redis->lSet('key1', 0, 'X');
$redis->lTrim('key1', 0, 1);
$redis->rPopLPush('key1', 'key2')
$redis->blPop('key1', 'key2', 10);
$redis->brPop('key1', 'key2', 10);
$redis->bRPopLPush('srckey', 'dstkey', 10);
 

セット

$redis->sAdd('larc' , 'hyde');
$redis->sAdd('larc' , 'ken', 'tetsu', 'sakura');
$redis->sMembers('larc')
$redis->sCard('key1'); //件数取得
$redis->sIsMember('larc', 'hyde');
$redis->sRem('larc', 'sakura');
$redis->sRandMember('larc');
$redis->sRandMember('larc', 2);
$redis->sRandMember('larc', -5); //重複ありで5件
$redis->sPop('larc'); //ランダムに取得して削除
$redis->sPop('larc', 2);
$redis->sMove('larc', 'vamps', 'hyde');
$redis->sDiff('saiueo', 'sai', 'su'); //eo
$redis->sDiffStore('seo', 'saiueo', 'sai', 'su');
$redis->sInter('saiueo', 'sai'); //ai
$redis->sInterStore('sai2', 'saiueo', 'sai');
$redis->sUnion('sai', 'su'); //aiu
$redis->sUnionStore('saiu', 'sai', 'su');
 

ソート済みセット(スコアで順位付け、メンバーの重複なし、同じスコアはあり)

$redis->zAdd('ranking', 100, 'melon');
$redis->zAdd('ranking', 120, 'melon'); //スコア更新
$redis->zScore('ranking', 'melon');
$redis->zCard('ranking'); //件数取得
$redis->zIncrBy('ranking', 2.5, 'melon'); //キーがなかったら追加
$redis->zRem('ranking', 'pine', 'apple');
$redis->zRange('ranking', 0, -1);
$redis->zRange('ranking', 0, -1, true); //スコアも取得
$redis->zRevRange('ranking', 0, -1); //降順
$redis->zCount('key', 60, 80);
$redis->zCount('key', '(60', '(80'); //60 <、< 80
$redis->zCount('key', '-inf', '+inf'); //システムの最小値と最大値
$redis->zRangeByScore('ranking', 60, 80);
$redis->zRevRangeByScore('ranking', 80, 60, ['withscores' => TRUE]);
$redis->zRangeByScore('ranking', -inf, inf, ['limit' => [0, 2]]);
$redis->zRemRangeByScore('ranking', '-inf', 10); //10以下は削除
$redis->zRangeByLex('ranking','-','[momo') //momo以下
$redis->zRangeByLex('ranking','(momo','+') //momoより上
$redis->zRangeByLex('ranking','-','[momo',1,2) //limit指定
$redis->zRank('ranking', 'melon');
$redis->zRevRank('ranking', 'melon');
$redis->zRemRangeByRank('ranking', 80, 100); //81位から101まで削除
$redis->zinterstore('year', ['month1', 'month2']); //積集合の合計
$redis->zinterstore('year', ['month1', 'month2'], [1, 2]); //各スコアを倍にして重みづけ
$redis->zinterstore('year', ['month1', 'month2'], [1, 2], 'max');
$redis->zinterstore('year', ['month1', 'month2'], [1, 2], 'min');
$redis->zunionstore('year', ['month1', 'month2']); //和集合 weights、aggregateも同じ