Skip to content

Instantly share code, notes, and snippets.

@dams
Last active March 20, 2017 14:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dams/7498730fe8eed23fb42f5d9a6387e95a to your computer and use it in GitHub Desktop.
Save dams/7498730fe8eed23fb42f5d9a6387e95a to your computer and use it in GitHub Desktop.

intro

  • Remote Dictionary Server
  • Salvatore Sanfilippo (antirez)
  • 2010 embauché par VMWare, puis Redis sponsorié par Pivotal 2013
  • 2015 Redis Labs

histoire

  • LiveJournal (1999) Brad Fitzpatrick
  • Memcached inventé là-bas (2003)
  • Caching basique
  • Memcached protocol très simple
  • Redis première release en 2009, memcached protocol

description basique

  • KV-store principalement une database NoSQL key-value
  • types de données très riche
  • RAM-only
  • mono-processus
  • persistence: snapshot (RDB) + append only file (AOF) et réécriture en background
  • replication: master slave
  • scripting avec Lua
  • PubSub
  • Sentinel
  • Clustering
  • modules

utilisation

  • caching
  • queues
  • stockage chaud
  • real-time actions (pub, real time bidding, etc)
  • pipelining (pubsub)

avantages

  • très facile d'installation, configuration, utilisation
  • vitesse fulgurante comparée aux autres DB
  • par définition opérations atomiques

description avancée

  • KV store: très très riche
  • clef -> valeur (string, hash, list, set, etc)
  • strings (binary data)
  • hashtables
  • lists
  • sets (ensembles de valeurs discrètes)
  • sets triés
  • HyperLogLogs (datastructure statistique pour compter à peu près)
  • facile d'implémenter un bloom filter, etc

scripting avec Lua

  • chaque noeud fait tourner Lua
  • API Redis dans Lua
  • Atomique
  • remplace le système de transactions

PubSub

  • client s'inscrivent sur un Redis
  • clients écoutent un ou des channels (regex)
  • client écrit sur un channel
  • Redis broadcast sur les channels

Replication

  • replication: slave peut devenir un master, accepter les écritures, sous-répliquer

Sentinel

  • HighAvaiaibility: monitoring, failover, config pour autres Redis et Sentinel
  • Sentinel = REDIS + PUBSUB + HEARTBEAT
  • très utile pour basculer entre masters, slaves, etc
  • quorum elections and propagation (subjective down and objective down)
  • pas d'algo consensus (paxos), mais gossip sur un timeout
  • auto-decouverte des autres sentinels via les Redis master, et des slaves via master info

Clustering

  • Clustering = Redis + Sentinel + pubsub + conventions
  • pragmatique: AP, avec perte de données (minime): last failover wins
  • full mesh
  • noeuds ne sont pas tous identiques: masters et slaves
  • opérations sur une clefs supportées
  • opérations sur groupe de clefs supportées si toutes les clefs sont sur un noeud
  • hash tags pour forcer certaines clefs à etre sur un même noeud

conclusion

  • le couteau suisse absolu à connaitre et utiliser.
  • en mode single node, facile, rapide, puissant et evolutif (Lua, pubsub)
  • mode clustering intéressant car complètement flexible et configurable
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment