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


 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記錄是否存在,存在的話就不計入總數。

 

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM