diff --git a/redis/connection.py b/redis/connection.py index 9d29b4aba6..ace1ed8727 100644 --- a/redis/connection.py +++ b/redis/connection.py @@ -904,9 +904,11 @@ def read_response( and self._cache.get(self._current_command_cache_key).status != CacheEntryStatus.IN_PROGRESS ): - return copy.deepcopy( + res = copy.deepcopy( self._cache.get(self._current_command_cache_key).cache_value ) + self._current_command_cache_key = None + return res response = self._conn.read_response( disable_decoding=disable_decoding, @@ -932,6 +934,8 @@ def read_response( cache_entry.cache_value = response self._cache.set(cache_entry) + self._current_command_cache_key = None + return response def pack_command(self, *args): diff --git a/tests/test_connection.py b/tests/test_connection.py index 65d80e2574..fbc23ae8c0 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -501,9 +501,9 @@ def test_read_response_returns_cached_reply(self, mock_cache, mock_connection): ) proxy_connection.send_command(*["GET", "foo"], **{"keys": ["foo"]}) assert proxy_connection.read_response() == b"bar" + assert proxy_connection._current_command_cache_key is None assert proxy_connection.read_response() == b"bar" - mock_connection.read_response.assert_called_once() mock_cache.set.assert_has_calls( [ call( @@ -530,9 +530,6 @@ def test_read_response_returns_cached_reply(self, mock_cache, mock_connection): call(CacheKey(command="GET", redis_keys=("foo",))), call(CacheKey(command="GET", redis_keys=("foo",))), call(CacheKey(command="GET", redis_keys=("foo",))), - call(CacheKey(command="GET", redis_keys=("foo",))), - call(CacheKey(command="GET", redis_keys=("foo",))), - call(CacheKey(command="GET", redis_keys=("foo",))), ] )