Redis - How to store the result of zrange query as another ordered set
For example I create a sorted set with this command:
zadd key1 1 u1 2 u2 3 u3
Now I to query last 2 items and store under other key, say key2
. I know that I need to query like this:
zrange key1 -2 -1
but I don't know how to store the result with key2
. Sorry for noob question, I am new to Redis, just 2 hours :)
redis sortedset
add a comment |
For example I create a sorted set with this command:
zadd key1 1 u1 2 u2 3 u3
Now I to query last 2 items and store under other key, say key2
. I know that I need to query like this:
zrange key1 -2 -1
but I don't know how to store the result with key2
. Sorry for noob question, I am new to Redis, just 2 hours :)
redis sortedset
add a comment |
For example I create a sorted set with this command:
zadd key1 1 u1 2 u2 3 u3
Now I to query last 2 items and store under other key, say key2
. I know that I need to query like this:
zrange key1 -2 -1
but I don't know how to store the result with key2
. Sorry for noob question, I am new to Redis, just 2 hours :)
redis sortedset
For example I create a sorted set with this command:
zadd key1 1 u1 2 u2 3 u3
Now I to query last 2 items and store under other key, say key2
. I know that I need to query like this:
zrange key1 -2 -1
but I don't know how to store the result with key2
. Sorry for noob question, I am new to Redis, just 2 hours :)
redis sortedset
redis sortedset
asked Nov 21 '18 at 12:36
NarekNarek
18.2k55174310
18.2k55174310
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
While Redis does not have a built-in command to do that, you can get away easily and safely with a Lua script. This one is a just a little extra tricky because the reply from ZRANGE needs swapping between the pairs of member-score to be used as input for ZADD.
local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]
local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')
for i = 1, #payload/2 do
payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end
return redis.call('ZADD', dst, unpack(payload))
For details on how to use Lua in Redis see the EVAL
commmand.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412176%2fredis-how-to-store-the-result-of-zrange-query-as-another-ordered-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
While Redis does not have a built-in command to do that, you can get away easily and safely with a Lua script. This one is a just a little extra tricky because the reply from ZRANGE needs swapping between the pairs of member-score to be used as input for ZADD.
local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]
local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')
for i = 1, #payload/2 do
payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end
return redis.call('ZADD', dst, unpack(payload))
For details on how to use Lua in Redis see the EVAL
commmand.
add a comment |
While Redis does not have a built-in command to do that, you can get away easily and safely with a Lua script. This one is a just a little extra tricky because the reply from ZRANGE needs swapping between the pairs of member-score to be used as input for ZADD.
local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]
local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')
for i = 1, #payload/2 do
payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end
return redis.call('ZADD', dst, unpack(payload))
For details on how to use Lua in Redis see the EVAL
commmand.
add a comment |
While Redis does not have a built-in command to do that, you can get away easily and safely with a Lua script. This one is a just a little extra tricky because the reply from ZRANGE needs swapping between the pairs of member-score to be used as input for ZADD.
local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]
local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')
for i = 1, #payload/2 do
payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end
return redis.call('ZADD', dst, unpack(payload))
For details on how to use Lua in Redis see the EVAL
commmand.
While Redis does not have a built-in command to do that, you can get away easily and safely with a Lua script. This one is a just a little extra tricky because the reply from ZRANGE needs swapping between the pairs of member-score to be used as input for ZADD.
local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]
local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')
for i = 1, #payload/2 do
payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end
return redis.call('ZADD', dst, unpack(payload))
For details on how to use Lua in Redis see the EVAL
commmand.
answered Nov 21 '18 at 13:38
Itamar HaberItamar Haber
28.8k43760
28.8k43760
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412176%2fredis-how-to-store-the-result-of-zrange-query-as-another-ordered-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown