Tutorial: Buat papan peringkat cache-aside di ASP.NET

Dalam tutorial ini, Anda akan memperbarui aplikasi web ContosoTeamStats ASP.NET---yang dibuat mulai cepat ASP.NET untuk Azure Cache for Redis---untuk menyertakan papan peringkat yang menggunakan pola cache-aside dengan Azure Cache for Redis. Contoh aplikasi menampilkan daftar statistik tim dari database. Aplikasi sampel juga menunjukkan berbagai cara untuk menggunakan Azure Cache for Redis untuk menyimpan dan mengambil data dari cache untuk meningkatkan kinerja. Ketika Anda menyelesaikan tutorial ini, Anda memiliki aplikasi web berjalan yang membaca dan menulis ke database, dioptimalkan dengan Azure Cache for Redis, dan dihosting di Azure.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Meningkatkan throughput data dan mengurangi muatan database dengan menyimpan dan mengambil data menggunakan Azure Cache for Redis.
  • Menggunakan rangkaian yang diurutkan Redis untuk mengambil lima tim teratas.
  • Menyediakan sumber daya Azure untuk aplikasi menggunakan templat Manajer Sumber Daya.
  • Menyebarkan aplikasi ke Azure menggunakan Visual Studio.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda harus memenuhi prasyarat berikut:

Menambahkan papan peringkat ke proyek

Di bagian tutorial ini, Anda mengonfigurasi proyek ContosoTeamStats dengan papan peringkat yang melaporkan statistik menang, kalah, dan seri untuk daftar tim fiksi.

Menambahkan Kerangka Kerja Entitas ke proyek

  1. Di Visual Studio, buka ContosoTeamStats Solution yang Anda buat di mulai cepat ASP.NET untuk Azure Cache for Redis.

  2. Pilih Alat > NuGet Package Manager > Package Manager Console.

  3. Jalankan perintah berikut dari jendela Package Manager Console untuk menginstal EntityFramework:

    Install-Package EntityFramework
    

Untuk informasi selengkapnya tentang paket ini, lihat halaman EntityFramework NuGet.

Menambahkan model Team

  1. Klik kanan Model di Penjelajah Solusi, dan pilih Tambahkan, Kelas.

  2. Masukkan Team untuk nama kelas dan pilih Tambahkan.

    Add model class

  3. Ganti pernyataan using di bagian atas file Team.cs dengan pernyataan using berikut:

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.SqlServer;
    
  4. Ganti penentuan kelas Team dengan cuplikan kode berikut yang berisi penentuan kelas Team yang diperbarui serta beberapa kelas pembantu Kerangka Kerja Entitas lainnya. Tutorial ini menggunakan pendekatan kode pertama dengan Kerangka Entitas. Pendekatan ini memungkinkan Kerangka Kerja Entitas untuk membuat database dari kode Anda. Untuk informasi selengkapnya tentang pendekatan pertama kode untuk Kerangka Entitas yang digunakan dalam tutorial ini, lihat Kode pertama untuk database baru.

    public class Team
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Wins { get; set; }
        public int Losses { get; set; }
        public int Ties { get; set; }
    
        static public void PlayGames(IEnumerable<Team> teams)
        {
            // Simple random generation of statistics.
            Random r = new Random();
    
            foreach (var t in teams)
            {
                t.Wins = r.Next(33);
                t.Losses = r.Next(33);
                t.Ties = r.Next(0, 5);
            }
        }
    }
    
    public class TeamContext : DbContext
    {
        public TeamContext()
            : base("TeamContext")
        {
        }
    
        public DbSet<Team> Teams { get; set; }
    }
    
    public class TeamInitializer : CreateDatabaseIfNotExists<TeamContext>
    {
        protected override void Seed(TeamContext context)
        {
            var teams = new List<Team>
            {
                new Team{Name="Adventure Works Cycles"},
                new Team{Name="Alpine Ski House"},
                new Team{Name="Blue Yonder Airlines"},
                new Team{Name="Coho Vineyard"},
                new Team{Name="Contoso, Ltd."},
                new Team{Name="Fabrikam, Inc."},
                new Team{Name="Lucerne Publishing"},
                new Team{Name="Northwind Traders"},
                new Team{Name="Consolidated Messenger"},
                new Team{Name="Fourth Coffee"},
                new Team{Name="Graphic Design Institute"},
                new Team{Name="Nod Publishers"}
            };
    
            Team.PlayGames(teams);
    
            teams.ForEach(t => context.Teams.Add(t));
            context.SaveChanges();
        }
    }
    
    public class TeamConfiguration : DbConfiguration
    {
        public TeamConfiguration()
        {
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
        }
    }
    
  5. Di Penjelajah Solusi, klik dua kali Web.config untuk membukanya.

    Web.config

  6. Tambahkan bagian connectionStrings berikut di dalam bagian configuration. Nama string koneksi harus sesuai dengan nama kelas konteks database Kerangka Kerja Entitas, yaitu TeamContext.

    Untai (karakter) koneksi ini menganggap Anda telah memenuhi Prasyarat dan memasang SQL Server Express LocalDB, yang merupakan bagian dari beban kerja pengembangan desktop .NET yang dipasang pada Visual Studio 2019.

    <connectionStrings>
        <add name="TeamContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Teams.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
    

    Contoh berikut memperlihatkan bagian baru connectionStrings berikut configSections di dalam bagian configuration:

    <configuration>
        <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </configSections>
        <connectionStrings>
        <add name="TeamContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Teams.mdf;Integrated Security=True"     providerName="System.Data.SqlClient" />
        </connectionStrings>
        ...
    

