返回顶部
首页 > 资讯 > 精选 >SpringSession怎么通过Redis统计在线用户数量
  • 462
分享到

SpringSession怎么通过Redis统计在线用户数量

2023-07-05 22:07:23 462人浏览 独家记忆
摘要

这篇“springSession怎么通过Redis统计在线用户数量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring

这篇“springSession怎么通过Redis统计在线用户数量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringSession怎么通过Redis统计在线用户数量”文章吧。

因为系统原先的逻辑是使用Spring Session加上Redis做的会话共享实现的单点登录,登录之后会在session设置一个key值表示用户已经登录过,同时重写httpservletRequestWrapper 设置remoteUser数据值

class RemoteUserRequestWrapper extends HttpServletRequestWrapper {String userCode;RemoteUserRequestWrapper(HttpServletRequest request) {super(request);this.userCode = (String) request.getSession().getAttribute(org.apache.commons.lang3.StringUtils.isBlank(sessionKeyName)?DEFAULT_SESSION_KEY_NAME:sessionKeyName);}@Overridepublic String getRemoteUser() {return userCode;}}

Spring Session缓存在redis里的数据

SpringSession怎么通过Redis统计在线用户数量

这个ssoLoginUser key是自己登录时候设置的,根据业务修改,经过测试,在登出系统时候,session设置过期获取removeAttribute不能清redis里的key数据,所以只能在登出系统逻辑加上:

Set<String> keys = RedisUtils.redisTemplate.keys("spring:session:sessions:*");for(String key : keys){if(key.indexOf("expires")==-1){String s = (String)RedisUtils.redisTemplate.opsForHash().get(key, "sessionAttr:ssoLoginUser");if(request.getRemoteUser().equals(s)) {logger.info("loginusername:{}",s)RedisUtils.redisTemplate.opsForHash().delete(key, "sessionAttr:ssoLoginUser");}}}

进行数据统计:

  List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();  List<Map<String,Object>> data = new ArrayList<Map<String, Object>>();  Set<String> keys = redisTemplate.keys("spring:session:sessions:*");  for(String key : keys){      if(key.indexOf("expires")==-1){          String s = (String)redisTemplate.opsForHash().get(key, "sessionAttr:ssoLoginUser");          if(StringUtils.isNotBlank(s)) {              System.out.println(s);              Map<String,Object> map = new HashMap<String,Object>(16);              map.put("usercode", s);              list.add(map);          }      }  }  return list;

pom.xml:

<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId><version>1.2.2.RELEASE</version><type>pom</type></dependency><dependency><groupId>biz.paluch.redis</groupId><artifactId>lettuce</artifactId><version>3.5.0.Final</version></dependency>

RedisUtils.java:

