Cache - Apakah kepentingan nombor siri yang ditambahkan sebelum nama set kunci redis dengan cache django?
给我你的怀抱
给我你的怀抱 2017-06-10 09:48:11
0
2
1630

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
给我你的怀抱
给我你的怀抱

membalas semua(2)
伊谢尔伦

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

过去多啦不再A梦

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!