flask-caching
flask-caching copied to clipboard
Connection was forcibly closed by the remote host
I am unable to use redis as a backend with Flask-Caching. I can create the app, but as soon as I use the decorator @cache.cached(key_prefix='cache')
in a route, the connection is forcibly closed. I have used redis with no issues for sessions and rate limiting. I have also tried to create a second database to make sure no conflict existed with the current connections.
from flask import Flask, session, request, send_from_directory
from flask_caching import Cache
from urllib.parse import urlparse
from server import config
cache = Cache()
def create_app():
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'redis'
app.config['CACHE_REDIS_URL'] = config.REDIS_URL
app.config['CACHE_DEFAULT_TIMEOUT'] = 300
app.config['CACHE_KEY_PREFIX'] = 'cache'
url = urlparse(config.REDIS_URL)
app.config['CACHE_REDIS_HOST'] = url.hostname
app.config['CACHE_REDIS_PORT'] = url.port
app.config['CACHE_REDIS_PASSWORD'] = url.password
app.config['CACHE_REDIS_DB'] = 0
cache.init_app(app)
return app
Traceback:
Traceback (most recent call last):
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 198, in _read_from_socket
data = recv(self._sock, socket_read_size)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\_compat.py", line 72, in recv
return sock.recv(*args, **kwargs)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 2091, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask_socketio\__init__.py", line 43, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\engineio\middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask\app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask_caching\__init__.py", line 451, in decorated_function
rv = self.cache.get(cache_key)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\flask_caching\backends\rediscache.py", line 147, in get
self._read_clients.get(self._get_prefix() + key)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\client.py", line 1606, in get
return self.execute_command('GET', name)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\client.py", line 898, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 1192, in get_connection
connection.connect()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 567, in connect
self.on_connect()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 643, in on_connect
auth_response = self.read_response()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 739, in read_response
response = self._parser.read_response()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 324, in read_response
raw = self._buffer.readline()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 256, in readline
self._read_from_socket()
File "C:\Users\piero\.conda\envs\sg_env\Lib\site-packages\redis\connection.py", line 222, in _read_from_socket
raise ConnectionError("Error while reading from socket: %s" %
redis.exceptions.ConnectionError: Error while reading from socket: (10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)
Environment:
- Python version: 3.8.12
- Flask-Caching version: 1.10.1