要实现 Redis 获取一次缓存后立即删除的原子性操作,可以使用 Redis 的事务 MULTI/EXEC 命令。首先使用 MULTI 命令进入事务模式,然后使用 GET 和 DEL 命令获取并删除缓存,最后使用 EXEC 命令提交事务。以下是 Java 代码示例:

Jedis jedis = new Jedis('localhost');
Transaction tx = jedis.multi();
Response<String> result = tx.get('mykey');
tx.del('mykey');
tx.exec();
String value = result.get();

在上述代码中,使用 Jedis 类连接到 Redis 服务器。然后使用 multi() 方法进入事务模式,使用 get() 方法获取缓存值,并将 del() 方法添加到事务中以删除缓存。最后使用 exec() 方法提交事务。使用 Response 类获取 get() 方法的返回值,即缓存值。

如果在执行 exec() 方法之前调用了 discard() 方法,则事务将被撤销,所有添加到事务中的命令将不会执行。

注意:如果在事务中使用了 watch() 方法监视了某个 key,而在执行 exec() 方法之前该 key 被其他客户端修改,则事务将失败,并返回 null 值。如果需要重试事务,则需要重新调用 multi() 方法进入事务模式。

Java Redis 原子操作: 获取缓存后立即删除 (解决 ERR EXEC without MULTI 错误)

原文地址: https://www.cveoy.top/t/topic/obGY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录