试图掌握Redis的一些基础知识我遇到了一篇有趣的博客文章.
作者说:
Redis是带有epoll/kqueue的单线程,并且在I/O并发方面无限缩放.
我肯定误解了整个线程,因为我发现这个说法令人费解.如果程序是单线程的,它如何同时执行任何操作?如果服务器是单线程的话,为什么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方法阻塞直到键存在。这样的期待真的有效吗?
我是Redis的新手,并通过Redis in Action一书,详细介绍了竞争条件和不同的锁定机制以避免它.(有一个专门的章节).但是在一些StackOverflow帖子中,讨论了Redis是单线程的.链接如下: 对数据结构的redis操作是否安全
在上面的链接中(在其中一个答案中)明确写明,当执行命令时,不会运行其他命令.
现在我的问题是:如果Redis是Single Threaded,那么为什么需要Locking机制呢.
请澄清一下,如果我的理解中的任何地方都错了,请告诉我.
此外,它遵循乐观的锁定机制,其中多个线程可能尝试更新数据,如果数据被修改,它将被通知给试图同时更新的其他线程(因为它们的更新失败,它们可以再次重试相同的操作).