如何在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
相关产品推荐
相关产品推荐

