C#使用Redis实现网站统计访问数或点赞数功能!
2024-10-20 01:32:44
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记录是否存在,存在的话就不计入总数。
最新文章
- winform只能有一个实例运行且打开已运行窗口
- linux下忘记mysql root密码解决办法
- javascript 定义正则表达式
- win7桌面便签。自带的
- Android View 绘制过程
- APK文件安装模拟器和ADB命令的使用
- [GRYZ2014]最大连续子序列的和
- 关于 复制文本 然后Ctrl+V 操作的这个功能 貌似jq也没有封装。。。
- kgdb接收一个数据包详解
- 如何发布一个自定义Node.js模块到NPM(详细步骤)
- 浙大pat1020题解
- Eclipse使用的小细节归档
- 基于redis的分布式锁(不适合用于生产环境)
- 在客户端先通过JS验证后再将表单提交到服务器
- AI 奇异值分解(SVD)
- 笨方法学python之转义字符
- elasticsearch安装指导(new)
- mitmproxy 在windows上的使用
- WPF 窗口句柄获取和设置
- BMP格式图像读取与存储
热门文章
- Centos7安装和配置Tomcat8
- LearnOpenGL.PBR.IBL
- LearnOpenGL.PBR.理论
- tar命令-解压和压缩文件
- Grafana中mysql作为数据源的配置方法
- 解决WIN10左侧盘符顺序问题
- [LeetCode] 377. Combination Sum IV 组合之和之四
- [LeetCode] 350. Intersection of Two Arrays II 两个数组相交之二
- [LeetCode] 327. Count of Range Sum 区间和计数
- [LeetCode] 58. Length of Last Word 求末尾单词的长度