Repository: cunla/fakeredis-py

Issue:
All aio.FakeRedis instances share the same server
**Describe the bug**

If I create two clients with `fakeredis.aioredis.FakeRedis()` (even with different hosts/ports) they share the same backend.


**To Reproduce**
```
from fakeredis.aioredis import FakeRedis as FakeAsyncRedis
FakeAsyncRedis(host="host_one", port=1000).set("30", "30")
assert FakeAsyncRedis(host="host_two", port=2000).get("30") is None
```
Raises an AssertionError


**Expected behavior**
```
from fakeredis import FakeRedis
FakeRedis(host="host_one", port=1000).set("30", "30")
assert FakeRedis(host="host_two", port=2000).get("30") is None
```


**Desktop (please complete the following information):**
 - OS: MacOS + Linux
 - python version: 3.7.11
 - redis-py version 2.17.0
```
$ pip list | grep redis
aioredis                                 1.3.1
fakeredis                                2.17.0
hiredis                                  2.1.0
redis                                    4.3.4
```


**Additional context**
Add any other context about the problem here.


Comments:

Patch:
diff --git a/docs/about/changelog.md b/docs/about/changelog.md
index 7c3b508..d3af774 100644
--- a/docs/about/changelog.md
+++ b/docs/about/changelog.md
@@ -5,6 +5,12 @@ description: Change log of all fakeredis releases
 
 ## Next release
 
+## v2.17.1
+
+### 🧰 Bug Fixes
+
+- Fix All aio.FakeRedis instances share the same server #218
+
 ## v2.17.0
 
 ### 🚀 Features
diff --git a/fakeredis/_server.py b/fakeredis/_server.py
index 84aa53f..d2b10d7 100644
--- a/fakeredis/_server.py
+++ b/fakeredis/_server.py
@@ -64,7 +64,7 @@ class FakeBaseConnectionMixin:
             else:
                 host, port = kwargs.get('host'), kwargs.get('port')
                 self.server_key = f'{host}:{port}'
-            self.server_key += f'v{version}'
+            self.server_key += f':v{version}'
             self._server = FakeServer.get_server(self.server_key, version=version)
             self._server.connected = connected
         super().__init__(*args, **kwargs)
diff --git a/fakeredis/aioredis.py b/fakeredis/aioredis.py
index 6aac8b5..16c9916 100644
--- a/fakeredis/aioredis.py
+++ b/fakeredis/aioredis.py
@@ -163,11 +163,16 @@ class FakeConnection(FakeBaseConnectionMixin, redis_async.Connection):
             pieces.append(('client_name', self.client_name))
         return pieces
 
+    def __str__(self):
+        return self.server_key
+
 
 class FakeRedis(redis_async.Redis):
     def __init__(
             self,
             *,
+            host: str = "localhost",
+            port: int = 6379,
             db: Union[str, int] = 0,
             password: Optional[str] = None,
             socket_timeout: Optional[float] = None,
@@ -188,6 +193,8 @@ class FakeRedis(redis_async.Redis):
         if not connection_pool:
             # Adapted from aioredis
             connection_kwargs = dict(
+                host=host,
+                port=port,
                 db=db,
                 # Ignoring because AUTH is not implemented
                 # 'username',


Test patch:
diff --git a/test/test_redis_asyncio.py b/test/test_redis_asyncio.py
index d983d2b..df69904 100644
--- a/test/test_redis_asyncio.py
+++ b/test/test_redis_asyncio.py
@@ -447,3 +447,9 @@ class TestInitArgs:
         db = aioredis.FakeRedis.from_url('unix://a/b/c')
         await db.set('foo', 'bar')
         assert await db.get('foo') == b'bar'
+
+    async def test_connection_different_server(self):
+        conn1 = aioredis.FakeRedis(host="host_one", port=1000)
+        await conn1.set("30", "30")
+        conn2 = aioredis.FakeRedis(host="host_two", port=2000)
+        assert await conn2.get("30") is None