java操作Redis缓存设置过期时间的方法
作者:liuminchao 发布时间:2023-09-12 05:49:09
标签:java,Redis缓存,过期时间
关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间。
在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是:
//生成token
String token = UUID.randomUUID().toString();
//把用户信息写入redis
jedisClient.set(REDIS_USER_SESSION_KEY + ":" + token,JsonUtils.objectToJson(user));
//设置session的过期时间 时间单位是秒
jedisClient.expire(REDIS_USER_SESSION_KEY + ":" + token, 1800);
但这样做可能会出现问题,比如多并发上面,设置值和过期时间用了两步操作。可以将设置值和过期时间合并成一步操作,所以可以使用redis的设置值set的另外一个方法:
// NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒
jedisClient.set(key, value, "NX", "EX", expireSecond);
取值的时候使用:
@Override
public Result getUserByToken(String token) {
//根据token从redis中查询用户信息
String json = jedisClient.get(REDIS_USER_SESSION_KEY + ":" + token);
//判断是否为空
if (StringUtils.isBlank(json)) {
return Result.build(400, "此session已经过期,请重新登录");
}
//更新过期时间
jedisClient.expire(REDIS_USER_SESSION_KEY + ":" + token, 1800);
//返回用户信息
return Result.ok(JsonUtils.jsonToPojo(json, TbUser.class));
}
其他使用方法:
public void save(String key, String value, Long expireSecond) {
boolean keyExist = jedisClient.exists(key);
if (keyExist) {
jedisCluster.del(key);
}
// NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒
jedisClient.set(key, value, "NX", "EX", expireSecond);
}
来源:https://www.cnblogs.com/liuminchao/p/12661663.html


猜你喜欢
- 这篇文章主要介绍了Springboot创建子父工程过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 本文实例讲述了Android实现Service获取当前位置(GPS+基站)的方法。分享给大家供大家参考。具体如下:需求详情:1)、Servi
- 调试的时候,在循环里增加条件判断,可以极大的提高效率,心情也能愉悦。以下介绍下IDEA使用条件【Condition】断点的方法1、编写一段样
- 最近在读刘增辉老师所著的《MyBatis从入门到精通》一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不
- 前言本次主要是实现一个Android应用,实现静态广播、动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此
- https://www.jb51.net/article/152879.htm上节,我们明白了proc文件系统的作用,接下来我们在已经写好的
- 原理简介:zookeeper实现分布式锁的原理就是多个节点同时在一个指定的节点下面创建临时会话顺序节点,谁创建的节点序号最小,谁就获得了锁,
- 前提: 可以参考文章 SpringBoot 接入 SparkSpringBoot 已经接入 Spark已配置 JavaSparkContex
- 本文实例讲述了Java基于swing实现的弹球游戏代码。分享给大家供大家参考。主要功能代码如下:package Game;import ja
- 本文主要学习Java构造器与传值,供大家参考,具体内容如下构造器构造器介绍构造器是Java学习中一个很重要的概念,每个类的对象在使用关键字n
- 概述用Time和Calendar获取系统当前时间(年月日时分秒周几)效果图源码:import android.app.Activity; i
- ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大
- 1. 数据结构分类按照线性和非线性可以将Java数据结构分为两大类:①线性数据结构:数组、链表、栈、队列②非线性数据结构:树、堆、散列表、图
- 前言是否会遇到这样的场景,你向线程池提交了多个任务,你希望这批任务全部完成后能够反向通知你。你可能会使用线程计数的方式,等到计数器累加到提交
- 本文实例讲述了Java基于分治法实现的快速排序算法。分享给大家供大家参考,具体如下:package cn.nwsuaf.quick;/**
- Eclipse的应用需要众多的插件,但是Eclipse的插件大家又知道多少呢?“Eclipse最牛的30个插件”不知道看官们是否了解,51C
- 静态成员变量与非静态成员变量的区别以下面的例子为例说明package cn.galc.test;public class Cat {/**
- C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法Bankers roundi
- 学习编程语言最重要的就是实践。很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践。那么,今天我们一起来动手做
- C#在程序中定义和使用自定义事件可以分为以下几个步骤:步骤1:在类中定义事件using System;public class TestCl