Redis简单案例(二) 网站最近的访问用户

news/2024/5/15 11:13:31/文章来源:https://blog.csdn.net/weixin_30314813/article/details/98677700
Redis简单案例(二) 网站最近的访问用户
原文:Redis简单案例(二) 网站最近的访问用户

  我们有时会在网站中看到最后的访问用户、最近的活跃用户等等诸如此类的一些信息。本文就以最后的访问用户为例,

用Redis来实现这个小功能。在这之前,我们可以先简单了解一下在oracle、sqlserver等关系型数据库中是怎么实现的。

不可否认至少会有一张表来记录,根据时间desc排序,再取出前几条数据。下面来看看怎么用Redis来实现这个小功能:

案例用到的一些相关技术和说明:
技术说明
Redis存储数据,用了主从的模式,主写从读
artTemplate主要是用于显示最后登陆的5位用户的名称

  简单的思考:要用Redis的那种数据结构来存储这些数据呢?我们只要显示最后的5个访问用户(游客不在统计之内),结合

一些数据的操作,个人认为,List是个比较好的选择。 

  要记录下是那个用户的访问,必须要有一个登陆的操作控制。

 1         /// <summary>
 2         /// simulating user login
 3         /// </summary>
 4         /// <param name="name"></param>
 5         /// <returns></returns>
 6         [HttpPost("/login")]
 7         public IActionResult Login(string name)
 8         {
 9             if (!string.IsNullOrWhiteSpace(name))
10             {
11                 //Distinct
12                 var tran = _redis.GetTransaction();
13                 tran.ListRemoveAsync(_key, name, 1);
14                 tran.ListLeftPushAsync(_key, name);
15                 tran.Execute();
16                                
17                 var json = new { code="000",msg= string.Format("{0} login successfully",name) };
18                 return Json(json);
19             }
20             else
21             {
22                 var json = new { code = "001", msg = "name can't be empty" };
23                 return Json(json);
24             }                      
25         }

  在处理登陆时,难免会出现这样的情况,在一段时间内只有1个用户登陆,而且这个用户还由于一些原因登陆了多次,所以

我们需要简单的处理一下,让我们的List只记录下最新的那个记录就好,所以要先把已经存在的先remove掉,然后才把新的记录

push进去。

  接下来就是处理要显示的信息了。我们需要先知道我们的key中已经有多少个元素(用户)了,然后根据这个数量来进行不同的

处理:当不足5个的时候,就不用进行ltrim操作,直接取全部数据就好了,超过5个时,就先用ltrim处理一下,再取List中的数据。

 1         /// <summary>
 2         /// get the last 5 login user
 3         /// </summary>
 4         /// <returns></returns>
 5         [HttpGet("/login/last")]
 6         public IActionResult GetLastFiveLoginUser()
 7         {
 8             var len = _redis.LLen(_key);            
 9             if (len > _loginUserAmount)
10             {
11                 //limit the count
12                 _redis.LTrim(_key, 0, _loginUserAmount-1);
13             }
14             var list = (from i in _redis.LRange(_key, 0, -1) select i.ToString()); 
15                        
16             var json = new { code="000",msg="ok",data = list };
17             return Json(json);
18         }
到这里,我们的后台逻辑已经实现了,下面就是前台的展示了。

  要模拟多个用户登陆,所以就用了几个按钮来模拟,触发点击事件就是登陆成功。登陆成功之后自然在更新最近的访问用户信

息,所以要在登陆成功的回调函数中去刷新一下访问用户的信息。登陆的function如下:

 1      function login(name) {
 2             $.ajax({
 3                 url: "/login",
 4                 data: { "name": name },
 5                 dataType: "json",
 6                 method: "POST",
 7                 success: function (res) {                  
 8                     if (res.code == "000") {                     
 9                         getLastFiveLoginUser();
10                     } else {
11                         console.log(res.msg);
12                     }
13                 }
14             });
15         }

  下面就是登陆成功的回调函数,取到数据后便向模板中灌数据,然后把根据模板得到的html放到id为lastLoginUser的div中。

具体代码如下:

 1       function getLastFiveLoginUser() {
 2             $.ajax({
 3                 url: "/login/last",
 4                 data: {},
 5                 dataType: "json",
 6                 success: function (res) {                  
 7                     if (res.code == "000") {                       
 8                         var html = template('lastLoginUserTpl', res);                       
 9                         $("#lastLoginUser").html(html);                        
10                     }
11                 }
12             });
13         }

  上面说到的模板,定义是十分简单的,更多有关于这个模板引擎的信息可以参考这个地址:https://github.com/aui/artTemplate

下面是模板的具体代码:
1 <script id="lastLoginUserTpl" type="text/html">
2         <ul>
3             {{each data as item}}
4             <li>
5                 {{item}}
6             </li>
7             {{/each}}
8         </ul>
9 </script>

 

好了,到这里是前后台都处理好了,下面来看看效果:

  可以看到,正如我们的预期,只显示最后登陆的5个用户的名称。

  再来看看redis里面的数据:

  

  正好应验了前面说的只保留了最后的5个。

  记录最新的一些日记信息、交易信息等等都是属于一个大类的,其实对于这一类问题,都是可以用List来处理的,可以来看看

官网的这段话,这段话包含了许多的应用场景。 

  This pair of commands will push a new element on the list, while making sure that the list will not grow larger

than 100 elements. This is very useful when using Redis to store logs for example. It is important to note that

when used in this way LTRIM is an O(1) operation because in the average case just one element is removed from

the tail of the list.

posted on 2018-05-21 16:50 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9068031.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_849405.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NW.js将网站打包成桌面应用

需求&#xff1a;已有一个网站&#xff0c;因为浏览器兼容性等问题&#xff0c;想自己封装一个浏览器&#xff0c;打开时固定打开这个网站&#xff0c;通过这样的封装&#xff0c;将网站变成桌面应用程序。 1. 下载并安装NW.js的最新稳定版本&#xff08;NW.js&#xff09; 2. …

phpcms网站漏洞修复 远程代码写入缓存漏洞利用

SINE安全公司在对phpcms2008网站代码进行安全检测与审计的时候发现该phpcms存在远程代码写入缓存文件的一个SQL注入漏洞&#xff0c;该phpcms漏洞危害较大&#xff0c;可以导致网站被黑&#xff0c;以及服务器遭受黑客的攻击&#xff0c;关于这次发现的phpcms漏洞细节以及如何利…

python 网站的结构

用python怎么做一个网站。 维基百科对网站有如下描述&#xff1a; 网站&#xff08;英文&#xff1a;Website&#xff09;是指在互联网上&#xff0c;根据一定的规则&#xff0c;使用HTML等工具制作的用于展示特定内容的相关网页的集合。简单地说&#xff0c;网站是一种通信工具…

ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(14)之会员中心管理

源码下载地址&#xff1a;http://www.yealuo.com/Sccnn/Detail?KeyValuec891ffae-7441-4afb-9a75-c5fe000e3d1c 会员中心&#xff0c;主要包含了会员的基本信息维护、充值管理&#xff0c;以及下载充值的日志管理和收藏等功能 首先我们需要在MemberCenterModule区域下的Contro…

中国农产品信息网站scrapy-redis分布式爬取数据

---恢复内容开始--- 基于scrapy_redis和mongodb的分布式爬虫 项目需求&#xff1a; 1&#xff1a;自动抓取每一个农产品的详细数据 2&#xff1a;对抓取的数据进行存储 第一步&#xff1a; 创建scrapy项目 创建爬虫文件 在items.py里面定义我们要爬取的数据 # -*- coding: utf-…

怎么让你的网站快如飞?

服务器、VPS、空间的介绍 服务器是真实存在的物理设备.无论是性能还是安全方面都是最强大的.VPS是虚拟服务器的意思.它的功能与服务器一模一样.但不同的是它是虚拟的.在同等配置的情况下.性能不如服务器.云主机则是VPS的升级版.相对VPS来讲更稳定.更安全一些.空间和虚拟主机是同…

keepalived + lvs 网站高可用集群

一 &#xff0c;四台服务器 master 端 &#xff1a; 192.168.206.3 backup 端&#xff1a; 192.168.206.4 REserver1 端 &#xff1a; 192.168.206.5 REserver2 端&#xff1a; 192.168.206.6 二、 开始部署 1> 配置 REserver1 端 REserver2 端 &#xff08; 在回环地址配…

部署网站

1&#xff0c;下载tomcat 2 网站内容copy到tomcat classes 文件为编译后代码3将webapp copy 到 C:\apache-tomcat-7.0.85\webapps 修改 webapp 为easy即可 访问地址为 http://10.0.0.96:8080/easy/index.jsp 3 tomcat 修改如果出现有参数的接口请求不到The valid characters a…

