Skip to content

leonp967/MiniRedis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniRedis API

Implementação de um subset de comandos do Redis utilizando Python, com as seguintes bibliotecas e/ou frameworks:

  • Flask - Mini-framework utilizado para criação de uma aplicação web com Python.
  • Flask-RESTPlus - Extensão do Flask que facilita a criação de API's REST.
  • ASGI - Contém funções utilitárias para conversão de funções assíncronas em síncronas.

Comandos

Os comandos implementados foram os seguintes:

  • SET key value
  • SET key value EX seconds
  • GET key
  • DEL key
  • DBSIZE
  • INCR key
  • ZADD key score member
  • ZCARD key
  • ZRANK key member
  • ZRANGE key start stop

Utilização

Os comandos podem ser utilizados através do próprio Swagger gerado pela aplicação, ou por um cliente REST qualquer. O formato de request é similar aos originais, porém a chave sempre faz parte da URL base, e o resto dos parâmetros é passado normalmente.

Implementação

  • Os SortedSets foram implementados utilizando a classe OrderedDict do próprio Python, reordenando os elementos pelo score sempre que estes são atualizados.
  • A aplicação possui a funcionalidade de realizar um backup dos dados em memória a cada 30 minutos (valor modificável) no formato JSON.
  • O controle das threads foi feito de acordo com cada chave utilizada para armazenar dados, ou seja, o bloqueio é feito individualmente para cada chave, e não por método.

Desempenho

Para tomar a decisão de manter ou não o controle das threads com utilização de mutex, foram feitos benchmarks através do JMeter para medir o tempo de execução das requests tanto no sistema utilizando mutex, quanto não utilizando, assim como fazendo requests forçando a ocorrência de situações de corrida, e também evitando esse tipo de situação. Ao comparar os resultados, notou-se que houve uma queda de performance ao utilizar os mutex's, mas a diferença ficou dentro do aceitável, considerando que ainda estamos bem abaixo da faixa dos 100 ms, e também a segurança adquirida com a mudança de abordagem. A comparação pode ser observada no seguinte gráfico:

About

MiniRedis API - Subset de comandos do Redis: https://redis.io em formato de API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages