在Redis中缓存用户Token的推荐方法

在Redis中缓存用户Token的推荐方法

推荐使用字符串(String)数据结构

字符串数据结构在Redis中用于存储简单的键值对,是最基本的数据类型。由于Token本质上是键(用户ID或会话ID)和值(Token字符串)的映射,字符串类型非常适合这一用途。

演示代码:

import redis.clients.jedis.Jedis; // 导入Jedis类,用于操作Redis
import redis.clients.jedis.exceptions.JedisException; // 导入Jedis异常类

public class TokenCacheExample {
    private final Jedis jedis; // 创建一个Jedis对象用于Redis操作

    public TokenCacheExample(String host, int port) {
        try {
            jedis = new Jedis(host, port); // 尝试创建一个Jedis实例连接到指定的Redis服务器
        } catch (JedisException e) {
            throw new RuntimeException("Could not connect to Redis", e); // 如果连接失败,抛出运行时异常
        }
    }

    // 缓存用户的Token
    public void cacheToken(String userId, String token) {
        try {
            jedis.set(userId, token); // 使用Jedis的set方法将Token缓存到Redis
            // 设置Token过期时间,例如1小时
            jedis.expire(userId, 3600); // 使用Jedis的expire方法为Token设置过期时间
        } catch (JedisException e) {
            System.err.println("Error caching token: " + e.getMessage()); // 如果发生异常,打印错误信息
        }
    }

    // 从Redis获取用户的Token
    public String getToken(String userId) {
        try {
            return jedis.get(userId); // 使用Jedis的get方法从Redis获取Token
        } catch (JedisException e) {
            System.err.println("Error retrieving token: " + e.getMessage()); // 如果发生异常,打印错误信息
            return null; // 返回null
        }
    }

    // 删除用户的Token
    public void removeToken(String userId) {
        try {
            jedis.del(userId); // 使用Jedis的del方法从Redis删除Token
        } catch (JedisException e) {
            System.err.println("Error removing token: " + e.getMessage()); // 如果发生异常,打印错误信息
        }
    }

    // 查看Redis的内存使用情况
    public void viewMemoryUsage() {
        try {
            // 获取内存使用信息
            String memoryInfo = jedis.info("memory"); // 使用Jedis的info方法获取Redis的内存使用信息
            System.out.println(memoryInfo); // 打印内存使用信息
        } catch (JedisException e) {
            System.err.println("Error viewing memory usage: " + e.getMessage()); // 如果发生异常,打印错误信息
        }
    }

    // 关闭Redis连接
    public void close() {
        jedis.close(); // 使用Jedis的close方法关闭与Redis的连接
    }

    public static void main(String[] args) {
        TokenCacheExample tokenCache = new TokenCacheExample("localhost", 6379); // 创建TokenCacheExample实例,连接到本地的Redis服务器

        // 缓存Token
        tokenCache.cacheToken("123", "token_value_here"); // 缓存一个用户的Token

        // 从Redis获取Token
        String token = tokenCache.getToken("123"); // 从Redis获取刚才缓存的Token
        System.out.println("Cached Token: " + token); // 打印获取到的Token

        // 查看Redis的内存使用情况
        tokenCache.viewMemoryUsage(); // 打印Redis的内存使用情况

        // 删除Token
        tokenCache.removeToken("123"); // 从Redis删除这个用户的Token

        // 关闭Redis连接
        tokenCache.close(); // 关闭与Redis的连接
    }
}
  • 数据在redis中的存储情况
Redis数据库
|
└── keyspace (假设所有的键都存储在默认的db 0中)
    |
    └── "123" (用户ID作为键)
        |
        └── Value: "token_value_here" (Token字符串作为值)
127.0.0.1:6379> GET 123
"token_value_here"

使用string类型与使用Hash类型的对比表格

数据结构类型Redis命令Java方法存储结构示例
字符串(String)SET, EXPIRE, GETjedis.set, jedis.expire, jedis.get"123" => "token_value_here" (用户ID: “123”, Token: "token_value)
哈希(Hash)HSET, HGETjedis.hset, jedis.hgetuser_tokens:123 => {token => "token_value", issue_time => "1632800400"}
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值