Aller au contenu

Redis

Internals

Databases

permet d'isoler les projets (SELECT xxx)

  • lister les db et checker vite fait leur contenu: info keyspace
  • SELECT 0 pr selectionner la db 0

Connection

  • timeout: par defaut 5 seconde pour le client

Persistence:

deux modes: AOF et RDB. Les 2 peuvent être activés en mm temps.

  • RDB (redis rb) snapshots to disk: occur au bout d'un temps + d'un nombre minimal d'opérations ayant eu lieu sur la DB.
  • AOF: append only file

Eviction policy

On alloue une taille maxmemory à Redis pour stocker ses data:

  • verifier la conf en CLI: config get maxmemory
  • set la policy: config set maxmemory-policy

En fonction de la policy, quand maxmemory est atteint:

  • noeviction, redis passe en read-only + erreurs de write
  • allkeys-lru, fait un lru sur n'importe quelle clé, même persistante
  • volatile-lru, fait un lru uniquement sur les clés qui ont un expire
  • volatile-ttl, fait un lru uniquement sur les clés qui ont un expire, et choisit parmi elles celle qui ont le plus bas TTL

Attention cette conf est valable pour TOUTES les db de l'instance. Comme le dit Antirez:

(...) as explained multiple times Redis multiple databases are just a namespace-alike feature, so there is and there never will be per-database configuration related to eviction, persistence, and so forth, because the feature is designed for a totally different goal.

Pipeline

Features

Version history

  • 2.6: scripting LUA
  • 5: Streams
  • 6 RC1: ACL

Streams

Distributed locking

Algorithme Redlock de Antirez pour implémenter un DLM (distributed locking manager)

Documentation officielle et PHP implementation