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

控制器

public class HomeController : Controller
{
    //如果是静态页面的话,我们也可以用ajax的方式,没点击一下,就请求一次。
    public async Task 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;
}



    
    Index


    

中国在世贸组织起诉美国301征税措施

据商务部消息,7月6日,中国在世贸组织就美国对华301调查项下正式实施的征税措施追加起诉。
点击量:@Model.ClickNumber

模型

public class ClickNumberModel
{
    public long ClickNumber { get; set; }
}

Redis计数器(StringIncrement),实现记录网页新闻的点击量_第1张图片

你可能感兴趣的:(分布式开发,负载均衡,WebServices,WCF)