Skip to main content

sentinel pool backed read and write redis client

Project description

read and write sentinel connection pool backed redis client

when using a redis connection backed by a SentinelConnectionPool, the pool is initialized to connect to either the master or slaves. this is annoying if you want to read from slaves and occasionally write to the master. TwiceRedis solves this by having two clients, one for master and one for slaves:

  • tr.master also aliased as tr.write

  • tr.slave also aliased as tr.read

these clients are each backed by a separate SentinelConnectionPool initialized to connect to the master or slaves respectively

TwiceRedis also uses a DisconnectingSentinel class to drastically reduce the number of active connections to the redis sentinel service(s). This class drops connection to the chosen sentinel once the master or slave has been chosen.

The DisconnectionSentinel class also filters slaves a little more intelligently than the base Sentinel class does. In addition to insuring slaves are not sdown or odown it makes sure the slaves master-link-status is ‘ok’.

TwiceRedis randomizes the sentinel list so each TwiceRedis object will be connecting to a random sentinel in the list instead of them all connecting to the first one (for as long as it works). this shuffling is probably a bit superfluous used in conjunction with DisconnectingSentinel, but at worst will reduce the load on the first sentinel in the sentinels list

usage

from twiceredis import TwiceRedis
sentinels = [('10.10.10.10', 26379),
             ('10.10.10.11', 26379),
             ('10.10.10.12', 26379)]
tr = TwiceRedis('master01', sentinels, 'tötes_passowrd')
x = tr.slave.get('superkey')
tr.master.set('je mange', 'huehue')
x = tr.read.get('nous mangeons')
tr.write.del('superkey')

pipelines work great too, you just have decide whether you need to write during one or not, if write is needed, use tr.master, else use tr.slave

with tr.master.pipeline() as wpipe:
    wpipe.set('turle', 'power')
    wpipe.set('tr3buchet', 'tötes')
    wpipe.execute()

to connect, get a key, and then disconnect to reduce active connections

x = tr.slave.get('some key')
tr.disconnect()

and afterward reconnection will happen seamlessly as needed o/ and chances are you’ll hit a different slave

x = tr.slave.get('some other key')

it also disconnects any connection under tr.master as well, but you’ll end up back on the same node when you do anything with tr.master that connects unless the master has changed in the meantime

install

pip install twiceredis or clone the repo and python setup.py install

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

twiceredis-1.0.4.tar.gz (7.2 kB view details)

Uploaded Source

File details

Details for the file twiceredis-1.0.4.tar.gz.

File metadata

  • Download URL: twiceredis-1.0.4.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for twiceredis-1.0.4.tar.gz
Algorithm Hash digest
SHA256 8c7eda5f25756cd7311e650053ba8e46ca4feb03a71a8cf5ce70e74b75489381
MD5 f7056ab7607d5d5b6e68542754edfc36
BLAKE2b-256 4b288182e4b348c1dc13c6625bca4620a481221e509e6c14cb877384d43904e5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page