如何将序列化redis与红锁结合起来

2024-04-28 15:51:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用Serialized Redis,因为我在包中使用了orderedDict和许多其他功能,这些功能都是我需要的。问题是我不知道如何在红锁中使用conn = serialized_redis.MsgpackSerializedRedis(host='localhost', port=6379, db=0)作为masters{a2}

对于我这个序列化Redis的重度用户来说,将Redlock与之结合使用将是非常棒的。这将帮助我解决我不需要将两个redis连接连接到一个redis连接的问题,这样可以节省资源,也可以更正确地进行连接

我与序列化的redis一起创建了一个小脚本:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time

import serialized_redis
from pottery import Redlock

conn = serialized_redis.MsgpackSerializedRedis(host='localhost', port=6379, db=0)

lock = Redlock(key='basket_test', masters={conn}, auto_release_time=15 * 1000)

try:
    lock.acquire()
    test = bool(lock.locked())
    print("Locked test ?", test)

    time.sleep(2)

    test1 = bool(lock.locked())
    print("Locked test1 ?", test)

    lock.release()

    test3 = bool(lock.locked())
    print("Locked test3 ?", test)

except Exception as err:
    print("Unfortunately there is an error here!", err)


>>> Locked test ? False
>>> Locked test1 ? False
>>> Unfortunately there is an error here! key='redlock:basket_test', masters=[MsgpackSerializedRedis<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>]

另一个代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time

import serialized_redis
from pottery import Redlock
from redis import Redis

conn = serialized_redis.MsgpackSerializedRedis(host='localhost', port=6379, db=0)

redis = Redis.from_url('redis://localhost:6379/0')

lock = Redlock(key='basket_test', masters={conn}, auto_release_time=15 * 1000)

try:
    with lock:
        print("We have locked it... I think... Let's see")
        print("Locked?", bool(lock.locked()))
        time.sleep(2)

    print("After 'with lock', Are we released?")
    print("Released?", bool(lock.locked()))


except Exception as err:
    print("Unfortunately there is an error here!", err)
    
    
>>> We have locked it... I think... Let's see
>>> Locked? False
>>> Unfortunately there is an error here! key='redlock:basket_test', masters=[MsgpackSerializedRedis<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>]

我想知道如何将serialized-redisRedlock组合在一起


Tags: testimportredislocklocalhosthosttimeport