package com.common.utils.redis;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.WEB.context.ContextLoader;import org.springframework.web.context.WebApplicationContext;import java.util.Collection;import java.util.List;import java.util.Map;import java.util.concurrent.TimeUnit;public class RedisUtils {private RedisUtils() {}@SuppressWarnings("unchecked")public static RedisTemplate<String, Object> redisTemplate =ContextLoader.getCurrentWebApplicationContext().getBean(RedisTemplate.class);public static boolean expire(final String key, final long timeout) {return expire(key, timeout, TimeUnit.SECONDS);}public static boolean expire(final String key, final long timeout, final TimeUnit unit) {Boolean ret = redisTemplate.expire(key, timeout, unit);return ret != null && ret;}public static boolean del(final String key) {redisTemplate.delete(key);return true;}public static long del(final Collection<String> keys) {redisTemplate.delete(keys);return 0;}public static void set(final String key, final Object value) {redisTemplate.opsForValue().set(key, value, 1, TimeUnit.MINUTES);}// 存储普通对象操作public static void set(final String key, final Object value, final long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);}public static Object get(final String key) {return redisTemplate.opsForValue().get(key);}// 存储Hash操作public static void hPut(final String key, final String hKey, final Object value) {redisTemplate.opsForHash().put(key, hKey, value);}public static void hPutAll(final String key, final Map<String, Object> values) {redisTemplate.opsForHash().putAll(key, values);}public static Object hGet(final String key, final String hKey) {return redisTemplate.opsForHash().get(key, hKey);}public static List<Object> hMultiGet(final String key, final Collection<Object> hKeys) {return redisTemplate.opsForHash().multiGet(key, hKeys);}// 存储Set相关操作public static long sSet(final String key, final Object... values) {Long count = redisTemplate.opsForSet().add(key, values);return count == null ? 0 : count;}public static long sDel(final String key, final Object... values) {Long count = redisTemplate.opsForSet().remove(key, values);return count == null ? 0 : count;}// 存储List相关操作public static long lPush(final String key, final Object value) {Long count = redisTemplate.opsForList().rightPush(key, value);return count == null ? 0 : count;}public static long lPushAll(final String key, final Collection<Object> values) {Long count = redisTemplate.opsForList().rightPushAll(key, values);return count == null ? 0 : count;}public static long lPushAll(final String key, final Object... values) {Long count = redisTemplate.opsForList().rightPushAll(key, values);return count == null ? 0 : count;}public static List<Object> lGet(final String key, final int start, final int end) {return redisTemplate.opsForList().range(key, start, end);}}

以上就是关于“SpringSession怎么通过Redis统计在线用户数量”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: SpringSession怎么通过Redis统计在线用户数量

本文链接: https://lsjlt.com/news/355802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringSession怎么通过Redis统计在线用户数量
    这篇“SpringSession怎么通过Redis统计在线用户数量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring...
    99+
    2023-07-05
  • SpringSession通过Redis统计在线用户数量的实现代码
    最近遇到一个比较紧急的任务,要求统计在线用户,目的是配合性能测评,要求证明自己系统的在线用户能够达标,不过系统因为历史原因,并没有这个功能,所以只能去springSession官网和网上搜资料,想到通过统计Redis里缓...
    99+
    2023-04-07
    Redis在线用户数量 SpringSession Redis在线用户
  • 怎么在SpringBoot中使用Redis统计在线用户信息
    怎么在SpringBoot中使用Redis统计在线用户信息?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot是什么springboot一种全新的...
    99+
    2023-06-14
  • SpringBoot使用Redis的zset统计在线用户信息
    目录在线用户统计的实现 基于数据库实现 基于Redis实现 Redis的Zset Zset的部分操作 一个示例 在线用户服务的实现 实现思路 使用示例内存消耗分析 最后 统计在线用户...
    99+
    2024-04-02
  • Redis中怎么统计独立用户访问量
    Redis中怎么统计独立用户访问量,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用Hash哈希是Redis的一种基础数据结构,Redis...
    99+
    2024-04-02
  • 利用Redis统计网站在线活跃用户的方法
    前言 在工作中我们经常遇到这样的需求,要对某个在线网站的活跃用户数量进行统计。这里我们以redis为例,说明一下其实现的过程。 实现方法 在Redis中存在bitmap这种数据类型,这种数据类型是建立在s...
    99+
    2022-06-04
    在线 活跃 方法
  • redis如何通过位图法记录在线用户的状态
    这篇文章给大家分享的是有关redis如何通过位图法记录在线用户的状态的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言在进入今天的主题前,先简单地解释下Redis中的位图到底是什...
    99+
    2024-04-02
  • Redis中怎么用setbit统计活跃用户
    这篇文章主要讲解了“Redis中怎么用setbit统计活跃用户”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中怎么用setbit统计活跃用户”吧!...
    99+
    2024-04-02
  • java web监听器统计在线用户及人数
    在线用户使用HttpSessionListener监听器统计  每当一个session会话建立  在线用户人数+1每当一个session会话销毁 在线用户人数-1使用ServletRequestListener监听器统计...
    99+
    2023-05-31
    java 统计 人数
  • 怎么在Oracle中对用户中表的数据量进行统计
    怎么在Oracle中对用户中表的数据量进行统计?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。要想统计用户下所有表的数据量,可以查看user_t...
    99+
    2024-04-02
  • 100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
    ...
    99+
    2021-01-03
    100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
  • 怎么在Andorid中通过URL获取用户头像
    怎么在Andorid中通过URL获取用户头像?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。设置布局属性:<ImageView android:s...
    99+
    2023-05-31
    android
  • Kali Linux中怎么通过命令行管理系统用户
    在Kali Linux中,可以通过命令行工具来管理系统用户。以下是一些常用的命令: 新建用户:使用命令sudo adduser ...
    99+
    2024-04-02
  • 怎么通过DISM检查Win10系统中文件夹数量
    这篇文章主要介绍了怎么通过DISM检查Win10系统中文件夹数量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过DIS检查Win10系统当中文件夹数量的方法步骤首先挂载Wi...
    99+
    2023-06-10
  • 怎么在Linux中统计一个进程的线程数
    本篇内容介绍了“怎么在Linux中统计一个进程的线程数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:我正在运行一个程序,它在运行时会派...
    99+
    2023-06-16
  • Linux系统中怎么通过引导进入单用户模式
    本篇内容主要讲解“Linux系统中怎么通过引导进入单用户模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中怎么通过引导进入单用户模式”吧!熟知在linux进入单用户模式的方法(s...
    99+
    2023-06-12
  • 怎么在linux系统中通过awk查看ip连接数
    今天就跟大家聊聊有关怎么在linux系统中通过awk查看ip连接数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作...
    99+
    2023-06-07
  • ajax中怎么通过设置async校验用户名是否存在
    ajax中怎么通过设置async校验用户名是否存在,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。//检验手机号码是否存在 fu...
    99+
    2024-04-02
  • 怎么用python统计文件类型及数量
    要统计文件类型及数量,你可以使用Python的os模块来遍历文件夹中的文件,然后使用文件的后缀来判断文件类型。以下是一个示例代码: ...
    99+
    2023-10-21
    python
  • 怎么在Java中使用线程计算数组和
    怎么在Java中使用线程计算数组和?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码一:五个线程交替累加计算数组之和,这种方法其实不如单线程直接累加快,因为交替累加需要前一...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作