gpt4 book ai didi

redis - Redis 中的哈希字段与输入的排序方式不同

转载 作者:IT王子 更新时间:2023-10-29 06:11:26 26 4
gpt4 key购买 nike

我有一个 date => data 类型的关联数组,例如:

   [
'2015-11-18' => 'some_data',
'2015-11-17' => 'some_data',
'2015-11-16' => 'some_data'
]

然后我将它们放入一个哈希中,其中数组键(日期)是哈希的字段,值是... 但是在 Redis 中,它们的排序顺序与输入顺序不同(我需要它们)。此外,当我获得所有键 (hkeys) 时,它们的排序方式与它们存储在 Redis 中的顺序完全不同。

在存储和获取 key 时,有没有办法按照我输入它们的方式对它们进行排序?

最佳答案

您需要使用两个结构在 Redis 中实现关联数组。一种方法是按顺序将键存储在 list 中,并将 key => value 映射存储在 hash 中>.

按键列表:

[
'2015-11-18',
'2015-11-17',
'2015-11-16'
]

哈希:

{
'2015-11-18' => 'some data',
'2015-11-16' => 'some data',
'2015-11-17' => 'some data'
}

您可以使用 scripts以原子方式更新这两个结构。添加操作脚本可能如下所示:

eval "
redis.call('rpush', KEYS[1], ARGV[1]);
local i = redis.call('llen', KEYS[1]);
return redis.call('hset', KEYS[2], ARGV[1], ARGV[2]);
" 2 'keys' 'values' '2015-11-15' 'some data'

删除操作脚本可能如下所示:

eval "
redis.call('lrem', KEYS[1], ARGV[1]);
return redis.call('hdel', KEYS[2], ARGV[1]);
" 2 'keys' 'values' '2015-11-15'

一个 get-by-key 操作脚本可能看起来像一个普通的 hash get:

hget 'values' '2015-11-15'

按索引获取操作脚本可能如下所示:

eval "
local k = redis.call('lindex', KEYS[1], ARGV[1]);
return redis.call('hget', KEYS[2], k);
" 2 'keys' 'values' 1

要按顺序获取键将是一个简单的 lrange:

lrange 'keys' 0 -1

要按顺序获取值,您可以使用:

eval "
local k = redis.call('lrange', KEYS[1], 0, -1);
return redis.call('hmget', KEYS[2], unpack(k));
" 2 'keys' 'values'

关于redis - Redis 中的哈希字段与输入的排序方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com