Menambahkan TeamsController dan tampilan

  1. Di Visual Studio, buat proyek.

  2. Di Penjelajah Solusi, klik kanan folder Pengontrol, pilih Tambahkan, Pengontrol.

  3. Pilih Pengontrol MVC 5 dengan tampilan, menggunakan Kerangka Entitas, lalu pilih Tambahkan. Jika Anda menemukan kesalahan setelah memilihTambahkan, pastikan Anda telah membangun proyek terlebih dahulu.

    Add controller class

  4. Pilih Team (ContosoTeamStats.Models) dari daftar drop-down Kelas model. Pilih TeamContext (ContosoTeamStats.Models) dari daftar drop-down Kelas konteks data. Ketik TeamsController dalam kotak teks nama Pengontrol (jika tidak diisi secara otomatis). Pilih Tambahkan untuk membuat kelas pengontrol dan tambahkan tampilan default.

    Configure controller

  5. Di Penjelajah Solusi, perluas Global.asax dan klik dua kali Global.asax.cs untuk membukanya.

    Global.asax.cs

  6. Tambahkan dua pernyataan using berikut di bagian atas file di bawah pernyataan using lainnya:

    using System.Data.Entity;
    using ContosoTeamStats.Models;
    
  7. Tambahkan baris kode berikut di akhir metode Application_Start:

    Database.SetInitializer<TeamContext>(new TeamInitializer());
    
  8. Di Penjelajah Solusi, perluas App_Start dan klik dua kali RouteConfig.cs.

    RouteConfig.cs

  9. Dalam metode RegisterRoutes, ganti controller = "Home" dalam rute Default dengan controller = "Teams" seperti yang ditunjukkan dalam contoh berikut:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Teams", action = "Index", id = UrlParameter.Optional }
    );
    

