Pergunta

Atualmente, estou implementando um serviço Web REST usando CouchDB e RestLet. A camada RestLet é principalmente para autenticação e uma pequena filtragem dos dados JSON servidos pelo CouchDB:

Clientes <= http => [RestLet <= http => Couchdb

Estou usando o CouchDB também para armazenar dados de login de usuários, porque não quero adicionar um servidor de banco de dados adicional para esse fim. Assim, cada solicitação ao meu serviço causa duas solicitações CouchDB realizadas pelo RestLet (Dados de autenticação + solicitação "real"). Para manter o serviço o mais eficaz possível, quero reduzir o número de solicitações, neste caso solicitações redundantes de dados de login.

Minha ideia agora é fornecer um cache (ielru-cache via LinkedHashmap) dentro do meu aplicativo RestLet que armazena em cache dados de login, porque o cache HTTP provavelmente não será suficiente. Mas como invalidar os dados do cache, uma vez que um usuário altera a senha, por exemplo. Graças ao descanso, o aplicativo pode ser executado em vários servidores em paralelo, e não quero criar uma instância central apenas para cache os dados de login.

Atualmente, economizo dados de autenticação solicitados no cache e tento autentiar novas solicitações usando -as. Se uma autenticação falhar ou agora houver entrada disponível, despacharei uma solicitação GET para o meu armazenamento CouchDB para obter os dados de autenticação reais. Portanto, na pior das hipóteses, os usuários que mudaram seus dados talvez ainda possam fazer login com suas antigas credenciais. Como posso lidar com isso?

Ou qual é uma boa estratégia para manter o (s) cache (s) atualizado em geral?

Desde já, obrigado.

Foi útil?

Solução

Para mim, parece que você cresceu o suficiente para usar alguma solução de cache "profissional" (por exemplo, Ehcache). Todos os caches distribuídos permitem nova replicação e invalidação de dados entre diferentes nós, para que seu problema já esteja resolvido.

Outras dicas

Um cache distribuído na memória como o Memcached pode ser o que você está procurando. Você pode configurar a idade do objeto, o tamanho do cache e também expor retornos de chamada para remover objetos específicos do cache (como quando a informação é obsoleta).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top