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;
}







0















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.










share|improve this question































    0















    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.










    share|improve this question



























      0












      0








      0








      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.










      share|improve this question
















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 26 '18 at 21:44







      Sam

















      asked Nov 26 '18 at 21:24









      SamSam

      98031938




      98031938
























          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
          });


          }
          });














          draft saved

          draft discarded


















          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
















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          To store a contact into the json file from server.js file using a class in NodeJS

          Redirect URL with Chrome Remote Debugging Android Devices

          Dieringhausen