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

news/2024/5/10 16:01:58/文章来源:https://blog.csdn.net/weixin_34090562/article/details/85991261
原文: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.

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

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

相关文章

网站内容排版可用性分析

当我们谈论网站可用性的时候&#xff0c;我们总会提及用户界面(UI)——按钮、标记(label)、标签(tab)等的设计与布局。但是&#xff0c;还有一个可能会被你忽视的元素可能会把你辛辛苦苦设计的网站毁于一旦&#xff0c;那就是(文字)内容。 这些文字内容就是你的网站上用文本方式…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

慌不择路?ARM建网站专撕RISC-V,连自家员工都看不下去了

李杉 夏乙 编译整理量子位 出品 | 公众号 QbitAI软银旗下的芯片设计方案巨头ARM&#xff0c;最近搬起石头&#xff0c;砸了自己的脚。不知出于什么考虑&#xff0c;ARM几天前发布了一个网站&#xff0c;专门用来攻击他们的竞争对手、开源芯片架构RISC-V。这一举动&#xff0c;被…

编程在线--- 网站(IT技术学习、面试、交流)上线了

编程在线网站: http://facejob.sinaapp.com/ 编程在线采用PHPMysql开发,部署到Sina App Engine云应用平台上。目前网站功能在不断完善之中,更多功能敬请期待,也欢迎大家提出宝贵的意见! 转载于:https://www.cnblogs.com/hubcarl/archive/2012/07/15/2592749.html

数十个大流量网站易受“账户预劫持”漏洞影响

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士受微软安全响应中心支持的一项新研究工作发现&#xff0c;恶意人员可越权获得在线账户的所有权限&#xff0c;甚至在受害者注册服务之前即可获得。这种攻击被称为“账户预劫持”攻击。在这种…

外链应该这样发,网站排名速度提升十陪

说起发外链工作几乎是每个SEO人员都发过&#xff0c;但是比较蛋疼的是外链应该如何发&#xff0c;怎么发才有效&#xff0c;又该怎样发不会导致网站降权&#xff0c;不发又不行因为外链建设是网站外部优化的一个非常重要的环节&#xff0c;外链发布的质量直接影响着咱们SEO工作…

NPM 供应链攻击影响数百个网站和应用

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士专栏供应链安全数字化时代&#xff0c;软件无处不在。软件如同社会中的“虚拟人”&#xff0c;已经成为支撑社会正常运转的最基本元素之一&#xff0c;软件的安全性问题也正在成为当今社会的…

网站性能优化小结和spring整合redis

现在越来越多的地方需要非关系型数据库了&#xff0c;最近网站优化&#xff0c;当然从页面到服务器做了相应的优化后&#xff0c;通过在线网站测试工具与之前没优化对比&#xff0c;发现有显著提升。 服务器优化目前主要优化tomcat,在tomcat目录下的server.xml文件配置如下内容…

相关内容学习网站

2019独角兽企业重金招聘Python工程师标准>>> 大数据学习之路&#xff1a;https://blog.csdn.net/sinat_33518009/article/details/79434177 Zookeeper ZooKeeper学习第一期---简单介绍&#xff1a;http://www.cnblogs.com/wuxl360/p/5817471.html ZooKeeper学习第二…

vue 写门户网站_你不得不知道的Vue项目技巧

最近公司来了不少实习生和经验不是特别丰富的前端开发人员&#xff0c;带着他们做项目的时候&#xff0c;发现有很多入行0-3年的前端者欠缺一些东西。那么&#xff0c;这里我就以一个 vue 项目为例给大家分享一下 vue 项目的一些技巧。其实有很多人的项目可能都是直接 vue-cli …

百度seo排名规则_百度seo排名优化要点讲解(已帮助5184人)

内容导读本文针对百度seo排名优化要点的问题讲得比较泛&#xff0c;只讲到了点而没有具体展开说明。事实上&#xff0c;百度seo排名优化是个庞大的系统工程&#xff0c;其细节不可能在几篇文章中就能完全说明白。笔者建议&#xff0c;若想要真正搞懂百度seo排名优化的要点&…

网页制作中点一张图片变成图片浏览式_如何建设响应式网站?

随着H5响应式网站建设技术的日趋成熟&#xff0c;它大大降低了网站建设成本。在技术成熟之前&#xff0c;需要制作两套模板&#xff0c;一套是PC端一套是手机端。H5响应网站在访问浏览器时通过区分浏览器而不同。H5自适应网站是一组屏幕&#xff0c;可以以具有不同屏幕分辨率的…

网站漏洞修复方案防止SQL注入攻击漏洞

SQL注入漏洞在网站漏洞里面属于高危漏洞&#xff0c;排列在前三&#xff0c;受影响范围较广&#xff0c;像asp、.net、PHP、java、等程序语言编写的代码&#xff0c;都存在着sql注入漏洞&#xff0c;那么如何检测网站存在sql注入漏洞&#xff1f; SQL注入漏洞测试方法 在程序代…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起&#xff0c;安全威胁就一直伴随着网站的发展&#xff0c;各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击&#xff08;…

ASP.NET MVC多语言 仿微软网站效果

文章转载自&#xff1a;https://blog.csdn.net/cooldiok/article/details/78313513 微软作为ASP.NET的创造者&#xff0c;它对于官网的结构设计肯定有值得我们借鉴和参考的地方 本项目是基于VS2017 pro开发的&#xff0c;将从你已经创建了一个MVC项目开始介绍&#xff1a; 流程…

2018程序员必备的4大网站推荐(代码、编程、SQL等)

科技时代&#xff0c;程序员是一个热门行业&#xff0c;也是一个高薪行业&#xff0c;很多人很羡慕程序员&#xff0c;其实作为一名合格的程序员&#xff0c;要不断的提升自己&#xff0c;因为科技也在不断进步&#xff0c;所以&#xff0c;接下来小编分享5个程序员必备网站&am…

python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

认识爬虫 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索…

最大的脚本网站_网站页面性能优化注意事项

为了更好地提升用户的浏览体验&#xff0c;《移动落地页体验白皮书4.0》中规定&#xff1a;页面的首屏内容应在1.5秒内加载完成。百度搜索对用户行为的研究表明&#xff0c;页面首屏的加载时间在1.5秒以内的页面&#xff0c;会带给用户流畅快捷的极速体验。近期发现有部分站点移…

基于django的视频点播网站开发-step10-后台评论管理功能...

本讲中&#xff0c;我们会讲到评论管理功能&#xff0c;数据库中的每一条是来自用户的评价&#xff0c;因此后台中的评论管理只有评论列表和评论删除功能&#xff0c;没有增加评论和编辑评论。 照例我们先添加评论管理的相关路由 path(comment_list/, views.CommentListView.as…

这个机器学习论文大众评审网站,要让每篇arXiv论文都得到讨论

圆栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI研究机器学习的人类们&#xff0c;通常喜欢把研究成果发上ArXiv。不过&#xff0c;ArXiv上面没有讨论板&#xff0c;公开讨论场所多集中在Reddit和推特上。而社交平台又无法提供纯粹的学术环境&#xff0c;讨论过程中很容易歪楼…