用redis做超时判断 感觉写的很有意思

public Long getSessionIdByUserId(Long systemId, Long customerUserId) {    if (customerUserId == null) {        LoggerHelper.info(this.getClass(), "custom user id is null.");        return DEFAULT_SESSION_ID;    }

    Long sessionId = getSessionId(String.valueOf(customerUserId));   ------判断这用户是否有session的记录    if (sessionId == null) {                                                                --------创建一条新的记录放入数据库 同时反馈出sessionid        QuerySession session = new QuerySession(systemId, customerUserId);            querySessionDao.save(session);

        sessionId = session.getId();    }

    putSessionId(String.valueOf(customerUserId), sessionId, SESSION_EXPIRE_MINUTES);      -----------比较意思的地方,把sessionid和超时时间放入redis

    return sessionId;}

放入redis
private void putSessionId(String userName, Long sessionId, int expireAfterMinutes) {    if (userName == null || sessionId == null) {        return;    }    ValueData valueData = new ValueData(sessionId, System.currentTimeMillis() + expireAfterMinutes * 60 * 1000);   --------创建一条记录 sessionid 和 超时的时间点    redisTemplate.boundHashOps(QUERY_SESSION_KEY).put(userName, valueData);}
之后取redis判断函数
private Long getSessionId(String userName) {    ValueData value = (ValueData) redisTemplate.boundHashOps(QUERY_SESSION_KEY).get(userName);    if (value == null) {        return null;    }    // check if expire    if (System.currentTimeMillis() > expireTimeMillion) {               --------------验证是否过了这个时间点~~~
        redisTemplate.boundHashOps(QUERY_SESSION_KEY).delete(userName);        return null;    } else {        return value.sessionId;    }}

模拟的超时请求~~~
				
时间: 2024-08-06 00:05:55

用redis做超时判断 感觉写的很有意思的相关文章

推荐一篇关于java 学习的文章,感觉写的很不错

---恢复内容开始---    很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!     要想学好Java,首先要知道Java的大致分类.我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三块:J2SE,J2ME和J2EE, 这也就是SunONE(OpenNetEnvironment)体系.J2SE就是Java2的标准版,主要用于桌面应

记一次对以redis做缓存,异步写mysql的系统做性能测试经验

1.性能指标最好根据当前生产所需来定,性能优化无止境,定的太高,劳民伤财 2.tps必定是平稳的,可能会有抖动打的情况,但是逐步下降或者一段时间(如15分钟以上的)的逐步下降再平稳必定有原因,需要细究分析,一般都有优化空间. 之前遇到过逐步下降30分钟之后才维稳的情况,开发觉得不是问题,测试觉得是问题,后面找开发聊了设计细节,写了一个mysql和redis的数据监控脚本,发现缓存和mysql里的数据对不上,数据一致性存在问题,找到了tps下降的原因 所以遇到有分歧的时候,跟开发聊一聊性能测试用例

使用webview如何做超时判断

在加载网页时给一个timer定时器,规定超时时间,然后再超时时间的方法中提示超时 如果没有超时,则在webview协议中的“加载完成”方法中 取消timer定时器 - (void)openWebView { if (timer) { [timer invalidate]; } timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFunction) userInfo:nil

valueForKeyPath的用法(本篇内容是拷贝别人的文章,因为不能转载,又感觉写的很好,所以复制了,希望作者不要见怪)

可能大家对- (id)valueForKeyPath:(NSString *)keyPath方法不是很了解. 其实这个方法非常的强大,举个例子: NSArray *array = @[@"name", @"w", @"aa", @"jimsa"]; NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]); 输出 ( NAME, W

redis做RDB时请求超时case

最近在排查redis做rdb时会有部分请求超时的case.初步判断是我们redis服务器上开启了THP(Transparent Huge Pages). 1) Linux本身的页大小是固定的4KB,在2.6.38内核新增了THP,透明地支持huge page(2MB)的使用,并且默认开启.开启THP的优势在于: - 减少page fault.一次page fault可以加载更大的内存块. - 更小的页表.相同的内存大小,需要更少的页. - 由于页表更小,虚拟地址到物理地址的翻译也更快. 劣势在于

Spring整合Redis做数据缓存(Windows环境)

当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是用java开发的缓存组件,和java结合良好,直接在jvm虚拟机中运行,不需要额外安装什么东西,效率也很高:但是由于和java结合的太紧密了,导致缓存共享麻烦,分布式集群应用不方便,所以比较适合单个部署的应用. Redis需要额外单独安装,是通过socket访问到缓存服务,效率比Ehcache低,但

陈松松:无需懂任何视频制作技术,就能做出让客户感觉专业的视频

每个视频,都是你的金牌业务员 这是我写的第45篇视频营销原创文章 与其搜索十年,不如花一年的时间学习,去赚9年的高薪! 视频是给用户看的,所以制作出来的视频,让客户感觉震撼,感觉专业就可以了,我们的目的是通过视频搞定客户,不是显摆我们的专业的视频制作技术,方法越简单越好. 视频制作非常简单,很多人总以为需要学习专业的视频制作技术,其实不需要哈,我一点点讲解. 一个成品视频制作流程: 1.策划视频 2.收集素材 3.录制视频 4.剪辑视频 5.生成视频 以酿酒设备为例,教你一步步来做! 1.策划视

优雅的处理Redis访问超时

很长一段时间以来,一直在项目中使用Redis作为辅助存储,确切来说是利用Redis的内存存储,而不是将其作为缓存.比如常见的利用Set集合来判断某个数值是否存在,或者将来自不同请求的数据放在Redis中进行拼接然后一起写入MySQL等数据库. 这种存储目的的使用要求对Redis的访问不能失败(如果作为缓存使用,是接受失败的),所以作为存储目的使用代码中要对请求Redis的代码进行异常处理以及重试等. 在最初的代码中采用了最常见的方法如try ... catch ...处理异常,递归进行重试,类似

程序员修神之路--redis做分布式锁可能不那么简单

菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个分布式锁,很简单 不管你基于什么做分布式锁,你觉得很简单吗?来来来 在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已