Comments (3)
Hey @IvanMMM, since redis is the backing store for this, that's certainly possible. However, it's probably not what you want to do. Here's why:
Before a lock is registered with redis, it generates a cryptographically random value
to distinguishes it from any other locks that may exist. When a lock is released, it checks to make sure that the current lock in redis has this exact value, before deleting it. This is super important because there can be wide fluctuations in network speed/latency, and there is an inherent race condition between a lock's expiration and a manual call to .release()
or .unlock()
. For example:
- Worker
A
acquires a lock forfoo
- Worker
A
attempts to release its lock forfoo
- Before worker
A
reaches redis, the lock expires - Worker
B
acquires a lock forfoo
- Worker
A
reaches redis, but does not release the workerB
's lock because it has a different value
If you want to force the release of a resource you can simply call:
redis.del(yourResourceName)
Just be aware that this will delete any lock on that resource.
A better option would be to serialize the Lock
and pass it to a worker.
from node-redlock.
@mike-marcacci It could be serialized, then? That's awesome! So, I guess, just create new Lock(...)
and use methods after it. Thank you!
from node-redlock.
@mike-marcacci Hey, I have a similar use-case where I have on process locking the resource and a different one that should unlock it.
I don't understand exactly how I can do it safely, you said I can serialize the lock and pass it to the process that needs to unlock it or pass the generated value as the resource name so I can delete it from Redis directly?
Can you provide examples for the 2 options?
from node-redlock.
Related Issues (20)
- Submitting a value for the lock
- Migration guide from 4.2.0 to 5.x?
- Redlock 4.x Compatible with Redit 7.x? HOT 1
- Unable to achieve a quorum during its retry window
- Cannot extend an already-expired lock crashes consumer pods. HOT 1
- Throw specific errors when there's an issue either acquiring or releasing the lock HOT 1
- "ioredis": "^5.3.2" incompatible with "redlock": "^5.0.0-beta.2" and "@types/redlock": "^4.0.5", HOT 2
- TypeError: client.evalsha is not a function HOT 3
- No support for redis functions
- Lock in use should throw a specific error HOT 1
- Do not wait for lock (NOWAIT)
- Release with fixed type resolution HOT 2
- Do not execute RELEASE_SCRIPT lock failed with one client
- Return resource name of lock that was not acquired in vote against error
- MOVED Error Handling in Redis Cluster Environment
- Issue with Redlock Stuck in Redis Cluster Setup
- Expiration time is in the past HOT 2
- a few issues after trying beta 5.0.0
- Configure Redis DB # explicitly? HOT 1
- Wrong acquire() lock duration
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from node-redlock.