如何在Mojo::Redis2中保存散列值?
How to save hash value in Mojo::Redis2?
我试图在 Mojo::Redis2 中保存散列值。下面给出了示例哈希值。
'user' => {
'manage-detail' => {
'46' => 'edit',
'45' => 'list',
'44' => 'create',
'48' => 'delete',
'47' => 'search'
},
'manage-procedure' => {
'27' => 'search',
'25' => 'list',
'24' => 'create',
'26' => 'edit'
}
}
我正在使用下面的代码保存和读取 redis。
$self->app->redis->hset('test', %HoH);
my %res = $self->app->redis->hget("test",'user');
但它不起作用。读取哈希值时为空。
你误解了什么HSET
does in Redis。它不是为了保存整个 Perl 数据结构。它用于在 Redis 提供的 hash 数据结构中的特定键下保存单个值。这与正常的 key/value 存储操作不同,您可以在其上使用其他 Redis 哈希相关操作。
看来您想做的是保存一个完整的 Perl 数据结构供以后使用,而不是从 Redis 中对其中的数据进行操作。
您可以为此使用常规 SET
操作,但您需要为此使用 serialise 您的 Perl 数据结构。从本质上讲,这意味着将您的 Perl 程序用来存储这些值的内存转换为其他程序可以理解的字符数据。
在 Perl 中序列化和反序列化数据的常用工具是 Storable or Sereal。后者更强大,但可能只对大型数据结构有意义。
如果您的数据只包含文本,任何 JSON 实现也都可以,这会给您带来额外的好处,即其他语言的程序能够读写此数据,提高互操作性,但代价是需要更多内存。
完全实现这个不在这个答案的范围内,但实际上你需要做的是:
# to store
$self->app->redis->set('namespace:key', serealise(\%HoH));
# to retrieve
my $hashref_of_hashes = deserialise($self->app->redis->get('namespace:key'));
其中 serealise()
和 deserealise()
是 freezing 和 thawing 的同义词(转换为字符串或返回)机制。
您可能还想看一下缓存接口 CHI。
我试图在 Mojo::Redis2 中保存散列值。下面给出了示例哈希值。
'user' => {
'manage-detail' => {
'46' => 'edit',
'45' => 'list',
'44' => 'create',
'48' => 'delete',
'47' => 'search'
},
'manage-procedure' => {
'27' => 'search',
'25' => 'list',
'24' => 'create',
'26' => 'edit'
}
}
我正在使用下面的代码保存和读取 redis。
$self->app->redis->hset('test', %HoH);
my %res = $self->app->redis->hget("test",'user');
但它不起作用。读取哈希值时为空。
你误解了什么HSET
does in Redis。它不是为了保存整个 Perl 数据结构。它用于在 Redis 提供的 hash 数据结构中的特定键下保存单个值。这与正常的 key/value 存储操作不同,您可以在其上使用其他 Redis 哈希相关操作。
看来您想做的是保存一个完整的 Perl 数据结构供以后使用,而不是从 Redis 中对其中的数据进行操作。
您可以为此使用常规 SET
操作,但您需要为此使用 serialise 您的 Perl 数据结构。从本质上讲,这意味着将您的 Perl 程序用来存储这些值的内存转换为其他程序可以理解的字符数据。
在 Perl 中序列化和反序列化数据的常用工具是 Storable or Sereal。后者更强大,但可能只对大型数据结构有意义。
如果您的数据只包含文本,任何 JSON 实现也都可以,这会给您带来额外的好处,即其他语言的程序能够读写此数据,提高互操作性,但代价是需要更多内存。
完全实现这个不在这个答案的范围内,但实际上你需要做的是:
# to store
$self->app->redis->set('namespace:key', serealise(\%HoH));
# to retrieve
my $hashref_of_hashes = deserialise($self->app->redis->get('namespace:key'));
其中 serealise()
和 deserealise()
是 freezing 和 thawing 的同义词(转换为字符串或返回)机制。
您可能还想看一下缓存接口 CHI。