Как изменить redis для приложения recommender.py в django?

я написал код для предложенного продукта под названием recommender.py

я хочу поменять redis, потому что мой хост не поддерживает redis-сервер, но я не знаю, как это сделать. Я хочу изменить весь код с redis на mysql или postgresql или mongodb

кто-нибудь может мне помочь?

это мой код

from myshop.settings import REDIS_DB, REDIS_PORT
import redis
from django.conf import settings
from .models import Product


r = redis.Redis(host=settings.REDIS_HOST,port=settings.REDIS_PORT,db=settings.REDIS_DB
class Recommender(object):
    def get_product_key(self,id):
       return f"product:{id}:bought_with" #product:1:bought_with

    def products_bought(self,products):
        product_ids = [p.id for p in products]
        for product_id in product_ids: #[1,2,3]
            for with_id in product_ids:
                if product_id != with_id:
                    r.zincrby(self.get_product_key(product_id),1,with_id)
                
    def suggest_products_for(self,products,max_results=6):
        product_ids = [p.id for p in products]
        if len(products) == 1:
            suggestions = r.zrange(self.get_product_key(product_ids[0]),0,-1,desc=True)[:max_results]

        else:
            flat_ids = ''.join([str(id) for id in product_ids]) #[1,2,3] => "123"
            tmp_key = f"tmp_{flat_ids}" #"123" => tmp_123
            keys = [self.get_product_key(id) for id in product_ids]
            r.zunionstore(tmp_key,keys)
            r.zrem(tmp_key,*product_ids)
            suggestions = r.zrange(tmp_key,0,-1,desc=True)[:max_results]
            r.delete(tmp_key)
    
        suggested_products_ids = [int(id) for id in suggestions]
        suggested_products = Product.objects.filter(id__in=suggested_products_ids)
        return suggested_products
Вернуться на верх