C#使用Redis实现网站统计访问数或点赞数功能!
2021-04-02 21:29
标签:syn readonly c# ota 键值 src 输入 控制台 home 1.安装.net操作Redis需要的NuGet包: 这里推荐使用:StackExchange.Redis,在程序包管理器控制台输入命令install-package stackexchange.redis 2.在Action下编写实现代码: 3.调试结果: 每次刷新进入界面时,点击数都会增加一次. 4.当然有个问题,实际应用中一个用户或一个IP在一段时间内或永久时间只能算访问一次,后面的访问将不计入总数中: 我这个实现的方法是:通过IP为键值插入一条数据,有效时间为一天,计数前先判断是否该IP记录是否存在,存在的话就不计入总数。 C#使用Redis实现网站统计访问数或点赞数功能! 标签:syn readonly c# ota 键值 src 输入 控制台 home 原文地址:https://www.cnblogs.com/ROOKIEDEBUG/p/9213480.htmlpublic class HomeController : Controller
{
private readonly static string keyPerfix = "Test_ClickTotal_";
// GET: Home
public async Task 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);
}
}
}
public class HomeController : Controller
{
private readonly static string keyPerfix = "Test_ClickTotal_";
// GET: Home
public async Task 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);
}
}
}
}