大型网站系统架构演化之路

前言 一个成熟的大型网站&#xff08;如淘宝、天猫、腾讯等&#xff09;的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技…

谈谈个人网站的建立(一)——建站历史和技术架构

首先&#xff0c;帮忙点击一下我的网站http://www.wenzhihuai.com/。谢谢啊&#xff0c;如果可以&#xff0c;GitHub上麻烦给个star&#xff0c;以后面试能讲讲这个项目&#xff0c;GitHub地址https://github.com/Zephery/newblog 大学的时候萌生的一个想法&#xff0c;就是建立…

MacOS网页自动化教程(下)- PySeTest网站自动登录到下单测试手脚架#Python3 + Selenium3+ HTMLTestRunner#工欲善其事

PySeTest网站自动登录到下单测试手脚架#Python3 Selenium3 HTMLTestRunner系统说明如何使用功能说明实现步骤测试路径测试脚本代码实现常用方法封装Selenium基础用法Selenium 中文文档Selenium3 定位方法Selenium的等待自动生成Html测试报告HTMLTestRunner 兼容Python3如何使用…

大型网站架构改进历程:存储的瓶颈(四)

摘要&#xff1a;什么是大型网站&#xff0c;从网站的技术角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标&#xff0c;懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标&#xff0c;如果按这些标准那么像hao123网站就是了。 本文转自博…

律师所网站建设及律师事务所网站模板整理

律师网站建设的内部系统可以分为很多&#xff0c;根据栏目页的设定可以有不同的系统&#xff0c;而且随着时代的发展以及互联网技术的不断更新&#xff0c;各方面系统管理也在升级&#xff0c;网站建设者或是管理者需要不断的对网站进行优化&#xff0c;使得符合时代发展的要求…

做网站用企业网站模板好不好

现在很过公司企业做网站都一般有两种途径&#xff0c;一种找人量身定制&#xff0c;一种选择现成的企业网站模板&#xff0c;目前来说&#xff0c;这两种网站建设方式价格差异也不大&#xff0c;那么到底是定制好&#xff1f;还是企业网站模板好呢&#xff1f; 其实这个问题没有…

响应式网站建设的优缺点

首先要明白响应式网站概念&#xff0c;响应式网站是国外最先流行的一种网站布局理念&#xff0c;其理念是&#xff1a;集中创建页面的图片排版大小&#xff0c;可以智能地根据用户行为以及使用的设备环境进行相对应的布局&#xff0c;说简单点就是可以在pc和手机及各种浏览设备…

网站建设需要注意的几个重要因素

在互联网发达的时代&#xff0c;网站已经是生活当中必不可少的一个事物了&#xff0c;许许多多的企业都熟悉了网站建设的流程&#xff0c;企业可以通过网站可以自由的发布信息、更新产品、还能够为客户提供一些在线的服务等。成功的网站建设能为企业带来一定的业务和收益&#…

网站建设方案

一、网站目标 网络凭借其卓越的互动性与便捷的交流手段正成为最有发展潜力与前途的新兴媒体&#xff0c;成为众企业倍为关注的宣传热点。许多行业的知名企业已经通过网站建设来为自己的企业带来显著的宣传效果。企业网站为对外宣传、服务和交流的载体&#xff0c;来配合企业的迅…

新手如何学习网站建设,教你如何制作网站

新手开发网站具备的条件&#xff1a;对电脑熟练操作&#xff0c;使用电脑最好在一年以上&#xff0c;会打字&#xff0c;懂基本电脑知识&#xff0c;这个对现在的人来说都不成问题的。第一阶段&#xff1a;开始时最好是学些网页编辑软件和基础网页脚本语法&#xff0c;如&#…

网站开发流程

创建一个企业形象网站&#xff0c;要做好商业网站开发的前期准备、中期制作和后期的测试发布工作。前期准备包括了解网站的业务背景、明确网站的设计风格、确定网站内容等&#xff1b;中期制作主要包括创建站点、制作首页、制作模板和制作样式&#xff1b;后期的测试发布工作包…

自己建网站的步骤及方法

在当前&#xff0c;生活上很多事情已经和互联网息息相关了&#xff0c;每个我们都会网上浏览各种网站&#xff0c;新闻网站看新闻&#xff0c;购物网站在线购买&#xff0c;视频网站可以看视频&#xff0c;各种类型的网站基本都会有&#xff0c;企业建网站为了宣传和提供服务&a…