How to simulate a locking scenario using Redisson client?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I want to create a scenario wherein I want to simulate a locking scenario. The requirement is as follows:
1. There is a Map instance in Redis having a Key, Value pair.
2. Iterate over the keys.
3. While iterating check if the value represented by the Key is locked by someone else? If yes, then proceed to the next Key. If no, then do processing.
So I have written below code for the same but it appears that there is no individual lock on every object of the Map but it is on the entire Map. Can you please help me simulating the scenario?
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
someObjectMap.put("someObject1", new SomeObject());
someObjectMap.put("someObject2", new SomeObject());
Set < String > keySet = someObjectMap.keySet();
for (String key: keySet) {
RLock lock = redissonClient.getLock("THE_LOCK");
if (lock.tryLock()) {
try {
SomeObject someObject = someObjectMap.get(key);
//do some processing on someObject instance.
//I am assuming that if there is any other lock on someObject then I will skip and proceed to the next one in the Map.
} finally {
lock.unlock();
}
} else {
continue;
}
}
To make sure my code works I have written below test code. But when I execute it does not lock one instance of the Map but the entire Map itself.
As you see in the code below object associated with key "someObject1" is being worked upon but still when you loop through in above code for object with key "someObject2" also gets skipped.
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
Thread t = new Thread(() -> {
SomeObject someObject = someObjectMap.get("someObject1");
RLock lock = redissonClient.getLock("SOME_LOCK");
try {
lock.lock();
while (true) {
//do processing with someObject
}
} finally {
lock.unlock();
}
});
t.start();
Please suggest.
java multithreading concurrency redis redisson
add a comment |
I want to create a scenario wherein I want to simulate a locking scenario. The requirement is as follows:
1. There is a Map instance in Redis having a Key, Value pair.
2. Iterate over the keys.
3. While iterating check if the value represented by the Key is locked by someone else? If yes, then proceed to the next Key. If no, then do processing.
So I have written below code for the same but it appears that there is no individual lock on every object of the Map but it is on the entire Map. Can you please help me simulating the scenario?
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
someObjectMap.put("someObject1", new SomeObject());
someObjectMap.put("someObject2", new SomeObject());
Set < String > keySet = someObjectMap.keySet();
for (String key: keySet) {
RLock lock = redissonClient.getLock("THE_LOCK");
if (lock.tryLock()) {
try {
SomeObject someObject = someObjectMap.get(key);
//do some processing on someObject instance.
//I am assuming that if there is any other lock on someObject then I will skip and proceed to the next one in the Map.
} finally {
lock.unlock();
}
} else {
continue;
}
}
To make sure my code works I have written below test code. But when I execute it does not lock one instance of the Map but the entire Map itself.
As you see in the code below object associated with key "someObject1" is being worked upon but still when you loop through in above code for object with key "someObject2" also gets skipped.
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
Thread t = new Thread(() -> {
SomeObject someObject = someObjectMap.get("someObject1");
RLock lock = redissonClient.getLock("SOME_LOCK");
try {
lock.lock();
while (true) {
//do processing with someObject
}
} finally {
lock.unlock();
}
});
t.start();
Please suggest.
java multithreading concurrency redis redisson
add a comment |
I want to create a scenario wherein I want to simulate a locking scenario. The requirement is as follows:
1. There is a Map instance in Redis having a Key, Value pair.
2. Iterate over the keys.
3. While iterating check if the value represented by the Key is locked by someone else? If yes, then proceed to the next Key. If no, then do processing.
So I have written below code for the same but it appears that there is no individual lock on every object of the Map but it is on the entire Map. Can you please help me simulating the scenario?
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
someObjectMap.put("someObject1", new SomeObject());
someObjectMap.put("someObject2", new SomeObject());
Set < String > keySet = someObjectMap.keySet();
for (String key: keySet) {
RLock lock = redissonClient.getLock("THE_LOCK");
if (lock.tryLock()) {
try {
SomeObject someObject = someObjectMap.get(key);
//do some processing on someObject instance.
//I am assuming that if there is any other lock on someObject then I will skip and proceed to the next one in the Map.
} finally {
lock.unlock();
}
} else {
continue;
}
}
To make sure my code works I have written below test code. But when I execute it does not lock one instance of the Map but the entire Map itself.
As you see in the code below object associated with key "someObject1" is being worked upon but still when you loop through in above code for object with key "someObject2" also gets skipped.
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
Thread t = new Thread(() -> {
SomeObject someObject = someObjectMap.get("someObject1");
RLock lock = redissonClient.getLock("SOME_LOCK");
try {
lock.lock();
while (true) {
//do processing with someObject
}
} finally {
lock.unlock();
}
});
t.start();
Please suggest.
java multithreading concurrency redis redisson
I want to create a scenario wherein I want to simulate a locking scenario. The requirement is as follows:
1. There is a Map instance in Redis having a Key, Value pair.
2. Iterate over the keys.
3. While iterating check if the value represented by the Key is locked by someone else? If yes, then proceed to the next Key. If no, then do processing.
So I have written below code for the same but it appears that there is no individual lock on every object of the Map but it is on the entire Map. Can you please help me simulating the scenario?
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
someObjectMap.put("someObject1", new SomeObject());
someObjectMap.put("someObject2", new SomeObject());
Set < String > keySet = someObjectMap.keySet();
for (String key: keySet) {
RLock lock = redissonClient.getLock("THE_LOCK");
if (lock.tryLock()) {
try {
SomeObject someObject = someObjectMap.get(key);
//do some processing on someObject instance.
//I am assuming that if there is any other lock on someObject then I will skip and proceed to the next one in the Map.
} finally {
lock.unlock();
}
} else {
continue;
}
}
To make sure my code works I have written below test code. But when I execute it does not lock one instance of the Map but the entire Map itself.
As you see in the code below object associated with key "someObject1" is being worked upon but still when you loop through in above code for object with key "someObject2" also gets skipped.
RMap < String, SomeObject > someObjectMap = redissonClient.getMap("SOME_OBJECT_MAP");
Thread t = new Thread(() -> {
SomeObject someObject = someObjectMap.get("someObject1");
RLock lock = redissonClient.getLock("SOME_LOCK");
try {
lock.lock();
while (true) {
//do processing with someObject
}
} finally {
lock.unlock();
}
});
t.start();
Please suggest.
java multithreading concurrency redis redisson
java multithreading concurrency redis redisson
edited Nov 26 '18 at 21:44
Sam
asked Nov 26 '18 at 21:24
SamSam
98031938
98031938
add a comment |
add a comment |
0
active
oldest
votes
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%2f53489297%2fhow-to-simulate-a-locking-scenario-using-redisson-client%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f53489297%2fhow-to-simulate-a-locking-scenario-using-redisson-client%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