「react」讓後臺走向國際化 i18next
阿新 • • 發佈:2020-11-13
一、Django六種快取方式(都是在settings中設定)
1、開發除錯(開發除錯使用,實際不做任何操作)
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎 'TIMEOUT': 300, # 快取超時時間(預設300,None表示永不過期,0表示立即過期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大快取個數(預設300) 'CULL_FREQUENCY': 3, # 快取到達最大個數之後,剔除快取個數的比例,即:1/CULL_FREQUENCY(預設3) }, 'KEY_PREFIX': '', # 快取key的字首(預設空) 'VERSION': 1, # 快取key的版本(預設1) 'KEY_FUNCTION' 函式名 # 生成key的函式(預設函式會生成為:【字首:版本:key】) } } # 自定義key 可用於‘KEY_FUNCTION' def default_key_func(key, key_prefix, version): """ 自定義生成key的函式""" return '%s:%s:%s' % (key_prefix, version, key) def get_key_func(key_func): """ 如果key_func是空 預設使用 default_key_func 否則,則使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
2、記憶體快取
# 此快取將內容儲存至記憶體的變數中 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', #設定一個唯一值 } } # 注:其他配置同開發除錯版本,就是將開發除錯版本里面的這幾句換成上面這個即可
3、檔案快取(適合小網站)
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', #快取檔案路徑 } }
#其他配置跟開發除錯一樣
4、資料庫
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', # 資料庫表 } }
#其他設定跟開發除錯的一樣
5.1、Memcache快取(python-memcached模組)
#方式1 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', #指定快取伺服器IP地址和埠 } } #方式2 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 指定指定區域網內的主機名加socket套接字為Memcache快取伺服器 'LOCATION': 'unix:/tmp/memcached.sock', } } # 方式3 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ #指定一臺或多臺主機IP地址和埠為快取伺服器 '172.19.26.240:11211', '172.19.26.242:11211', ] } } # 方式4 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ #以元組的形式,第一個放快取伺服器的IP跟埠 #第二個引數放權重 ('172.19.26.240:11211',5), ('172.19.26.242:11211',1) ] } }
# 注:其他配置同開發除錯版本,就是將開發除錯版本里面的這幾句換成上面這個即可
5.2、Memcache快取(pylibmc模組)
#方式1 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', #指定IP和埠為快取伺服器 } } # 方式2 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', #指定區域網內的主機名加socket套接字為Memcache快取伺服器 'LOCATION': '/tmp/memcached.sock', } } #方式3 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ #分散式快取,程式會把以下多臺伺服器當作一個單獨的快取, #不會再每臺伺服器上覆制快取值 '172.19.26.240:11211', '172.19.26.242:11211', ] } }
# 注:其他配置同開發除錯版本,就是將開發除錯版本里面的這幾句換成上面這個即可
6、Redis快取(需要安裝django-redis)
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", } } }
# 檢視中操作 from django_redis import get_redis_connection conn = get_redis_connection("default")
二、快取應用
1、前後端混合開發使用
(1)全站快取
在settings檔案中的中介軟體最上跟最下分別配置一個update,fetch中介軟體
MIDDLEWARE = [ # Update必須放在第一個, 'django.middleware.cache.UpdateCacheMiddleware', # 其他中介軟體... #Fetch必須放在最後一個 'django.middleware.cache.FetchFromCacheMiddleware', ]
(2)單頁面快取
#方法一:在檢視函式上加裝飾器 from django.views.decorators.cache import cache_page @cache_page(5) #快取5秒 def test(request): ctime=time.time() return render(request,'test.html',locals()) #方法二:在路由上配置裝飾器 from django.views.decorators.cache import cache_page urlpatterns=[ url(r'test',cache_page(5)(views.test)), ]
(3)頁面區域性快取
# a. 引入TemplateTag {% load cache %} # b. 使用快取 {% cache 5000 快取key %} 快取內容 {% endcache %} #例子: {% load cache %} # key可以隨便取 {% cache 10 'name' %} <h2>{{ ctime }}</h2> {% endcache %}
2、前後端分離的使用
from django.core.cache import cache cache.set('key',value可以是任意資料型別) cache.get('key')
#例子 from django.core.cache import cache def test(request): if cache.get('key'): ctime=cache.get('key') else: ctime=time.time() cache.set('key',ctime) return render(request,'test.html',locals())