C#使用Redis實現網站統計訪問數或點贊數功能!

來源:互聯網
上載者:User

標籤:syn   readonly   c#   ota   索引值   src   輸入   控制台   home   

 1.安裝.net操作Redis需要的NuGet包:

    這裡推薦使用:StackExchange.Redis,在封裝管理員控制台輸入命令install-package stackexchange.redis

      

   2.在Action下編寫實現代碼:

  

public class HomeController : Controller    {        private readonly static string keyPerfix = "Test_ClickTotal_";        // GET: Home        public async Task<ActionResult> Index(int Id=0)        {            using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379"))            {                IDatabase db = redis.GetDatabase(4);  //Redis預設有15個資料庫,GetDatabase()中參數代表將資料存入那個資料中                await db.StringIncrementAsync(keyPerfix+Id,1); //使用StringIncrementAsync來進行計數,效率很高                string total = await db.StringGetAsync(keyPerfix + Id); //增加之後在讀取出來                ClickTotalModel totalModel = new ClickTotalModel { Total=Convert.ToInt32(total)};                return View(totalModel);            }                      }    }

 

 

 

  3.調試結果:

  

  每次重新整理進入介面時,點擊數都會增加一次.

 

  4.當然有個問題,實際應用中一個使用者或一個IP在一段時間內或永久時間只能算訪問一次,後面的訪問將不計入總數中:

  

public class HomeController : Controller    {        private readonly static string keyPerfix = "Test_ClickTotal_";        // GET: Home        public async Task<ActionResult> Index(int Id = 0)        {            using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379"))            {                IDatabase db = redis.GetDatabase(4);  //Redis預設有15個資料庫,GetDatabase()中參數代表將資料存入那個資料中                if (await db.KeyExistsAsync(keyPerfix + Request.UserHostAddress + Id) == false) //keyPerfix+訪問者的IP地址+Id為 key,記錄這個IP是否點擊過                {                    //說明沒有找到                    await db.StringIncrementAsync(keyPerfix + Id, 1); //使用StringIncrementAsync來進行計數,效率很高                    //這裡就增加一條已經訪問過的記錄,key值要上面判斷格式一致,value值隨意,第三個參數表示一天后這條記錄就失效                    await db.StringSetAsync(keyPerfix + Request.UserHostAddress + Id, "true", TimeSpan.FromDays(1));                    string total = await db.StringGetAsync(keyPerfix + Id); //增加之後在讀取出來                    ClickTotalModel totalModel = new ClickTotalModel { Total = Convert.ToInt32(total) };                    return View(totalModel);                }                else                {                    //直接讀出來                    string total = await db.StringGetAsync(keyPerfix + Id);                    ClickTotalModel totalModel = new ClickTotalModel { Total = Convert.ToInt32(total) };                    return View(totalModel);                }            }        }    }

 

    我這個實現的方法是:通過IP為索引值插入一條資料,有效時間為一天,計數前先判斷是否該IP記錄是否存在,存在的話就不計入總數。

 

  

 

  

C#使用Redis實現網站統計訪問數或點贊數功能!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.