How to solve the problem of storing user tokens in Redis
Redis stores user token
When designing a system similar to e-commerce, a common requirement is that each page needs to carry logged-in user information.
There are two common solutions:
Use cookies to save
Use JWT to save
But if Redis cache is used in the system, then there is a third solution - cache the user token in Redis.
Generate a token when logging in and store it in Redis
//生成一个token对象,保存在redis中
redisTemplate.opsForHash().put("token","user",user);When each page is generated, provide the token
//以JSON字符串形式返回token
@RequestMapping(value = "/getToken",method = RequestMethod.GET)
@ResponseBody
public User getToken(){
User user = (User) redisTemplate.opsForHash().get("token", "user");
return user;
}//发送ajax请求,获取token
function get_token(){
$.ajax({
url:"getToken",
type:"GET",
dataType:"JSON",
success:function(result){
//将返回的用户信息保存在token中
var token = result;
//打印登录用户
console.log(token);
//打印登录用户的id
console.log(token.id);
document.getElementById('username').innerText = "用户名:"+token.username;
}
});
}Delete the token when logging out
//注销
@RequestMapping("/logout")
public String logout(){
redisTemplate.opsForHash().delete("token","user");
return "/login";
}Redis Dealing with token issues
java—Handling tokens based on redis
First of all, make it clear that token: token is a way of processing user information for front-end and back-end interaction after logging in. There are two main types Methods, one is based on session storage, and the other is based on redis storage. This article only discusses user information processing based on redis.
For every information interaction after a user logs in, if user information needs to be passed, especially user IDs and the like, it is obviously unwise to query the database every time. We can Create a space in redis to save user information, and then we will use it from redis every time we need user information.
First create RedisUtil
@Component
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate; //key-value是对象的
//判断是否存在key
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
//从redis中获取值
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
//向redis插入值
public boolean set(final String key, Object value) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//向redis插入值带过期时间 单位:分钟
public boolean set(final String key, Object value, long time) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//redis删除值
public boolean del(final String key) {
return redisTemplate.delete(key);
}
//批量删除某个字段开始的key
public long batchDel(String key) {
Set<String> set = redisTemplate.keys(key + "*");
return redisTemplate.delete(set);
}
}After creating RedisUtil, we need to store the value in redis. At this time, we need to pay attention to the fact that our key needs to be discussed with the front-end in advance, which field name to use, and the current-end When requesting, the key must be passed in the header. The value is encrypted and returned to the front end after the first login. After we get the header information, we need to decrypt the value first and use the value as the key to get the user information.
@Component
public class UserUtil {
@Autowired
private RedisUtil redisUtil;
@Autowired
private HttpServletRequest request;
/**
* 后台管理的登录id
*
* @return
*/
public JsonResult getUser() {
String header = request.getHeader("#与前端约定的统一字段#");
//解密
String decrypt = DESUtil.decrypt(header);
if (!redisUtil.hasKey(decrypt))return JsonResult.error("未登录");
User user = null;
try {
user = (User) redisUtil.get(decrypt);
} catch (Exception e) {
e.printStackTrace();
}
if (decrypt == null) return JsonResult.error("权限不足");
return JsonResult.success(user);
}
}When we need it
JsonResult jsonResult = userUtil.getUser();
if (jsonResult.getCode() != 1) return jsonResult;
//强转成对象。此处不用担心强转失败,因为存入的时候就是对象存储,只不过为了复用,存的是object类型
User user= (User) jsonResult.getData();
return JsonResult.success(#service层#);
}The above is the detailed content of How to solve the problem of storing user tokens in Redis. For more information, please follow other related articles on the PHP Chinese website!
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Redis master-slave replication failure troubleshooting process
Jun 04, 2025 pm 08:51 PM
The steps for troubleshooting and repairing Redis master-slave replication failures include: 1. Check the network connection and use ping or telnet to test connectivity; 2. Check the Redis configuration file to ensure that the replicaof and repl-timeout are set correctly; 3. Check the Redis log file and find error information; 4. If it is a network problem, try to restart the network device or switch the alternate path; 5. If it is a configuration problem, modify the configuration file; 6. If it is a data synchronization problem, use the SLAVEOF command to resync the data.
Quick location and handling of Redis cluster node failures
Jun 04, 2025 pm 08:54 PM
The quick location and processing steps for Redis cluster node failure are as follows: 1. Confirm the fault: Use the CLUSTERNODES command to view the node status. If the fail is displayed, the node will fail. 2. Determine the cause: Check the network, hardware, and configuration. Common problems include memory limits exceeding. 3. Repair and restore: Take measures based on the reasons, such as restarting the service, replacing the hardware or modifying the configuration. 4. Notes: Ensure data consistency, select appropriate failover policies, and establish monitoring and alarm systems.
Methods and strategies to solve the problem of split brain in Redis cluster
Jun 04, 2025 pm 08:42 PM
Effective solutions to the problem of split brain in Redis cluster include: 1) Network configuration optimization to ensure connection stability; 2) Node monitoring and fault detection, real-time monitoring with tools; 3) Failover mechanism, setting high thresholds to avoid multiple master nodes; 4) Data consistency guarantee, using replication function to synchronize data; 5) Manual intervention and recovery, and manual processing if necessary.
Performance comparison and joint application scenarios between Redis and RabbitMQ
Jun 04, 2025 pm 08:45 PM
Redis and RabbitMQ each have their own advantages in performance and joint application scenarios. 1.Redis performs excellently in data reading and writing, with a latency of up to microseconds, suitable for high concurrency scenarios. 2.RabbitMQ focuses on messaging, latency at milliseconds, and supports multi-queue and consumer models. 3. In joint applications, Redis can be used for data storage, RabbitMQ handles asynchronous tasks, and improves system response speed and reliability.
Configuration suggestions for improving Redis persistence performance
Jun 04, 2025 pm 08:48 PM
Methods to improve Redis persistence performance through configuration include: 1. Adjust the save parameters of RDB to reduce the snapshot generation frequency; 2. Set the appendfsync parameter of AOF to everysec; 3. Use AOF and RDB in combination; 4. Use no-appendfsync-on-rewrite parameters to optimize AOF rewrite performance; 5. Enable hybrid persistence mode. These configurations can improve performance while ensuring data security.
Methods to implement data deduplication using Redis sets (Sets)
Jun 04, 2025 pm 08:33 PM
The Redis collection is selected to implement data deduplication because it supports quick insertion and search, and it automatically deduplication. 1) The Redis collection is based on an ordered collection structure without repeat elements, and is suitable for scenarios where quick insertion and query are required. 2) But you need to pay attention to its memory usage, because each element occupies memory. 3) It can be optimized for use through shard storage, regular cleaning and combined with other storage.
How to use PHP combined with AI to achieve text error correction PHP syntax detection and optimization
Jul 25, 2025 pm 08:57 PM
To realize text error correction and syntax optimization with AI, you need to follow the following steps: 1. Select a suitable AI model or API, such as Baidu, Tencent API or open source NLP library; 2. Call the API through PHP's curl or Guzzle and process the return results; 3. Display error correction information in the application and allow users to choose whether to adopt it; 4. Use php-l and PHP_CodeSniffer for syntax detection and code optimization; 5. Continuously collect feedback and update the model or rules to improve the effect. When choosing AIAPI, focus on evaluating accuracy, response speed, price and support for PHP. Code optimization should follow PSR specifications, use cache reasonably, avoid circular queries, review code regularly, and use X
Tools and metrics to monitor the health status of Redis clusters
Jun 04, 2025 pm 08:39 PM
Through tools such as redis-cli, RedisInsight, Prometheus and Grafana, as well as focusing on memory usage, number of connections, cluster node status, data consistency and performance indicators, the health status of the Redis cluster can be effectively monitored.


