django cache中文翻译

django cache 缓存框架

动态网站的基本权衡是,它们是动态的。每次用户请求页面时,Web服务器都会进行各种计算 - 从数据库查询到模板呈现再到业务逻辑 - 以创建站点访问者看到的页面。从处理开销的角度来看,这比标准的文件读取文件系统服务器安排要昂贵得多

对于大多数Web应用程序来说,这种开销并不是什么大问题,但对于中到高流量的站点,尽可能减少开销是至关重要的。这就需要用到缓存了。

这里有一些伪代码解释了这对于动态生成的Web页面是如何工作的:

#给定一个URL,尝试在缓存中找到该页面
given a URL, try finding that page in the cache
#如果页面在缓存中:
if the page is in the cache:
	#返回缓存页面
    return the cached page
#否则
else:
	#生成页面
    generate the page
    #将生成的页面保存到缓存中(下次使用)
    save the generated page in the cache (for next time)
    #返回生成的页面
    return the generated page

设置缓存

内存缓存(Memcached)

内存缓存(Memcached):Memcached是Django原生支持的最快,最有效的缓存类型,是一个完全基于内存的缓存服务器,最初是为了处理LiveJournal.com的高负载而开发的,后来由Danga Interactive开源。 Facebook和Wikipedia等网站使用它来减少数据库访问并显着提高网站性能。

Memcached作为守护进程运行,并分配了指定数量的RAM。 它所做的就是提供一个快速接口,用于在缓存中添加,检索和删除数据。 所有数据都直接存储在内存中,因此不会产生数据库或文件系统使用的开销。

安装Memcached本身后,您需要安装Memcached绑定。 有几个Python Memcached绑定可用; 最常见的两个是python-memcached和pylibmc。

在Django中使用Memcached:

	1.将BACKEND设置为django.core.cache.backends.memcached.MemcachedCache或	                                django.core.cache.backends.memcached.PyLibMCCache(取决于您选择的memcached绑定)

	2. 将LOCATION设置为ip:port值,其中ip是Memcached守护程序的ip地址,port是Memcached正在运行的端口,或者设置为unix:path值,其中path是Memcached Unix套接字文件的路径

在此示例中,Memcached使用python-memcached绑定在localhost(127.0.0.1)端口11211上运行:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

在此示例中,Memcached可通过本地Unix套接字文件/tmp/memcached.sock使用python-memcached绑定获得:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',
    }
}

使用pylibmc绑定时,不要包含unix:/前缀:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '/tmp/memcached.sock',
    }
}

Memcached的一个出色功能是它能够在多个服务器上共享缓存。 这意味着您可以在多台计算机上运行Memcached守护程序,程序会将该组计算机视为单个缓存,而无需在每台计算机上复制缓存值。 要利用此功能,请在LOCATION中包括所有服务器地址,可以是分号或逗号分隔的字符串,也可以是列表

在此示例中,缓存通过端口11211上的IP地址172.19.26.240和172.19.26.242上运行的Memcached实例共享:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11211',
        ]
    }
}

在以下示例中,缓存通过在IP地址172.19.26.240(端口11211),172.19.26.242(端口11212)和172.19.26.244(端口11213)上运行的Memcached实例共享:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11212',
            '172.19.26.244:11213',
        ]
    }
}

关于Memcached的最后一点是基于内存的缓存有一个缺点:因为缓存的数据存储在内存中,如果服务器崩溃,数据将会丢失。 显然,内存不适用于永久数据存储,因此不要依赖基于内存的缓存作为唯一的数据存储。 毫无疑问,没有任何Django缓存后端应该用于永久存储 - 它们都是用于缓存而不是存储的解决方案 - 但我们在此指出这一点,因为基于内存的缓存特别是暂时的。

数据库缓存

Django可以将其缓存的数据存储在您的数据库中。 如果你有一个快速,索引良好的数据库服务器,这种方法效果最好。

使用数据库表作为缓存后端:

	1.将BACKEND设置为django.core.cache.backends.db.DatabaseCache

	2.将LOCATION设置为tablename,即数据库表的名称。 此名称可以是您想要的任何名称,只要它是一个尚未在您的数据库中使用的有效表名。

在此示例中,缓存表的名称为my_cache_table:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

创建缓存表

在使用数据库缓存之前,必须使用以下命令创建缓存表:

python manage.py createcachetable

这会在数据库中创建一个表,该表的格式与Django的数据库缓存系统所期望的格式相同。 该表的名称取自LOCATION。

如果您使用多个数据库缓存,createcachetable会为每个缓存创建一个表。

如果您使用多个数据库,createcachetable将遵循数据库路由器的allow_migrate()方法(请参见下文)。

与migrate一样,createcachetable不会触及现有表。它只会创建缺少的表。

要打印将要运行的SQL,而不是运行它,请使用createcachetable - dry-run选项

多个数据库

如果对多个数据库使用数据库缓存,则还需要为数据库缓存表设置路由指令。 出于路由的目的,数据库缓存表在名为django_cache的应用程序中显示为名为CacheEntry的模型。 此模型不会出现在模型缓存中,但模型详细信息可用于路由目的。

例如,以下路由器会将所有缓存读取操作定向到cache_replica,并将所有写入操作定向到cache_primary。 缓存表只会同步到cache_primary:

class CacheRouter:
    """A router to control all database cache operations"""
	"""用于控制所有数据库缓存操作的路由器"""
    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

    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

    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

如果未指定数据库缓存模型的路由方向,则缓存后端将使用默认数据库。

当然,如果不使用数据库缓存后端,则无需担心为数据库缓存模型提供路由指令

文件系统缓存

基于文件的后端将每个缓存值序列化并存储为单独的文件。 要使用此后端,请将BACKEND设置为“django.core.cache.backends.filebased.FileBasedCache”,并将LOCATION设置为合适的目录。 例如,要将缓存数据存储在/ var / tmp / django_cache中,请使用以下设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        &
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值