2014-03-03 36 views
3

我目前有在我的web.config一些配置變量,例如:替代web.config中的AppSettings(持久性需要)

<appSettings> 
<add key="RecipientEmailForNotifications" value="[email protected]" /> 
<add key="NotifyNewEntries" value="true" /> 
<!-- etc... --> 
</appSettings> 

我有一個觀點,其中管理員用戶可以在網上更改此值,例如。對於通知

/管理/配置/


收件人的電子郵件: [_ __ _ __ _ __ _ _]

通知新詞條: [x]是

[保存]

但有兩個問題的方法:

  1. 每次我部署的web.config,我重寫那名在線保存
  2. 這些值每次Web應用程序重新啓動時(因爲Web應用程序在沒有活動時自然停止),這些在線保存的值將重置爲上次部署的原始文件

所以問題是: 實現這個目標的最佳方法是必須保持配置變量嗎?

我認爲使用表格不是很自然,但我可能是錯的(請解釋爲什麼)。

此外,使用應用程序設置讀取值時非常方便:

ConfigurationManager.AppSettings["RecipientEmailForNotifications"] 

由於反對使用數據庫的,

db.SomeConfigurationTable.SingleOrDefault(.....) 

回答

2

我會用數據庫存儲和緩存的結合。

如果您在單個Web服務器上,則可以將設置存儲在proc緩存中。如果你在一個網絡農場,你可以看看像couchbase(免費memcached)或azure

在應用程序啓動時預熱緩存可能有意義。這是從您的數據庫中讀取設置並填充緩存。

另一種流行的方法是有一個Get調用,它首先檢查緩存並在緩存爲空時填充緩存,例如,

public string Get(string key, Func<string> getItemCallback) 
     { 
      var item = Cache.Get(key) as string; 
      if (item == null) 
      { 
       item = db.SomeConfigurationTable.SingleOrDefault(key); 
       Cache.Store(key, item); 
      } 
      return item; 
     } 

不要忘記更新設置時,你將需要迸發緩存。

+0

表格結構如何?我在想:AppSetting(SettingKey,SettingValue),兩列,每一行都是設置 – sports

+0

似乎很明智 – dove