Rumah > Soal Jawab > teks badan
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
伊谢尔伦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
过去多啦不再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.