Redis计数器(StringIncrement),实现记录网页新闻的点击量

控制器

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; }
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值