web-dev-qa-db-fra.com

Stockage d'un tableau de données à l'aide de Redis (de Laravel)

J'ai commencé à travailler avec laravel. C'est assez intéressant de travailler. J'ai commencé à utiliser les fonctionnalités de laravel. J'ai commencé à utiliser redis en installant le serveur redis dans mon système et en modifiant la configuration de redis dans app/config/database.php fichier. Le redis fonctionne bien pour les variables uniques en utilisant set. c'est à dire.,

$redis = Redis::connection();

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

et je pourrais obtenir la valeur en utilisant

$redis->get('name');

Mais je veux définir le tableau en utilisant la fonction set. Si j'essaie de faire cela, obtenir l'erreur suivante

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

J'ai essayé en utilisant les codes suivants.

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

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

et si j'utilise

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

obtenir l'erreur suivante

 'command' is not a registered Redis command 

Quelqu'un peut-il m'expliquer le problème et est-ce possible avec redis? ... nous pouvons définir les valeurs du tableau en utilisant redis?

22
Kalai

Cela a été répondu dans les commentaires, mais pour rendre la réponse plus claire pour les personnes visitant à l'avenir.

Redis est indépendant du langage et ne reconnaît donc aucun type de données spécifique à PHP ou tout autre langage. La manière la plus simple serait de serialise/json_encode les données sur l'ensemble puis unserialise/json_decode sur get.

Exemple de stockage de données à l'aide de json_encode:

use Illuminate\Support\Facades\Redis;

$redis = Redis::connection();

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

Exemple pour récupérer des données à l'aide de json_decode:

use Illuminate\Support\Facades\Redis;

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

$response = json_decode($response);
48
ajtrichards

Redis prend en charge plusieurs types de structure de données comme le hachage, la liste de liens et la matrice.

Mais vous devez utiliser des méthodes appropriées à partir de la façade Laravael Redis comme:

//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');

plus d'informations: https://redis.io/commands#hash

1
Abilogos

Dans votre contrôleur, vous pouvez ajouter une telle fonction:

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;
}

Ensuite, dans votre méthode index (ou autres), vous pouvez faire ceci:

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

Source: réponse acceptée et ceci .

0
Seif