如何将~1M的JSON文件批量加载到Redis中?

问题描述 投票:0回答:1

这是我当前在 bash 中的代码(基于 https://redis.io/docs/latest/develop/use/patterns/bulk-loading):

head=$(redis-cli -h $redis_server get .git-head)
if [[ ! $head ]]; then
    redis-cli -h $redis_server flushdb
    for fileOrFolder in $(ls -1); do
        time {
            find $fileOrFolder -type f |
                LC_ALL=C xargs -n1 bash -c 'echo -e *3\\r\\n\$3\\r\\nSET\\r\\n\$${#0}\\r\\n$0\\r\\n\$$(stat -c%s $0)\\r && cat $0 && echo -e \\r' |
                redis-cli -h $redis_server --pipe
        }
    done
    redis-cli -h $redis_server set .git-head $(git rev-parse HEAD)
fi

它可以工作,但有一个问题 - 值的类型是

string
,而不是
JSON
。至少 Redis Insights 是这么告诉我的。

我的问题是 - 如何修改代码以确保存储的值是

JSON
类型?或者甚至 - 我应该修改它吗?也许
string
类型已经足够好了,不会限制我们的查询能力。

json redis bulkinsert bulk-load
1个回答
0
投票

如果不需要对数据本身执行复杂的查询,那么使用字符串就可以了。 如果你仍然想以JSON类型存储,你可以使用JSON.SET命令而不是SET 针对您的问题

time {
        find $fileOrFolder -type f |
            LC_ALL=C xargs -n1 bash -c 'file_content=$(cat $0 | jq -Rs .); \
            file_size=$(stat -c%s $0); \
            redis-cli -h $redis_server json.set $0 . "{\"file\":\"$0\",\"size\":\"$file_size\",\"content\":$file_content}"' 
    }
© www.soinside.com 2019 - 2024. All rights reserved.