控制器
public class HomeController : Controller
{
//如果是静态页面的话,我们也可以用ajax的方式,没点击一下,就请求一次。
public async Task<ActionResult> Index(int? id)
{
if (id == null) return Content("新闻id不能为空");
using (ConnectionMultiplexer redis = await ConnectionMultiplexer.ConnectAsync("192.168.31.126:6379"))
{
//默认是访问db0数据库,可以通过方法参数指定数字访问不同的数据库,例如:redis.GetDatabase(2);
IDatabase db = redis.GetDatabase();
//计数器(它是原子操作,不存在并发的问题)【应用场景:网站点击量,网络投票等】
var key = "CMS_MyNews" + id.ToString() + Request.UserHostAddress+DateTime.Now.ToString("yyMMdd");
//同一篇新闻。同一个IP,当天只能点击一次。多次点击不算点击量
if (!await db.KeyExistsAsync(key))
{
db.StringIncrement(key, 1);//对点击量加1
}
long clickNumber = (long)await db.StringGetAsync(key);
ClickNumberModel model = new ClickNumberModel();
model.ClickNumber = clickNumber;
return View(model);
}
}
}
视图
@model WebApplication2.Models.ClickNumberModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h1>中国在世贸组织起诉美国301征税措施</h1>
<div>据商务部消息,7月6日,中国在世贸组织就美国对华301调查项下正式实施的征税措施追加起诉。</div>
<div>点击量:@Model.ClickNumber</div>
</div>
</body>
</html>
模型
public class ClickNumberModel
{
public long ClickNumber { get; set; }
}