0
我需要在RAM中保留一些設置。我創建的文件「cache_values.py」django運行時的交替設置
class CacheValue:
pass
我想用它作爲我的需求的變量容器。
我在寫一篇服務器啓動的一些設置爲「CacheValue」:
from cms.models.pagemodel import Page
from modifier.cache_values import CacheValue
def cache_start_values():
CacheValue.page_publish_dates={}
pages=Page.objects.all()
for page in pages:
CacheValue.page_publish_dates[page.pk]=page.last_publish_date
CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())
此外,當我節省了一些模型 - 我更改這些設置
CacheValue.page_publish_dates[self.pk]=self.last_publish_date
CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())
但是,當我想在我的模板中使用這些設置,通過將上下文處理器添加爲變量 - 一些魔法開始。
from modifier.cache_values import CacheValue
def add_for_cache_info(request):
context_extras = {}
context_extras['page_publish_dates']=CacheValue.page_publish_dates
context_extras['last_publish_date_all_pages']=CacheValue.last_publish_date
if "current_page" in request.__dict__:
context_extras['last_publish_date']=CacheValue.page_publish_dates[request.current_page.pk]
return context_extras
在模板
{{ page_publish_dates }}
{{ last_publish_date_all_pages }}
價值觀,我在渲染模板交替看到舊之間(模型前保存)和新(型號後保存)每次我refersh的頁面。 0_0 0_0
如果我第二次保存模型(更改值) - 它將在最舊值和新值之間進行替換。
爲什麼?
正確答案 - 具有多個線程的多個進程會導致類似的問題。緩存框架在這裏是不錯的選擇,但不要使用[本地內存緩存](https://docs.djangoproject.com/en/dev/topics/cache/#local-memory-caching)後端,因爲它不能共享流程。還有一些分佈式協調的解決方案(比如Zookeeper),但它們相當具有殺傷力。 Memcached或一些鍵值存儲的外觀也像一個,但很難找到其他可靠的替代方案。 – Tadeck
所以,據我所知,沒有辦法保持內存在運行時改變設置,只使用python變量和類。我對嗎? – 124bit
我在問,因爲我不想使用memcache來存儲日期,並等待我從那裏獲得 – 124bit