Mengonfigurasi tampilan Tata Letak

  1. Di Penjelajah Solusi, perluas folder Tampilan lalu folder Bersama dan klik dua kali _Layout.cshtml.

    _Layout.cshtml

  2. Ubah konten elemen title dan ganti My ASP.NET Application dengan Contoso Team Stats seperti yang diperlihatkan dalam contoh berikut:

    <title>@ViewBag.Title - Contoso Team Stats</title>
    
  3. Di bagian body ini, tambahkan pernyataan baru Html.ActionLink berikut untuk Statistik Tim Contoso tepat di bawah tautan untuk Azure Cache for Redis Test.

    @Html.ActionLink("Contoso Team Stats", "Index", "Teams", new { area = "" }, new { @class = "navbar-brand" })`
    

    Code changes

  4. Tekan Ctrl+F5 untuk membangun dan menjalankan aplikasi. Versi aplikasi ini membaca hasilnya langsung dari database. Perhatikan bahwa tindakan Buat Baru, Edit, Detail, dan Hapus yang secara otomatis ditambahkan ke aplikasi oleh Pengontrol MVC 5 dengan tampilan, menggunakan perancah Kerangka Kerja Entitas. Di bagian tutorial berikutnya, Anda akan menambahkan Azure Cache for Redis untuk mengoptimalkan akses data dan menyediakan fitur tambahan ke aplikasi.

    Starter application

Mengonfigurasi aplikasi untuk Azure Cache for Redis

Di bagian tutorial ini, Anda mengonfigurasi aplikasi sampel untuk menyimpan dan mengambil statistik tim Contoso dari instans Azure Cache for Redis dengan menggunakan klien cache StackExchange.Redis.

Menambahkan koneksi cache ke Pengontrol Teams

Anda sudah menginstal paket pustaka klien StackExchange.Redis di mulai cepat. Anda juga telah mengonfigurasi pengaturan aplikasi CacheConnection untuk digunakan secara lokal, dan dengan Azure App Service yang diterbitkan. Gunakan pustaka klien yang sama dan informasi CacheConnection di TeamsController.

  1. Di Penjelajah Solusi, perluas folder Pengontrol dan klik dua kali TeamsController.cs untuk membukanya.

    Teams controller

  2. Tambahkan dua pernyataan using berikut ke TeamsController.cs:

    using System.Configuration;
    using StackExchange.Redis;
    
  3. Tambahkan dua properti berikut ke kelas TeamsController:

    // Redis Connection string info
    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        string cacheConnection = ConfigurationManager.AppSettings["CacheConnection"].ToString();
        return ConnectionMultiplexer.Connect(cacheConnection);
    });
    
    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }
    

Memperbarui TeamsController untuk membaca dari cache atau database

Dalam sampel ini, statistik tim dapat diambil dari database atau dari cache. Statistik tim disimpan dalam cache sebagai List<Team> serial, dan juga sebagai rangkaian yang diurutkan menggunakan jenis data Redis. Saat mengambil item dari rangkaian yang diurutkan, Anda bisa mengambil beberapa, semua, atau kueri untuk item tertentu. Dalam contoh ini, Anda akan membuat kueri rangkaian yang diurutkan untuk lima tim teratas yang diberi peringkat berdasarkan jumlah kemenangan.

Tidak perlu menyimpan statistik tim dalam beberapa format dalam cache untuk menggunakan Azure Cache for Redis. Tutorial ini menggunakan beberapa format untuk menunjukkan beberapa cara yang berbeda dan berbagai jenis data yang dapat Anda gunakan untuk cache data.

  1. Tambahkan pernyataan using berikut ke file TeamsController.cs di bagian atas dengan pernyataan using lainnya:

    using System.Diagnostics;
    using Newtonsoft.Json;
    
  2. Ganti implementasi metode public ActionResult Index() saat ini dengan implementasi berikut:

    // GET: Teams
    public ActionResult Index(string actionType, string resultType)
    {
        List<Team> teams = null;
    
        switch(actionType)
        {
            case "playGames": // Play a new season of games.
                PlayGames();
                break;
    
            case "clearCache": // Clear the results from the cache.
                ClearCachedTeams();
                break;
    
            case "rebuildDB": // Rebuild the database with sample data.
                RebuildDB();
                break;
        }
    
        // Measure the time it takes to retrieve the results.
        Stopwatch sw = Stopwatch.StartNew();
    
        switch(resultType)
        {
            case "teamsSortedSet": // Retrieve teams from sorted set.
                teams = GetFromSortedSet();
                break;
    
            case "teamsSortedSetTop5": // Retrieve the top 5 teams from the sorted set.
                teams = GetFromSortedSetTop5();
                break;
    
            case "teamsList": // Retrieve teams from the cached List<Team>.
                teams = GetFromList();
                break;
    
            case "fromDB": // Retrieve results from the database.
            default:
                teams = GetFromDB();
                break;
        }
    
        sw.Stop();
        double ms = sw.ElapsedTicks / (Stopwatch.Frequency / (1000.0));
    
        // Add the elapsed time of the operation to the ViewBag.msg.
        ViewBag.msg += " MS: " + ms.ToString();
    
        return View(teams);
    }
    
  3. Tambahkan tiga metode berikut ke kelas TeamsController untuk mengimplementasikan playGames, clearCache, dan rebuildDB jenis tindakan dari pernyataan switch yang ditambahkan dalam cuplikan kode sebelumnya.

    Metode PlayGames ini memperbarui statistik tim dengan mensimulasikan musim permainan, menyimpan hasilnya ke database, dan menghapus data dari cache yang usang.

    void PlayGames()
    {
        ViewBag.msg += "Updating team statistics. ";
        // Play a "season" of games.
        var teams = from t in db.Teams
                    select t;
    
        Team.PlayGames(teams);
    
        db.SaveChanges();
    
        // Clear any cached results
        ClearCachedTeams();
    }
    

    Metode RebuildDB ini menginisialisasi ulang database dengan kumpulan tim default, menghasilkan statistik untuk mereka, dan menghapus data dari cache yang usang.

    void RebuildDB()
    {
        ViewBag.msg += "Rebuilding DB. ";
        // Delete and re-initialize the database with sample data.
        db.Database.Delete();
        db.Database.Initialize(true);
    
        // Clear any cached results
        ClearCachedTeams();
    }
    

    Metode ClearCachedTeams ini menghapus statistik tim cache dari cache.

    void ClearCachedTeams()
    {
        IDatabase cache = Connection.GetDatabase();
        cache.KeyDelete("teamsList");
        cache.KeyDelete("teamsSortedSet");
        ViewBag.msg += "Team data removed from cache. ";
    }
    
  4. Tambahkan empat metode berikut ke kelas TeamsController untuk menerapkan berbagai cara mengambil statistik tim dari cache dan database. Masing-masing metode ini mengembalikan List<Team>, yang kemudian ditampilkan oleh tampilan.

    Metode GetFromDB ini membaca statistik tim dari database.

    List<Team> GetFromDB()
    {
        ViewBag.msg += "Results read from DB. ";
        var results = from t in db.Teams
            orderby t.Wins descending
            select t;
    
        return results.ToList<Team>();
    }
    

    Metode GetFromList ini membaca statistik tim dari cache sebagai List<Team> serial. Jika statistik tidak ada di cache, maka terjadi kesalahan cache. Untuk ketinggalan cache, statistik tim dibaca dari database lalu disimpan di cache untuk permintaan berikutnya. Dalam sampel ini, serialisasi JSON.NET digunakan untuk menyerialisasikan objek .NET ke dan dari cache. Untuk informasi selengkapnya, lihat Cara bekerja dengan objek .NET di Azure Cache for Redis.

    List<Team> GetFromList()
    {
        List<Team> teams = null;
    
        IDatabase cache = Connection.GetDatabase();
        string serializedTeams = cache.StringGet("teamsList");
        if (!String.IsNullOrEmpty(serializedTeams))
        {
            teams = JsonConvert.DeserializeObject<List<Team>>(serializedTeams);
    
            ViewBag.msg += "List read from cache. ";
        }
        else
        {
            ViewBag.msg += "Teams list cache miss. ";
            // Get from database and store in cache
            teams = GetFromDB();
    
            ViewBag.msg += "Storing results to cache. ";
            cache.StringSet("teamsList", JsonConvert.SerializeObject(teams));
        }
        return teams;
    }
    

    Metode GetFromSortedSet ini membaca statistik tim dari rangkaian yang diurutkan secara cache. Jika ada kesalahan cache, statistik tim dibaca dari database dan disimpan dalam cache sebagai rangkaian yang diurutkan.

    List<Team> GetFromSortedSet()
    {
        List<Team> teams = null;
        IDatabase cache = Connection.GetDatabase();
        // If the key teamsSortedSet is not present, this method returns a 0 length collection.
        var teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", order: Order.Descending);
        if (teamsSortedSet.Count() > 0)
        {
            ViewBag.msg += "Reading sorted set from cache. ";
            teams = new List<Team>();
            foreach (var t in teamsSortedSet)
            {
                Team tt = JsonConvert.DeserializeObject<Team>(t.Element);
                teams.Add(tt);
            }
        }
        else
        {
            ViewBag.msg += "Teams sorted set cache miss. ";
    
            // Read from DB
            teams = GetFromDB();
    
            ViewBag.msg += "Storing results to cache. ";
            foreach (var t in teams)
            {
                Console.WriteLine("Adding to sorted set: {0} - {1}", t.Name, t.Wins);
                cache.SortedSetAdd("teamsSortedSet", JsonConvert.SerializeObject(t), t.Wins);
            }
        }
        return teams;
    }
    

    Metode GetFromSortedSetTop5 ini membaca lima tim teratas dari set yang diurutkan secara singgahan. Dimulai dengan memeriksa cache untuk keberadaan kunci teamsSortedSet. Jika kunci ini tidak ada, metode GetFromSortedSet dipanggil untuk membaca statistik tim dan menyimpannya di cache. Selanjutnya, rangkaian yang diurutkan secara cache dikueri untuk lima tim teratas yang dikembalikan.

    List<Team> GetFromSortedSetTop5()
    {
        List<Team> teams = null;
        IDatabase cache = Connection.GetDatabase();
    
        // If the key teamsSortedSet is not present, this method returns a 0 length collection.
        var teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", stop: 4, order: Order.Descending);
        if(teamsSortedSet.Count() == 0)
        {
            // Load the entire sorted set into the cache.
            GetFromSortedSet();
    
            // Retrieve the top 5 teams.
            teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", stop: 4, order: Order.Descending);
        }
    
        ViewBag.msg += "Retrieving top 5 teams from cache. ";
        // Get the top 5 teams from the sorted set
        teams = new List<Team>();
        foreach (var team in teamsSortedSet)
        {
            teams.Add(JsonConvert.DeserializeObject<Team>(team.Element));
        }
        return teams;
    }
    

Memperbarui metode Buat, Edit, dan Hapus untuk bekerja dengan cache

Kode perancah yang dihasilkan sebagai bagian dari sampel ini mencakup metode untuk menambahkan, mengedit, dan menghapus tim. Setiap kali tim ditambahkan, diedit, atau dihapus, data dalam cache menjadi usang. Di bagian ini, Anda akan memodifikasi ketiga metode ini untuk menghapus tim cache sehingga cache akan disegarkan.

  1. Telusuri ke metode Create(Team team) di kelas TeamsController. Tambahkan panggilan ke metode ClearCachedTeams, seperti yang diperlihatkan dalam contoh berikut:

    // POST: Teams/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "ID,Name,Wins,Losses,Ties")] Team team)
    {
        if (ModelState.IsValid)
        {
            db.Teams.Add(team);
            db.SaveChanges();
            // When a team is added, the cache is out of date.
            // Clear the cached teams.
            ClearCachedTeams();
            return RedirectToAction("Index");
        }
    
        return View(team);
    }
    
  2. Telusuri ke metode Edit(Team team) di kelas TeamsController. Tambahkan panggilan ke metode ClearCachedTeams, seperti yang diperlihatkan dalam contoh berikut:

    // POST: Teams/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ID,Name,Wins,Losses,Ties")] Team team)
    {
        if (ModelState.IsValid)
        {
            db.Entry(team).State = EntityState.Modified;
            db.SaveChanges();
            // When a team is edited, the cache is out of date.
            // Clear the cached teams.
            ClearCachedTeams();
            return RedirectToAction("Index");
        }
        return View(team);
    }
    
  3. Telusuri ke metode DeleteConfirmed(int id) di kelas TeamsController. Tambahkan panggilan ke metode ClearCachedTeams, seperti yang diperlihatkan dalam contoh berikut:

    // POST: Teams/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Team team = db.Teams.Find(id);
        db.Teams.Remove(team);
        db.SaveChanges();
        // When a team is deleted, the cache is out of date.
        // Clear the cached teams.
        ClearCachedTeams();
        return RedirectToAction("Index");
    }
    

Menambahkan metode penembolokan ke tampilan Indeks Teams

  1. Di Penjelajah Solusi, perluas folder Tampilan, lalu folder Teams, dan klik dua kali Index.cshtml.

    Index.cshtml

  2. Di dekat bagian atas file, cari elemen paragraf berikut:

    Action table

    Tautan ini membuat tim baru. Ganti elemen paragraf dengan tabel berikut ini. Tabel ini memiliki tautan tindakan untuk membuat tim baru, memainkan permainan musim baru, membersihkan cache, mengambil tim dari cache dalam beberapa format, mengambil tim dari database, dan membangun kembali database dengan data sampel segar.

    <table class="table">
        <tr>
            <td>
                @Html.ActionLink("Create New", "Create")
            </td>
            <td>
                @Html.ActionLink("Play Season", "Index", new { actionType = "playGames" })
            </td>
            <td>
                @Html.ActionLink("Clear Cache", "Index", new { actionType = "clearCache" })
            </td>
            <td>
                @Html.ActionLink("List from Cache", "Index", new { resultType = "teamsList" })
            </td>
            <td>
                @Html.ActionLink("Sorted Set from Cache", "Index", new { resultType = "teamsSortedSet" })
            </td>
            <td>
                @Html.ActionLink("Top 5 Teams from Cache", "Index", new { resultType = "teamsSortedSetTop5" })
            </td>
            <td>
                @Html.ActionLink("Load from DB", "Index", new { resultType = "fromDB" })
            </td>
            <td>
                @Html.ActionLink("Rebuild DB", "Index", new { actionType = "rebuildDB" })
            </td>
        </tr>
    </table>
    
  3. Gulir ke bagian bawah file Index.cshtml lalu tambahkan elemen tr berikut sehingga menjadi baris terakhir dalam tabel terakhir dalam file tersebut:

    <tr><td colspan="5">@ViewBag.Msg</td></tr>
    

    Baris ini menampilkan nilai ViewBag.Msg yang berisi laporan status tentang operasi saat ini. ViewBag.Msg diatur saat Anda memilih salah satu tautan tindakan dari langkah sebelumnya.

    Status message

  4. Tekan F6 untuk membangun proyek.

Menjalankan aplikasi secara lokal

Jalankan aplikasi secara lokal di komputer Anda untuk memverifikasi fungsionalitas yang telah ditambahkan untuk mendukung tim.

Dalam tes ini, aplikasi dan database, keduanya berjalan secara lokal. Azure Cache for Redis bukan cache lokal. Cache ini dihosting dari jarak jauh di Azure. Oleh karena itu, cache ini kemungkinan akan sedikit menurunkan kinerja database. Untuk kinerja terbaik, aplikasi klien dan instans Azure Cache for Redis harus berada di lokasi yang sama.

Di bagian berikutnya, Anda akan menyebarkan semua sumber daya ke Azure untuk melihat peningkatan kinerja dari penggunaan cache.

Untuk menjalankan aplikasi secara lokal:

  1. Tekan Ctrl+F5 untuk menjalankan aplikasi.

    App running local

  2. Uji masing-masing metode baru yang ditambahkan ke tampilan. Karena cache terpencil dalam pengujian ini, database harus sedikit mengungguli cache.

Menerbitkan dan menjalankan di Azure

Menyediakan database untuk aplikasi

Di bagian ini, Anda akan menyediakan database baru di Database SQL agar aplikasi dapat digunakan saat dihosting di Azure.

  1. Di portal Microsoft Azure, Pilih Buat sumber daya di sudut kiri atas portal Microsoft Azure.

  2. Pada halaman Baru, klik Database>SQL Database.

  3. Gunakan pengaturan berikut untuk Microsoft Azure SQL Database baru:

    Pengaturan Nilai yang disarankan Deskripsi
    Nama database ContosoTeamsDatabase Untuk nama database yang valid, lihat Pengidentifikasi Database.
    Langganan Langganan Anda Pilih langganan yang sama dengan yang Anda gunakan untuk membuat cache dan menghosting Azure App Service.
    Grup sumber daya TestResourceGroup Klik Gunakan yang ada dan gunakan grup sumber daya yang sama tempat Anda menempatkan cache dan Azure App Service.
    Pilih sumber Database kosong Mulai dengan database kosong.
  4. Di bawah Server, pilih Konfigurasikan pengaturan yang diperlukan>Buat server baru dan berikan informasi berikut ini lalu pilih tombol Pilih:

    Pengaturan Nilai yang disarankan Deskripsi
    Nama Server Nama unik global apa pun Untuk nama yang valid, lihat Aturan dan batasan pemberian nama.
    Proses masuk admin server Nama yang valid Untuk nama log masuk yang valid, lihat Pengidentifikasi Database.
    Password Kata sandi apa pun yang valid Kata sandi Anda harus memiliki setidaknya 8 karakter dan harus menggunakan karakter dari tiga kategori berikut: karakter huruf besar, karakter huruf kecil, angka, dan karakter non-alfanumerik.
    Lokasi US Timur Pilih wilayah yang sama tempat Anda membuat cache dan Azure App Service.
  5. Klik Sematkan ke dasbor lalu Buat untuk membuat database dan server baru.

  6. Setelah database baru dibuat, pilih Perlihatkan untai (karakter) koneksi database dan salin untai (karakter) koneksi ADO.NET.

    Show connection strings

  7. Di portal Microsoft Azure, navigasi ke Azure App Service Anda lalu pilih Pengaturan Aplikasi, lalu Tambahkan untai (karakter) koneksi baru di bawah bagian Untai (karakter) koneksi.

  8. Tambahkan string koneksi baru bernama TeamContext agar sesuai dengan kelas konteks database Kerangka Kerja Entitas. Tempelkan string koneksi untuk database baru Anda sebagai nilai. Pastikan untuk mengganti tempat penampung berikut dalam untai (karakter) koneksi lalu pilih Simpan:

    Placeholder Nilai yang disarankan
    {your_username} Gunakan log masuk admin server untuk server yang baru saja Anda buat.
    {your_password} Gunakan kata sandi untuk server yang baru saja Anda buat.

    Dengan menambahkan nama pengguna dan kata sandi sebagai Pengaturan Aplikasi, nama pengguna dan kata sandi Anda tidak disertakan dalam kode Anda. Pendekatan ini membantu melindungi kredensial tersebut.

Menerbitkan pembaruan aplikasi ke Azure

Dalam langkah tutorial ini, Anda akan menerbitkan pembaruan aplikasi ke Azure untuk menjalankannya di cloud.

  1. Klik kanan proyek ContosoTeamStats di Visual Studio lalu pilih Terbitkan.

    Publish

  2. Pilih Terbitkan untuk menggunakan profil penerbitan yang sama dengan yang Anda buat di mulai cepat.

  3. Setelah penerbitan selesai, Visual Studio meluncurkan aplikasi di browser web default Anda.

    Cache added

    Tabel berikut ini menjelaskan setiap tautan tindakan dari aplikasi sampel:

    Tindakan Deskripsi
    Buat baru Membuat Team baru.
    Mainkan Musim Mainkan musim permainan, perbarui statistik tim, dan hapus data tim yang sudah usang dari cache.
    Bersihkan Cache Membersihkan statistik tim dari cache.
    Cantumkan dari Cache Mengambil statistik tim dari cache. Jika ada kesalahan cache, muat statistik dari database dan simpan ke cache untuk kali berikutnya.
    Rangkaian yang Diurutkan dari Cache Mengambil statistik tim dari cache menggunakan rangkaian yang diurutkan. Jika ada kesalahan cache, muat statistik dari database dan simpan ke cache menggunakan rangkaian yang diurutkan.
    5 Tim Terbaik dari Cache Mengambil 5 tim terbaik dari cache menggunakan rangkaian yang diurutkan. Jika ada kesalahan cache, muat statistik dari database dan simpan ke cache menggunakan rangkaian yang diurutkan.
    Muat dari DB Mengambil statistik tim dari database.
    Bangun ulang DB Membangun ulang database dan memuatnya ulang dengan data tim contoh.
    Edit / Detail / Hapus Mengedit tim, menampilkan detail untuk tim, menghapus tim.

Pilih beberapa tindakan dan bereksperimen dengan mengambil data dari sumber yang berbeda. Perhatikan perbedaan waktu yang diperlukan untuk menyelesaikan berbagai cara pengambilan data dari database dan cache.

Membersihkan sumber daya

Ketika Anda selesai dengan aplikasi tutorial sampel, Anda dapat menghapus sumber daya Azure untuk menghemat biaya dan sumber daya. Semua sumber daya tersebut juga harus ditempatkan dalam kelompok sumber daya yang sama. Anda dapat menghapus semua sumber daya dalam satu operasi dengan menghapus grup sumber daya. Petunjuk untuk artikel ini menggunakan grup sumber daya bernama TestResources.

Penting

Menghapus grup sumber daya tidak bisa dibatalkan dan grup sumber daya serta semua sumber daya di dalamnya akan dihapus secara permanen. Pastikan Anda tidak salah menghapus grup sumber daya atau sumber daya secara tidak sengaja. Jika Anda membuat sumber daya untuk menghosting sampel ini di dalam grup sumber daya yang ada, yang berisi sumber daya yang ingin Anda disimpan, Anda dapat menghapus setiap sumber daya satu per satu pada sisi kiri.

  1. Masuk ke portal Microsoft Azure, lalu pilih Grup sumber daya.

  2. Ketik nama grup sumber daya Anda ke dalam kotak teks Filter item....

  3. Pilih ... ke kanan dari grup sumber daya lalu pilih Hapus grup sumber daya.

    Delete

  4. Anda akan diminta untuk mengonfirmasi penghapusan grup sumber daya. Ketik nama grup sumber daya Anda untuk mengonfirmasi, dan pilih Hapus.

    Setelah beberapa saat, grup sumber daya dan semua sumber daya di dalamnya akan dihapus.

Langkah berikutnya