当前位置: 首页 > 知识库问答 >
问题:

Redis锁定钥匙

周健
2023-03-14

我想在更新时锁定一个特定的密钥。尝试了下面的示例代码。

import redis

import time

conn = redis.StrictRedis(host='localhost', port=6379, db=0)

print ("previous Connected Key value is :" + conn.get('connected'))

print ("previous Operational Key value is :" + conn.get('operational'))

have_lock = False
my_lock = redis.Redis().lock("my_key")

try:

    have_lock = my_lock.acquire(blocking=False)
    #have_lock = my_lock.acquire(timeout=5)
    if have_lock:
        print("Got lock. Doing some stuff...")
        time.sleep(15)
        conn.set('connected', 'false')
        conn.set('operational', 'false')
    else:
        print("Did not acquire lock.")

finally:

    if have_lock:
        my_lock.release()
print ("After Connected Key value is :" + conn.get('connected'))

print ('After Operational Key value is :' + conn.get('operational'))

上面的代码正在获取锁,但我仍然可以从redis-cli或其他应用程序访问密钥。

我怎么才能锁上钥匙?

共有1个答案

干善
2023-03-14

根据设计,Redis密钥在更新期间被锁定,您不需要锁定它们。的确,Redis使用单个线程来处理命令,因此每个操作都是原子的。在处理给定命令的过程中,其他客户机会被阻塞,这就是为什么您不能执行执行时间较长的查询(例如,您自己编写的Lua脚本,并使用eval执行;或键扫描)。

 类似资料:
  • 问题内容: 我们有75台(并且正在不断增长)服务器需要通过Redis共享数据。理想情况下,所有75台服务器都希望通过操作写入Redis中的两个字段。我们预计最终在这两个领域上可能有数百万次的每日写入操作和数 十亿次 的每日读取。此数据 必须 是持久性的。 我们担心,Redis锁定可能会导致多次重试写入操作,而同时尝试增加同一字段的次数。 问题: 在一个非常重的负载下,在一个字段上同时执行多个操作是

  • 我想在我的应用程序中使用SSL锁定(公钥锁定)。我是新来的。有人可以回复我简单的步骤生成公钥,csr文件和SSL证书iOS。

  • 问题内容: 我在这里思考:如果您有2个线程执行需要同步的FAST操作,那么非阻塞方法不是比阻塞/上下文切换方法更快/更好的方法吗? 非阻塞的意思是: while(true){如果(checkAndGetTheLock())中断;} 如果您有太多线程在锁中循环,我唯一想到的就是饥饿(CPU耗尽)。 如何平衡一种方法与另一种方法? 问题答案: 以下是 Java Concurrency in Pract

  • 问题内容: 我有一个生成计数器的要求,该计数器将发送到一些api调用。我的应用程序在多个节点上运行,因此我想如何生成唯一计数器。我尝试了以下代码 并通过Task Parallel libray运行测试。当我有边界值时,我看到的是设置了多次0条目 请让我知道我需要做的更正 更新:我的最终逻辑如下 问题答案: 实际上,您的代码在翻转边界附近并不安全,因为您正在执行“获取”,(等待时间和思考),“设置”

  • 主要内容:Redis分布式锁介绍,Redis分布式锁命令在分布式系统中,当不同进程或线程一起访问共享资源时,会造成资源争抢,如果不加以控制的话,就会引发程序错乱。此时使用分布式锁能够非常有效的解决这个问题,它采用了一种互斥机制来防止线程或进程间相互干扰,从而保证了数据的一致性。 提示:如果对分布式系统这一概念不清楚,可参考百度百科《分布式系统》,简而言之,它是一种架构、一种模式。 Redis分布式锁介绍 分布式锁并非是 Redis 独有,比如 MySQ

  • 我正在使用Hazelcast Imap接口以分布式方式锁定项目,而不是将项目放在map中,我只是调用lock方法,它似乎有效,但我不知道如何查询哪些项目当前被锁定,因为项目在map中不可用。有没有方法可以查询Hazelcast锁定的键?下面是示例代码:public void testMap_DistributedLock(){final Config hazelcastConfig=new Con