【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

路邊兩盞燈發表於2023-02-03

問題描述

使用Python連線Azure Redis服務,因為在程式碼中使用的是Djange-redis元件,所以透過如下的配置連線到Azure Redis服務:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://xxxxxxxxx.redis.cache.chinacloudapi.cn:6380/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

但是當部署到AKS中後,發現一直報錯 [ERROR][testdjangeredis.py:109]Error while reading from xxxxxxxxx.redis.cache.chinacloudapi.cn:6380 : (104, 'Connection reset by peer')

【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

 

問題解答

檢視Django-redis的官方文件,對 cache backend 中Location的介紹為:

URL 格式舉例

  1. redis://[:password]@localhost:6379/0
  2. rediss://[:password]@localhost:6380/0
  3. unix://[:password]@/path/to/socket.sock?db=0

支援三種 URL scheme :

  • redis://: 普通的 TCP 套接字連線
  • rediss://: SSL 包裹的 TCP 套接字連線
  • unix://: Unix 域套接字連線

指定資料庫數字的方法:

  • db 查詢引數, 例如: redis://localhost?db=0
  • 如果使用 redis:// scheme, 可以直接將數字寫在路徑中, 例如: redis://localhost/0

 

在仔細對比配置,發現連線Azure Redis的時候使用SSL 6380埠,而Djange-Redis的配置中 scheme 還繼續使用的 redis://,而不是rediss://,所以導致 Connection reset。

為了解決以上問題,直接修改Location設定為:rediss://xxxxxxxxx.redis.cache.chinacloudapi.cn:6380/1 即可!

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "rediss://xxxxxxxxx.redis.cache.chinacloudapi.cn:6380/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

 

 

附錄一:在機器人ChatGPT中尋求 djange_redis 配置答案

問題一:如何配置djange_redis:

【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

 

 

問題二:如何設定Djange_redis的超時時間

【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

問題三:如何設定djange_redis的keep_alive

【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

 

 

問題四:如何啟用djange_redis SSL

 【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

 

 

問題五:啟用django-redis的SSL並透過6380埠連線示例

【Azure Cache for Redis】Python Djange-Redis連線Azure Redis服務遇上(104, 'Connection reset by peer')

 

 

參考資料

django-redis 中文文件:https://django-redis-chs.readthedocs.io/zh_CN/latest/index.html

 

相關文章