Laravel 中使用Redis

Laravel中Redis使用命令Redis

字符串类型

检查key是否存在

Redis::exists(key)

存入数据

Redis::set(key,serialize(value));

携带过期时间写入数据

Redis::setex(key,expiration,value)
Redis::set(key, value, 'EX', expiration);

获得数据

Redis::get(key)

scan命令使用

其中cursor是迭代器,等于0的时候,表示扫描完毕

Redis::scan($cursor, 'match', $pattern, 'count', 1000);
do{
    list($cursor, $keys) = $this->dataRedis->scan($cursor, 'match', $pattern, 'count', 1000);
}while($cursor);

Laravel中使用其他Redis链接

有很多时候,我们需要链接公告Redis并不是本机,还可能使用不同的库

config/databases.php设置Redis链接

'redis' => [
        'client' => 'predis',
        'default' => [
           ........
        ],
        // game表示设置一个名字叫game的Redis链接
        'game' => [
            'host' => env('REDIS_GAME_HOST', '127.0.0.1'),
            'password' => env('REDIS_GAME_PASSWORD', null),
            'port' => env('REDIS_GAME_PORT', 6379),
            'database' => env('REDIS_GAME_DB'),
        ],
    ],

env文件中增加变量

REDIS_GAME_HOST=xxx.xxx.xxx.xxx
REDIS_GAME_PASSWORD=null
REDIS_GAME_PORT=6379
REDIS_GAME_DB=1 //使用Redis的几号库0-12号库

实例化Redis,建议单利模式

/**
* @param string $name
*
* @return mixed
*/
public function getGameRedisClient ($name = 'game')
{
    if( !(self::$redisClient instanceof PredisConnection)){
        self::$redisClient = Redis::connection($name);
    }
    return self::$redisClient;
}

redis有密码如何进入

redis-cli -h 127.0.0.1 -p 6379 -a pwd

设置hash的过期时间keys-expire

$redisClient->expire($key,$expired_time);

Non-static method Redis::hSet() cannot be called statically

原因是因为PHP自带了redis拓展和predis冲突了导致的。

phpinfp

这里安装了php的redis拓展

file

改变所有use Redis的地方

use Redis
改成
use Illuminate\Support\Facades\Redis;

指定端口ip密码连接redis

redis-cli -h 192.168.1.1 -p 6379 -a password