cari

Rumah  >  Soal Jawab  >  teks badan

Cache - Apakah kepentingan nombor siri yang ditambahkan sebelum nama set kunci redis dengan cache django?

Apabila menggunakan modul yang disertakan dengan Django untuk mengendalikan cache redis, kunci yang ditetapkan ialah, sebagai contoh, "sepanduk". Apabila anda melihat nama dalam cli redis, ia menjadi ":1:banners". dari Django? Bagaimana dengan redis

from django.core.cache import cache

def get_queryset(self):
        key = "banners"
        queryset = cache.get(key)
        if not queryset:
            queryset = Banner.objects.filter(valid=True)
            cache.set(key, queryset, 3600)
        return queryset
给我你的怀抱给我你的怀抱2749 hari yang lalu1730

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-06-10 09:50:11

    Apabila mengkonfigurasi redis sendiri, anda akan memilih perpustakaan redis itu sendiri terbahagi kepada beberapa perpustakaan, ia bergantung pada mana yang anda konfigurasikan

    balas
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-10 09:50:11

    Ini adalah mekanisme cache Django Kuncinya terdiri daripada awalan, nombor versi dan kunci sebenar. Django berguna semasa menaik taraf atau memfaktorkan semula kod Anda boleh menentukan nombor versi mana kuncinya untuk keserasian (tambahan lain dialu-alukan)

    1. Lihat dahulu pelaksanaan django redis client api:

    # https://github.com/niwinz/django-redis/blob/master/django_redis/client/default.py
    def get(self, key, default=None, version=None, client=None):
        """
        Retrieve a value from the cache.
        Returns decoded value if key is found, the default if not.
        """
        if client is None:
            client = self.get_client(write=False)
    
        key = self.make_key(key, version=version)
    
        try:
            value = client.get(key)
        except _main_exceptions as e:
            raise ConnectionInterrupted(connection=client, parent=e)
    
        if value is None:
            return default
    
        return self.decode(value)
    
    ... 中间省略代码 ...
    
    
    def make_key(self, key, version=None, prefix=None):
        if isinstance(key, CacheKey):
            return key
    
        if prefix is None:
            prefix = self._backend.key_prefix
    
        if version is None:
            version = self._backend.version
    
        return CacheKey(self._backend.key_func(key, prefix, version))
      

    Ia menggunakan fungsi make_key untuk mencipta kunci baharu. Kunci sebenar datang daripada _backend.key_func.

    2 Seterusnya, lihat pelaksanaan bahagian belakang cache Django

    # https://github.com/django/django/blob/master/django/core/cache/backends/base.py
    def default_key_func(key, key_prefix, version):
        """
        Default function to generate keys.
    
        Constructs the key used by all other methods. By default it prepends
        the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
        function with custom key making behavior.
        """
        return '%s:%s:%s' % (key_prefix, version, key)
    
    
    def get_key_func(key_func):
        """
        Function to decide which key function to use.
    
        Defaults to ``default_key_func``.
        """
        if key_func is not None:
            if callable(key_func):
                return key_func
            else:
                return import_string(key_func)
        return default_key_func
        
    class BaseCache(object):
        def __init__(self, params):
        
            ... 中间省略代码 ...
            
            self.key_prefix = params.get('KEY_PREFIX', '')
            self.version = params.get('VERSION', 1)
            self.key_func = get_key_func(params.get('KEY_FUNCTION'))
        

    Ia boleh dilihat bahawa kunci cache django redis terdiri daripada awalan, nombor versi dan kunci sebenar.

    balas
    0
  • Batalbalas