谁有redis实现信号量的代码,希望借鉴一下?

2023-07-03 1,046 0

如题,希望提供具体的代码实现,多谢大佬

什么语言?

Java 的话 Redisson 里已经实现过了,org.redisson.api.RSemaphore 就是。开源的,随便看。

其他语言也可以参考 Redisson 的实现。

import redis
import time
def acquire_semaphore(conn, semname, limit, timeout=10):
    identifier = str(uuid.uuid4())
    now = time.time()
    pipeline = conn.pipeline(True)
    pipeline.zremrangebyscore(semname, '-inf', now - timeout)
    pipeline.zadd(semname, {identifier: now})
    pipeline.zrank(semname, identifier)
    if pipeline.execute()[-1] < limit:
        return identifier
    conn.zrem(semname, identifier)
    return None
def release_semaphore(conn, semname, identifier):
    return conn.zrem(semname, identifier)

回答

相关文章

nuxt2部署静态化和ssr的时候访问首页先报404再出现首页为什么?
`clip-path` 如何绘制圆角平行四边形呢?
多线程wait方法报错?
VUE 绑定的方法如何直接使用外部函数?
vue2固定定位该怎么做?
node.js express art-template渲染html页面慢,如何提速?