問題描述
使用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')
問題解答
檢視Django-redis的官方文件,對 cache backend 中Location的介紹為:
URL 格式舉例
- redis://[:password]@localhost:6379/0
- rediss://[:password]@localhost:6380/0
- 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:
問題二:如何設定Djange_redis的超時時間
問題三:如何設定djange_redis的keep_alive
問題四:如何啟用djange_redis SSL
問題五:啟用django-redis的SSL並透過6380埠連線示例
參考資料
django-redis 中文文件:https://django-redis-chs.readthedocs.io/zh_CN/latest/index.html