2014-03-28 33 views
13

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

$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

+2

Redis的是不熟悉PHP非标量数据类型如数组,但快速和肮脏的选项(array(5,10)));'和'$ redis-> set('name',json_encode(array(5,10)));'和然后反序列化或json_decode获取 –

+0

因此,我们必须编码它,而不是其他选择直接设置为一个数组? – Kalai

+1

PHP数组是特定于PHP的数据类型,redis是语言不可知的,所以它不知道如何处理它...我个人使用Redis的igbinary和自动序列化 –

回答

29

在评论中已经回答了这个问题,但为了让将来访问的人更清楚地回答这个问题。

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

正确的答案。 MsgPack也是一种很好的(语言不可知的)编码格式。作为旁注,这也适用于服务器端Lua脚本。见[这里](http://stackoverflow.com/questions/22287334/servicestack-redis-how-to-return-lua-table-as-list/22287807#22287807)。 –