Redis

Activez la connexion par défaut dans Dashboard et toutes les fonctions de programmation que Redis offre seront disponibles pour vos services via la bibliothèque sous-jacente redis-py, comme dans les exemples ci-dessous.

Simple keys

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):
        self.kvdb.conn.set('my-key', 'my-value')
        self.logger.info(self.kvdb.conn.get('my-key'))
INFO - my-value

Listes

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):

        # Clear/delete the list
        self.kvdb.conn.delete('my-list')

        # Push 10 elements
        for x in range(10):
            self.kvdb.conn.lpush('my-list', x)

        # Read them back
        self.logger.info(self.kvdb.conn.lrange('my-list', 0, 9999))
INFO - ['9', '8', '7', '6', '5', '4', '3', '2', '1', '0']

Dictionnaires (hashmaps)

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):

        # Clear/delete the dictionary
        self.kvdb.conn.delete('my-dict')

        # Set 10 keys and values
        for x in range(10):
            self.kvdb.conn.hset('my-dict', x, x**x)

        # Read one of them back
        self.logger.info(self.kvdb.conn.hget('my-dict', 7))
INFO - 823543

Transactions

Les pipelines peuvent être utilisés pour améliorer les performances de l'exécution de plusieurs opérations et pour invoquer les opérations de manière atomique.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):

        # Either deletes all the keys specified and adds a new one or none
        # of it is performed.
        with self.kvdb.conn.pipeline() as p:

            # Deletes
            p.delete('my-key-1')
            p.delete('my-key-2')
            p.delete('my-key-3')

            # Add new key
            p.set('my-key-4', 'my-value')

            # Execute all the commands queued up in a single transaction
            p.execute()

Sujets connexes