You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mojo::Redis2中保存嵌套哈希值?

解决Mojo::Redis2中存储嵌套哈希的问题

嘿,我明白你现在遇到的困扰了——想用Mojo::Redis2存储嵌套哈希,但直接用hset操作的话,取出来的结果肯定不是你想要的。这是因为Redis的Hash类型只能存储字符串类型的值,没法直接存嵌套的哈希结构,得先做一步转换才行,我来给你详细说清楚怎么解决:

核心问题

你原来的代码里直接把嵌套哈希传给hset,Redis会把哈希引用转成类似HASH(0xabc123)的字符串存储,这显然不是你期望的嵌套结构。所以我们需要先把嵌套哈希序列化为JSON字符串,存到Redis里,读取的时候再把JSON字符串解析回哈希结构。

具体实现代码

Mojo生态里自带了Mojo::JSON,用它来序列化/反序列化非常方便,不需要额外安装模块:

1. 存储嵌套哈希

use Mojo::JSON qw(to_json);

# 你的嵌套哈希数据
my %HoH = (
    'user' => { 
        'manage-detail' => { '46' => 'edit', '45' => 'list', '44' => 'create', '48' => 'delete', '47' => 'search' }, 
        'manage-procedure' => { '27' => 'search', '25' => 'list', '24' => 'create', '26' => 'edit' } 
    }
);

# 将嵌套哈希序列化为JSON字符串
my $user_json = to_json($HoH{user});

# 存储到Redis的Hash表中
$self->app->redis->hset('test', 'user', $user_json);

2. 读取并解析嵌套哈希

use Mojo::JSON qw(from_json);

# 从Redis中读取JSON字符串
my $user_json = $self->app->redis->hget('test', 'user');

# 将JSON字符串解析回嵌套哈希结构
my $user_hash = from_json($user_json);

# 现在可以正常访问嵌套的键值了
say $user_hash->{'manage-detail'}->{'46'}; # 输出 'edit'
say $user_hash->{'manage-procedure'}->{'24'}; # 输出 'create'

额外说明

  • 如果你的Hash表中有多个嵌套哈希字段,每个字段都可以用同样的方式处理:先转JSON再存储。
  • 除了JSON,你也可以用其他序列化方式(比如Storable),但JSON的优势是跨语言兼容,如果你以后需要用其他语言读取Redis数据,会更方便。

内容的提问来源于stack exchange,提问作者Akhilesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:00:01