首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Redis存储数据数组(来自Laravel)

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

Stack Overflow用户
提问于 2014-03-29 00:57:56
回答 3查看 46.5K关注 0票数 26

我已经开始研究laravel。这是一个很有趣的工作。我已经开始使用laravel的功能了。通过在系统中安装redis服务器并在app/config/database.php文件中更改redis的配置,我已经开始使用redis。通过使用set,redis可以很好地处理单变量。即,

代码语言:javascript
复制
$redis = Redis::connection();

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

我可以通过使用以下命令来获得值

代码语言:javascript
复制
$redis->get('name');

但是我想使用set函数来设置数组。如果我尝试这样做,会得到以下错误

代码语言:javascript
复制
 strlen() expects parameter 1 to be string, array given 

我试过使用下面的代码。

代码语言:javascript
复制
$redis->set('name', array(5, 10));

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

如果我使用

代码语言:javascript
复制
$values = $redis->command('lrange', array(5, 10));

获取以下错误

代码语言:javascript
复制
 'command' is not a registered Redis command 

有人能给我解释一下这个问题吗? redis?...we可以用redis设置数组值吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-29 04:11:25

这一点已经在评论中得到了回答,但为了让将来访问的人更清楚。

Redis是语言不可知的,所以它不能识别任何特定于PHP或任何其他语言的数据类型。最简单的方法是在set上对数据执行serialise / json_encode,然后在get上执行unserialise/json_decode

使用json_encode存储数据的示例

代码语言:javascript
复制
use Illuminate\Support\Facades\Redis;

$redis = Redis::connection();

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

使用json_decode检索数据的示例

代码语言:javascript
复制
use Illuminate\Support\Facades\Redis;

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

$response = json_decode($response);
票数 65
EN

Stack Overflow用户

发布于 2020-03-12 23:53:34

Redis支持多种数据结构类型,如hash链表数组

但您必须使用Laravel Redis facade的适当方法,如下所示:

代码语言:javascript
复制
// set user_details --redis_key-- and --redis_value-- as array of key_values 
Redis::hmset('user_details',["firstName" => "Foo", "lastName" => "Bar"]);

// get all as an associative array
Redis::hgetall('user_details');

// get just the keys as an array
Redis::hkeys('user_details');

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

票数 7
EN

Stack Overflow用户

发布于 2020-03-06 23:43:09

在您的控制器中,您可以添加以下函数:

代码语言:javascript
复制
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方法(或其他方法)中,您可以这样做:

代码语言:javascript
复制
public function index(Request $request) {
    $users = $this->getUsers();
}

来源: accepted和this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22718903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档