Replace hmset/expire/hgetall with set/get #128
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the original implementation, there is a risk of an infinitely
long-lived cache key that arises if HMSET for the cache entry succeeds,
but EXPIRE fails or is not executed for any reason.
By serializing the cache
entryto JSON and storing that single stringin Redis, we can take advantage of SET's ability to atomically accept an
EX-piration time along with the set.
The downside is we now have to do a JSON.stringify for every cache store
we do, and JSON.parse for every cache hit / retrieval, but that is
better than cache entries that never expire.
Tests pass against a local redis after modifying 1 test case which stores a
value then stores the same key again without cache. In the HMSET
implementation, this test passed because HMSET does not modify the
expiration date of existing keys. However, calls to SET always remove
old values and any expiration.
Fixes #101.