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记录是否存在,存在的话就不计入总数。

  

  

最新文章

  1. winform只能有一个实例运行且打开已运行窗口
  2. linux下忘记mysql root密码解决办法
  3. javascript 定义正则表达式
  4. win7桌面便签。自带的
  5. Android View 绘制过程
  6. APK文件安装模拟器和ADB命令的使用
  7. [GRYZ2014]最大连续子序列的和
  8. 关于 复制文本 然后Ctrl+V 操作的这个功能 貌似jq也没有封装。。。
  9. kgdb接收一个数据包详解
  10. 如何发布一个自定义Node.js模块到NPM(详细步骤)
  11. 浙大pat1020题解
  12. Eclipse使用的小细节归档
  13. 基于redis的分布式锁(不适合用于生产环境)
  14. 在客户端先通过JS验证后再将表单提交到服务器
  15. AI 奇异值分解(SVD)
  16. 笨方法学python之转义字符
  17. elasticsearch安装指导(new)
  18. mitmproxy 在windows上的使用
  19. WPF 窗口句柄获取和设置
  20. BMP格式图像读取与存储

热门文章

  1. Centos7安装和配置Tomcat8
  2. LearnOpenGL.PBR.IBL
  3. LearnOpenGL.PBR.理论
  4. tar命令-解压和压缩文件
  5. Grafana中mysql作为数据源的配置方法
  6. 解决WIN10左侧盘符顺序问题
  7. [LeetCode] 377. Combination Sum IV 组合之和之四
  8. [LeetCode] 350. Intersection of Two Arrays II 两个数组相交之二
  9. [LeetCode] 327. Count of Range Sum 区间和计数
  10. [LeetCode] 58. Length of Last Word 求末尾单词的长度