flask-caching icon indicating copy to clipboard operation
flask-caching copied to clipboard

Connection was forcibly closed by the remote host

Open pieroliviermarquis opened this issue 3 years ago • 0 comments

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

pieroliviermarquis avatar Nov 10 '21 14:11 pieroliviermarquis