我已经开始使用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
设置数组值吗?
答案 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');
答案 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。