相关疑难解决方法(0)

Redis是单线程的,那么它是如何进行并发I/O的呢?

试图掌握Redis的一些基础知识我遇到了一篇有趣的博客文章.

作者说:

Redis是带有epoll/kqueue的单线程,并且在I/O并发方面无限缩放.

我肯定误解了整个线程,因为我发现这个说法令人费解.如果程序是单线程的,它如何同时执行任何操作?如果服务器是单线程的话,为什么Redis操作是原子的呢?

有人可以就这个问题说清楚吗?

multithreading redis

152
推荐指数
2
解决办法
6万
查看次数

redis 阻塞直到键存在

我是 Redis 的新手,想知道是否有办法await get通过它的键来ing 值,直到键存在。最小代码:

async def handler():
    data = await self._fetch(key)

async def _fetch(key):
    return self.redis_connection.get(key)
Run Code Online (Sandbox Code Playgroud)

如您所知,如果这样key不存在,那return就是None. 但是由于在我的项目中,setredis 的键值对发生在另一个应用程序中,我希望 redis_connectionget方法阻塞直到键存在。这样的期待真的有效吗?

python asynchronous redis python-asyncio

5
推荐指数
1
解决办法
6179
查看次数

Redis:竞争条件和单线程

我是Redis的新手,并通过Redis in Action一书,详细介绍了竞争条件和不同的锁定机制以避免它.(有一个专门的章节).但是在一些StackOverflow帖子中,讨论了Redis是单线程的.链接如下: 对数据结构的redis操作是否安全

在上面的链接中(在其中一个答案中)明确写明,当执行命令时,不会运行其他命令.

现在我的问题是:如果Redis是Single Threaded,那么为什么需要Locking机制呢.

请澄清一下,如果我的理解中的任何地方都错了,请告诉我.

此外,它遵循乐观的锁定机制,其中多个线程可能尝试更新数据,如果数据被修改,它将被通知给试图同时更新的其他线程(因为它们的更新失败,它们可以再次重试相同的操作).

redis

4
推荐指数
1
解决办法
2147
查看次数