it-swarm.dev

Caching di asp.net-mvc

Saya ingin melakukan cache tindakan paling banyak basis data saya di situs asp.net-mvc saya . Dalam penelitian saya, saya telah menemukan 

Tapi saya belum merasa sudah mengerti.
Saya ingin dapat men-cache permintaan POST saya, tergantung pada beberapa pars. Pars ini berada di objek. Jadi saya ingin men-cache hasil permintaan berikut:

public ActionResult AdvancedSearch(SearchBag searchBag)

Di mana searchBag adalah objek yang menampung (banyak) parameter pencarian opsional . Tampilan saya sendiri ringan (sebagaimana mestinya), tetapi akses data bisa agak memakan waktu, tergantung pada bidang apa yang diisi dalam tas pencarian.

Saya punya perasaan saya harus caching pada datalayer saya, daripada pada tindakan saya.
Bagaimana saya seharusnya menggunakan VaryByParam dalam atribut OutputCache?

81
Boris Callens

Saya suka cache dalam model atau lapisan data juga. Ini mengisolasi semua yang harus dilakukan dengan mengambil data dari controller/presentasi. Anda dapat mengakses cache ASP.NET dari System.Web.HttpContext.Current.Cache atau menggunakan Caching Application Block dari Enterprise Library. Buat kunci Anda untuk data yang di-cache dari parameter untuk kueri. Pastikan untuk membatalkan cache saat Anda memperbarui data.

73
Matthew

Atau Anda dapat independen dari HttpContext.Current dan mengakses Cache dari HttpRuntime.Cache :)

65
Andrei Rînea

Seringkali, OutputCaching bisa menjadi yang paling cepat dan efisien, tetapi hanya ketika memenuhi persyaratan Anda. Tidak ada gunanya memiliki efisien cepat jika itu salah! ;)

Dalam hal ini, sepertinya caching di lapisan data sudah benar karena Anda memiliki kebutuhan caching yang kompleks. Kadang-kadang, Anda dapat menggabungkan keduanya jika set parameter yang mengontrol output apa yang di-cache sederhana. 

11
Haacked

anda dapat menggunakan caching keluaran sesuatu seperti ini

[OutputCache(Duration = 10, VaryByParam = "empID")]
      public ActionResult GetEmployeeDetail(int empID)
      {
          Employee e = new Employee();
          return Content(e.getEmployeeDetails(empID));
      }

atau Anda dapat menggunakan profil cache mengaturnya di konfigurasi web

<caching>
<outputCacheSettings>
    <outputCacheProfiles>
        <add name="Admin" 

        duration="86420" varyByParam="none"/>
    </outputCacheProfiles>
</outputCacheSettings>
</caching>

and use this tag
[OutputCache(CacheProfile="Admin")]
0
Nikki