redis实现在数据处理完成时删除数据
2021/7/4 19:26:24
本文主要是介绍redis实现在数据处理完成时删除数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用背景:
如果存放在redis
使用思路:
在获取
具体操作:
1、构建一个redis工具类
import redis.clients.jedis.Jedis; import java.util.Arrays; public class RedisUtils { static String scriptLoadId; static Jedis queueJedis; private int databaseNum; public RedisUtils(String host, String password, int databaseNum) { this.databaseNum = databaseNum; queueJedis = new Jedis("127.0.0.1", 6379); queueJedis.auth("password!"); queueJedis.select(databaseNum); } public RedisUtils spopAndSadd() { scriptLoadId = queueJedis.scriptLoad( // 把发生数据变更的命令以事务的方式做持久化和主从复制,从而允许在Lua脚本内进行随机写入 "redis.replicate_commands()\n" + "redis.call('select', " + databaseNum + ")\n" + "local ret = redis.call('spop',KEYS[1])\n" + "if type(ret) == 'boolean' then\n" + "\treturn ret\n" + "else\n" + "\tredis.call('sadd',KEYS[2],ret)\n" + "\treturn ret\n" + "end"); return this; } public Object getDataFromRedis(String dataSource, String dataBackup) { /** * 使用redis的Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。 * * 执行该命令需要以下四个参数 * sha1 : 通过 SCRIPT LOAD 生成的 sha1 校验码。 * numkeys: 用于指定键名参数的个数。 * key [key ...]: 键名参数。脚本中使用方法(KEYS[1],KEYS[2]...) * arg [arg ...]: 附加参数。脚本中使用方法(ARGV[1],ARGV[2]...) * * jedis 中原始方法如下 * public Object evalsha(String sha1, int keyCount, String... params) { * 1、判断是否开启了事务或管道 * 2、将参数转化为字节数组,调用connect()构建套接字连接端口,使用RedisOutputStream写入命令给redis * 3、返回执行结果 使用RedisInputStream获取执行结果 * } * * jedis做了封装, keyCount是计算keys 数组的大小, params是由keys、args合并成新的数组 * public Object evalsha(String sha1, List<String> keys, List<String> args) {} */ return queueJedis.evalsha(scriptLoadId, Arrays.asList(dataSource, dataBackup), Arrays.asList("")); } }
2、使用案例
public class Test { public static void main(String[] args) { RedisUtils redisUtils = new RedisUtils("127.0.0.1", "password", 1); Object dataFromRedis = redisUtils.spopAndSadd().getDataFromRedis("dataSource", "dataBackup"); if (dataFromRedis instanceof String) { String text = (String) dataFromRedis; System.out.println("完成" + text + "数据消费"); } else { // 数据使用失败,将数据放回原来的redis中,等待下次使用 redisUtils.spopAndSadd().getDataFromRedis("dataBackup", "dataSource"); } } }
这篇关于redis实现在数据处理完成时删除数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-26阿里云Redis项目实战:新手入门教程
- 2024-09-26阿里云Redis资料入门教程
- 2024-09-25阿里云Redis入门教程:快速掌握Redis的基本操作
- 2024-09-25阿里云Redis学习:新手入门教程
- 2024-09-21Redis资料入门教程:轻松掌握Redis基础知识
- 2024-09-21Redis资料:入门级用户必学教程
- 2024-09-21Redis资料:新手入门教程与实践指南
- 2024-09-20Redis教程:从入门到实践的全面指南
- 2024-09-20Redis教程:初学者快速入门指南
- 2024-09-20Redis教程:新手入门与实践指南