使用Redis存储数据数组(来自Laravel)

时间:2014-03-28 16:57:56

标签: php laravel redis

我已经开始使用laravel了。工作很有意思。我已经开始使用laravel的功能。我已经开始在我的系统中使用安装redis服务器redis并在app/config/database.php文件中更改redis的配置。通过使用set,redis对单个变量工作正常。即,

$redis = Redis::connection();

$redis->set('name', 'Test');

我可以使用

获取值
$redis->get('name');

但我想使用set函数设置数组。如果我尝试这样做会出现以下错误

 strlen() expects parameter 1 to be string, array given 

我尝试使用以下代码。

$redis->set('name', array(5, 10));

$values = $redis->lrange('names', array(5, 10));

如果我使用

$values = $redis->command('lrange', array(5, 10));

收到以下错误

 'command' is not a registered Redis command 

任何人都可以解释我的问题并且可以使用redis吗?...我们可以使用redis设置数组值吗?

3 个答案:

答案 0 :(得分:38)

评论中已经回答了这个问题,但为将来访问的人们提供了更清楚的答案。

Redis与语言无关,因此无法识别特定于PHP或任何其他语言的任何数据类型。最简单的方法是serialise / json_encode设置数据,然后获取unserialise / json_decode

使用json_encode存储数据的示例:

$redis = Redis::connection();

$redis->set('user_details', json_encode(array('first_name' => 'Alex', 
                                              'last_name' => 'Richards'
                                              )
                                       )
           );

使用json_decode检索数据的示例:

$redis    = Redis::connection();
$response = $redis->get('user_details');

$response = json_decode($response);

答案 1 :(得分:3)

Redis支持多种数据结构类型,例如哈希,链接列表和数组。

但是您必须使用Laravael Redis Facade的用户正确方法,例如:

//set user_details key and below key_values 
Redis::hmset('user_details',["firstName" => "Abi", "lastName" => "logos"]);
//get all as an Associate Array
Redis::hgetall('user_details');
//get just The Keys as an Array
Redis::hkeys('user_details');

更多信息: https://redis.io/commands#hash

答案 2 :(得分:0)

在控制器中,您可以添加以下功能:

use Illuminate\Support\Facades\Redis;
private function getUsers() {
    if ($users = Redis::get('users.all')) {
        return json_decode($users);
    }
    $users = User::all();
    Redis::set('users.all', $users);
    return $users;
}

然后在您的index方法(或其他方法)中可以执行以下操作:

public function index(Request $request) {
    $users = $this->getUsers();
}

来源:接受的答案和this