Qual é a convenção de nomenclatura normal para chaves em redis? Vi valores separados por: mas não sei ao certo qual é a convenção normal ou por quê.
Sim, o sinal de dois pontos :
é uma convenção ao nomear chaves. Em este tutorial sobre Redis website é afirmado: Tente ficar com um esquema. Por exemplo, "tipo de objeto: id: campo" pode ser uma boa ideia, como em "usuário: 1000: senha". Eu gosto de usar pontos para campos com várias palavras, como em "comment: 1234: reply.to".
Você pode consultar apenas o começo da chave para retornar todos os usuários?
Se você quer dizer algo como consultar diretamente todas as chaves que começa com, user:
existe um comando de chaves para isso. No entanto, este comando deve ser usado apenas para fins de depuração, pois é O (N) porque está pesquisando todas as chaves digitadas no banco de dados.
A solução mais apropriada para esse problema é criar uma chave dedicada, vamos nomear users
, que armazenará todas as chaves dos usuários, por exemplo, na lista ou na estrutura de dados do conjunto .
scan
não é a opção @EranH., é a melhor prática para iterar chaves.scan
é usado para iterar incrementalmente uma coleção de elementos.$redis->delete($redis->keys('user:password:*'));
Usamos dois pontos (:) como separador de namespace e um hash (#) para partes de chaves de identificação, por exemplo:
fonte
Uma convenção parece ser dois pontos (:), mas eu sou desenvolvedor web, então eu pessoalmente prefiro a barra (/) para o separador. O Slash já é um separador tão importante nos URLs, que devem ser Localizadores Uniformes de Recursos, para que sejam chaves de recursos. Por que adotar uma abordagem diferente com dois pontos (:)? Isso ajuda alguma coisa?
Considere este exemplo:
Temos uma API RESTful para objetos de brinquedo. Existe um:
Onde nós o armazenamos? Usamos Redis e barras para que a chave seja óbvia:
Esta é a chave exclusiva para o brinquedo. A chave agora pode ser usada também no lado do cliente:
Um usuário solicita um objeto com chave
toy/666
. Como obtê-lo de Redis? Um exemplo relacionado ao Node.js.Não há necessidade de converter barras em dois pontos e vice-versa. Conveniente, você não acha?
Nota: sempre assegure-se de que o usuário possa acessar apenas o que você pretendia. A abordagem bruta de URL para chave acima também pode ser buscada
user/1/password
, conforme observado pelos comentaristas. Isso não deve ser um problema se você usar o Redis como um cache público somente leitura.fonte
curl http://example.com/api/user/1/password
, ou similar. (Apenas dizendo.)User#23:uploads:my/path/to/file.ext
Ainda não sei se ainda existem "práticas recomendadas" generalizadas para a nomeação de chaves Redis.
Eu experimentei usar caracteres ASCII NUL como meus separadores (já que Redis e Python são ambos limpos em 8 bits). Parece um pouco feio se você estiver vendo chaves não processadas, mas a idéia é escondê-la atrás de uma camada de abstração. Os símbolos de dois pontos e de tubulação são alternativas óbvias, desde que os componentes do seu espaço para nome tenham a garantia de não usá-los ou você queira codificar cada componente conforme necessário. No entanto, se você os codificasse, desejaria desenvolver a camada de abstração e evitar a visualização de chaves brutas de qualquer maneira ... o que me levou a voltar a usar apenas 0 no meu raciocínio.
Serei interessante em ver se há outras opiniões articuladas sobre isso.
fonte
Para seu caso, parece-me que o HSET / HGET seria um ajuste melhor. Há também o comando HKEYS .
Todos esses comandos têm a mesma complexidade que GET / SET / KEYS, então por que não usá-los?
Você poderia ter essa estrutura então:
ou:
Apenas extraia o ID do usuário e use-o como uma chave de hash. Pessoalmente, prefiro essa abordagem, pois ela é mais agradável e também é possível consultar facilmente os IDs de usuário existentes.
fonte