Runnable放到redis里
时间: 2023-07-06 20:34:15 浏览: 165
可以将 `Runnable` 对象序列化之后存储到 Redis 中。具体步骤如下:
1. 将 `Runnable` 对象序列化成字节数组,可以使用 Java 自带的 `ObjectOutputStream` 类。
2. 将序列化后的字节数组存储到 Redis 中,可以使用 Redis 的 `set` 命令。
3. 从 Redis 中取出字节数组,可以使用 Redis 的 `get` 命令。
4. 将字节数组反序列化成 `Runnable` 对象,可以使用 Java 自带的 `ObjectInputStream` 类。
下面是一个简单的示例代码:
```java
import redis.clients.jedis.Jedis;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class RedisExample {
public static void main(String[] args) throws Exception {
// 连接 Redis
Jedis jedis = new Jedis("localhost");
// 创建一个 Runnable 对象
Runnable runnable = () -> System.out.println("Hello, World!");
// 序列化 Runnable 对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(runnable);
byte[] bytes = baos.toByteArray();
// 存储到 Redis
jedis.set("myKey", bytes);
// 从 Redis 中取出字节数组
bytes = jedis.get("myKey");
// 反序列化成 Runnable 对象
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
runnable = (Runnable) ois.readObject();
// 执行 Runnable 对象
runnable.run();
}
}
```
需要注意的是,存储到 Redis 中的字节数组可能会比较大,因此需要考虑 Redis 的内存限制。同时,反序列化时需要确保反序列化的字节数组是由同一个 JVM 序列化得到的,否则可能会出现 `ClassNotFoundException` 或 `InvalidClassException` 等异常。
阅读全文