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=)
{
using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379"))
{
IDatabase db = redis.GetDatabase(); //Redis默认有15个数据库,GetDatabase()中参数代表将数据存入那个数据中
await db.StringIncrementAsync(keyPerfix+Id,); //使用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 = )
{
using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379"))
{
IDatabase db = redis.GetDatabase(); //Redis默认有15个数据库,GetDatabase()中参数代表将数据存入那个数据中 if (await db.KeyExistsAsync(keyPerfix + Request.UserHostAddress + Id) == false) //keyPerfix+访问者的IP地址+Id为 key,记录这个IP是否点击过
{
//说明没有找到
await db.StringIncrementAsync(keyPerfix + Id, ); //使用StringIncrementAsync来进行计数,效率很高 //这里就增加一条已经访问过的记录,key值要上面判断格式一致,value值随意,第三个参数表示一天后这条记录就失效
await db.StringSetAsync(keyPerfix + Request.UserHostAddress + Id, "true", TimeSpan.FromDays()); 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记录是否存在,存在的话就不计入总数。
C#使用Redis实现网站统计访问数或点赞数功能!的更多相关文章
- Shell 命令行统计 apache 网站日志访问IP以及IP归属地
Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...
- 学习笔记_过滤器应用_1(分ip统计网站的访问次数)
分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做 ...
- Java web 实现 之 Filter分析ip统计网站的访问次数
统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer& ...
- 网站统计中的数据收集原理及实现(share)
转载自:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工 ...
- 使用nginx lua实现网站统计中的数据收集
导读网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于ja ...
- 网站统计IP PV UV实现原理
网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问试用的系统,浏览器,ip归属地,访问时间,搜索引擎来源,广告效果等.原来是一样的,这次先实现了PV,UV,IP三个重 ...
- 网站统计IP PV UV
###我只是一个搬运工 网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问使用的系统,浏览器,ip归属地,访问时间,搜索引擎来源,广告效果等. PV(访问量):Pag ...
- 怎么区分PV、IV、UV以及网站统计名词解释(pv、曝光、点击)
PV(Page View)访问量,即页面访问量,每打开一次页面PV计数+1,刷新页面也是. IV(Internet Protocol)访问量指独立IP访问数,计算是以一个独立的IP在一个计算时段内访问 ...
- 一个典型的MapRuduce实例------webcount(网站统计访客信息)
统计某一特定网站的某个时辰访客人数 所用版本:hadoop2.6.5 数据样式如下: 111.111.111.111 - - [16/Dec/2012:05:32:50 -0500] "GE ...
随机推荐
- 使用ES对中文文章进行分词,并进行词频统计排序
前言:首先有这样一个需求,需要统计一篇10000字的文章,需要统计里面哪些词出现的频率比较高,这里面比较重要的是如何对文章中的一段话进行分词,例如“北京是×××的首都”,“北京”,“×××”,“中华” ...
- 目标检测论文解读1——Rich feature hierarchies for accurate object detection and semantic segmentation
背景 在2012 Imagenet LSVRC比赛中,Alexnet以15.3%的top-5 错误率轻松拔得头筹(第二名top-5错误率为26.2%).由此,ConvNet的潜力受到广泛认可,一炮而红 ...
- Mysqldump一次备份多个指定数据库
今天碰到了,就作个记录. mysqldump -u user -p --databases DB1 DB2 --single-transaction --master-data=2 --default ...
- MySQL 数据库 查询语句的基本操作,单表查询,多表查询
1.查询语句的基本操作 - select - from - where - group by - having - distinct - order by - limit - 聚合函数: count, ...
- tf.tile() 用法介绍
tile() 平铺之意,用于在同一维度上的复制 tile( input, #输入 multiples, #同一维度上复制的次数 name=None ...
- ajax与重定向
网上有不少说法ajax的请求url浏览器不会重定向的说法是片面的,正常是这样的: 当服务器将302响应发给浏览器时,浏览器并不是直接进行ajax回调处理,而是先执行302重定向——从Response ...
- B1023 组个最小数 (20 分)
一.技术总结 这一题主要的处理点是数字0别在第一个位置输出,这里提供两种解决思路. 一个是直接在一个for循环里面只要输出了一个位置后直接判断,是否了0的数字可以输出. 还有一个就是直接for循环一次 ...
- AtCoder Grand Contest 036题解
传送门 爆炸的比较厉害--果然还是菜啊-- \(A\) 我们强制一个点为\((0,0)\),那么设剩下两个点分别为\((a,b),(c,d)\),根据叉积可以计算出面积为\(ad-bc=S\),那么令 ...
- Windows的一些使用技巧/设置
仅为个人记录,关闭与否还请读者斟酌 1,加速关机速度 运行gpedit.msc: 计算机管理,管理模块 - 系统 -关机选项 关闭会阻止或取消关机的应用程序的自动终止功能. 2,组策略关闭小娜后,只把 ...
- VS2017 高级使用方法
如何离线安装,创建脱机安装 - Visual Studio | Microsoft Docs 如离线下载C++桌面开发(VS中英版本) E:\0User_File\Downloads>vs_co ...