Explicação e uso de hashtags
Design de hashtag
Operações multi-chave, como aquelas que usam o comando MSET ou scripts Lua, são atômicas. Todas as chaves especificadas são executadas ao mesmo tempo. No entanto, em um cluster, cada chave é hash para uma determinada partição e as operações de várias chaves não são mais atômicas. As chaves podem ser alocadas para diferentes slots. Como resultado, algumas chaves são atualizadas, enquanto outras não. Se houver uma hashtag, o cluster determinará qual slot alocar uma chave com base na hashtag. Chaves com a mesma hashtag são alocadas para o mesmo slot.
Uso de hashtags
Somente o conteúdo entre a primeira chave à esquerda ({) e a primeira chave à direita (}) a seguir é submetido a hash.
Por exemplo:
- Nas teclas {user1000}.following e {user1000}.followers, há apenas um par de chaves. user1000 será hash.
- Na tecla foo{}{bar}, não há conteúdo entre a primeira { e a primeira }. Toda a tecla foo{}{bar} será hash como de costume.
- Na tecla foo{{bar}}zap, {bar (o conteúdo entre a primeira { e a primeira }) é hash.
- Na tecla foo{bar}{zap}, bar é hash porque está entre o primeiro par de { e }.
Exemplo de hashtag
Quando a seguinte operação é realizada:
EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 key1 key2 value1 value2
O seguinte erro é exibido:
ERR 'key1' e 'key2' não estão no mesmo slot
Você pode usar uma hashtag para resolver esse problema:
EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 {user}key1 {user}key2 value1 value2