Explaining and Using Hash Tags
Hash Tag Design
Multi-key operations, such as those using the MSET command or Lua scripts, are atomic. All specified keys are executed at the same time. However, in a cluster, each key is hashed to a given shard, and multi-key operations are no longer atomic. The keys may be allocated to different slots. As a result, some keys are updated, while others are not. If there is a hash tag, the cluster determines which slot to allocate a key based on the hash tag. Keys with the same hash tag are allocated to the same slot.
Using Hash Tags
Only the content between the first left brace ({) and the following first right brace (}) is hashed.
For example:
- In keys {user1000}.following and {user1000}.followers, there is only one pair of braces. user1000 will be hashed.
- In key foo{}{bar}, there is no content between the first { and the first }. The whole key foo{}{bar} will be hashed as usual.
- In key foo{{bar}}zap, {bar (the content between the first { and the first }) is hashed.
- In key foo{bar}{zap}, bar is hashed because it is between the first pair of { and }.
Hash Tag Example
When the following operation is performed:
EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 key1 key2 value1 value2
The following error is displayed:
ERR 'key1' and 'key2' not in the same slot
You can use a hash tag to solve this issue:
EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 {user}key1 {user}key2 value1 value2
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot