Django中如何配置Database缓存?

Posted 程序猿终结者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中如何配置Database缓存?相关的知识,希望对你有一定的参考价值。

 

  BACKEND:

  django.core.cache.backends.db.DatabaseCache

  LOCATION:

  数据库表名

  示例:

  CACHES = {

  ‘default‘: {

  ‘BACKEND‘: ‘django.core.cache.backends.db.DatabaseCache‘,

  ‘LOCATION‘: ‘my_cache_table‘,

  }

  }

  Database缓存配置——创建缓存表

  使用数据库缓存之前,需要创建缓存表:

  python manage.py createcachetable

  创建的表名为缓存配置中的LOCATION

  思考:Cache表创建到哪里去了呢?

  配置好数据库缓存之前还需要配置数据库

  示例:

  DATABASES = {

  ‘default‘: {

  ‘NAME‘: ‘app_data‘,

  ‘ENGINE‘: ‘django.db.backends.postgresql_psycopg2‘,

  ‘USER‘: ‘postgres_user‘,

  ‘PASSWORD‘: ’’password

  }

  }

  只会创建不存在的表,如果表已经存在,不操作 默认情况下会将cache表创建到default数据库,如果要创建到其他数据库,需要指定database

  疑问?

  1)可否将cache分类存储到不同的表?

  2)可否将cache分别存储到不同数据库?

  答案:可以的

  1Mutiple Database Caches: createcachetable会为每个 Cache 创建一张缓存表

  2Mutiple Databases: createcachetable会去查找数据库routers中的allow_migrate()方法,检查是否允许migrate

  3createcachetable默认使用default数据库,要使用其它数据库,需要用--database参数。

  Multi Database Caches配置示例

  CACHES = {

  ’default‘: {

  ‘BACKEND‘: ‘django.core.cache.backends.db.DatabaseCache‘,

  ‘LOCATION‘: ’api_cache_table‘,

  }# 必须配置default

  ‘apps’: {

  ‘BACKEND‘: ‘django.core.cache.backends.db.DatabaseCache‘,

  ‘LOCATION‘: ’apps_cache_table‘,

  }

  }

  如果要使用缓存,必须配置default缓存,这里的示例又配置了apps这个缓存

  class CacheRouter(object):

  """A router to control all database cache operations"""

  def db_for_read(self, model, **hints):

  "All cache read operations go to the replica"

  

  def db_for_write(self, model, **hints):

  "All cache write operations go to primary"

  

  def allow_migrate(self, db, app_label, model_name=None, **hints):

  "Only install the cache model on primary"

  

  dbRouter控制缓存的读写,需要分别实现db_for_readdb_for_writeallow_migrate这三个方法

  1.Multiple Databases——

  def db_for_read(self, model, **hints):

  "All cache read operations go to the replica"

  if model._meta.app_label == ‘django_cache‘:

  return ‘cache_replica‘

  return None

  所有DB缓存的读操作指向 cache_replica DB

  2.Multiple Databases——

  def db_for_write(self, model, **hints):

  "All cache write operations go to primary"

  if model._meta.app_label == ‘django_cache‘:

  return ‘cache_primary‘

  return None

  所有DB缓存的写操作指向 cache_primary DB

  3.Multiple Databases——migration

  def allow_migrate(self, db, app_label, model_name=None, **hints):

  "Only install the cache model on primary"

  if app_label == ‘django_cache‘:

  return db == ‘cache_primary‘

  return None

  允许在 cache_primary DB 上执行 migration

 

原文链接:http://www.maiziedu.com/wiki/django/database/

以上是关于Django中如何配置Database缓存?的主要内容,如果未能解决你的问题,请参考以下文章

django缓存优化中caches参数如何配置?

Django日志配配置

如何通过 database.properties 文件使数据库配置可配置的 persistence.xml 文件

如何阻止 Laravel 5 缓存配置?

如何在循环Django中分配外键

如何使用 Django 在模型对象中分配项目?