Jedis 如何在Redis中将java对象用作值

Jedis 如何在Redis中将java对象用作值,jedis,Jedis,我是Redis的新手 我下载了绝地武士并将其添加到我的类路径中。但是,它没有提供一种将java对象存储为“值”的方法 是我遗漏了什么,还是Jedis没有提供将java对象存储为值的方法 谢谢, -Venkat没有直接的方法-只能通过序列化和存储结果字节数组来实现。如果您想使用弹簧,请参考 将java对象存储为值不是redis的工作方式,尽管您可以使用序列化来完成所需的工作 见绝地开发人员的回答: 使用基于Redis的Java框架,您可以轻松实现: RBucket bucket=redisson.

我是Redis的新手

我下载了绝地武士并将其添加到我的类路径中。但是,它没有提供一种将java对象存储为“值”的方法

是我遗漏了什么,还是Jedis没有提供将java对象存储为值的方法

谢谢,
-Venkat没有直接的方法-只能通过序列化和存储结果字节数组来实现。如果您想使用弹簧,请参考

将java对象存储为值不是redis的工作方式,尽管您可以使用序列化来完成所需的工作

见绝地开发人员的回答:

使用基于Redis的Java框架,您可以轻松实现:

RBucket bucket=redisson.getBucket(“anyObject”);
//设置对象
set(newanyobject());
//得到一个物体
AnyObject myObject=bucket.get();
//支持一些有用的功能,如:
bucket.trySet(对象);
bucket.compareAndSet(旧对象、新对象);
AnyObject prevObject=bucket.getAndSet(新的AnyObject());
它处理序列化并维护内部连接池,所以当您每次需要向Redis发送对象时,都不需要处理它。Redisson为你做这件事。使用Redis就像使用Java对象一样

它支持许多流行的编解码器(
Jackson-JSON
Avro
Smile
CBOR
MsgPack
Kryo
FST
LZ4
Snappy
JDK序列化


DISCLAMER:我是Redisson的首席开发人员,正如上面所说,没有直接的方法,但您可以自己实现(下面的示例使用fastjson进行序列化,您可以自己选择):

publicstatict putObject(字符串键、T值、int expiretimescs){
如果(呼气时间小于0){
抛出新的IllegalArgumentException(String.format(“非法expireTimeSecs=%s”,expireTimeSecs));
}
试试看(绝地武士=POOL.getResource()){
字符串代码;
如果(expireTimeSecs==0){
code=jedis.set(key,JSON.toJSONString(value));
}否则{
code=jedis.setex(key,expiretimescs,JSON.toJSONString(value));
}
如果(!“OK”。相等信号情况(代码)){
抛出新缓存异常(“将对象放入redis失败!”);
}
}
返回值;
}
公共静态T putObject(字符串键,T值){
返回putObject(键,值,0);
}
公共静态T getObject(字符串键,类clazz){
试试看(绝地武士=POOL.getResource()){
返回JSON.parseObject(jedis.get(key),clazz);
}
}
公共静态对象getObject(字符串键){
试试看(绝地武士=POOL.getResource()){
返回JSON.parse(jedis.get(key));
}
}

在redis中没有直接的方法将Java对象存储为值,但是可以将Java对象存储为byte[],并使用ByteBuffer将对象转换为byte[]数组

如果对象具有数值,这甚至可以用来减少redis上的内存使用

// Allocating 9 bytes  
ByteBuffer buffer = ByteBuffer.allocate(9);  

// Storing first row: Hour > Minute > Count  
buffer.put((byte) 12);  
buffer.put((byte) 01);  
buffer.put((byte) 10);  




String key = "k";  

Jedis jedis = new Jedis("127.0.0.1");  
jedis.set(key.getBytes(), buffer.array());  
要获取应用程序中由TeBuffer存储的值并构造存储的实际值,请执行以下操作:

byte [] value= jedis.get(key.getBytes());  
        ByteBuffer valueBuffer = ByteBuffer.wrap(value);  

        System.out.println(valueBuffer.get()+","+valueBuffer.get()+","+valueBuffer.get());    

请在此处阅读更多信息:

如果对象是第三方和非第三方,该怎么办serializable@User3在这种情况下,您必须从第三方对象提取数据并将其复制回您的类型。您还可以使用ByteBuffer在Java中进行转换,而不是将ByteBuffer转换为byte[]要从redis存储/获取的数组。对于要由redisson序列化的java对象,该类是否应定义为可序列化?还是我们应该做类似的事情?另外,我不完全理解编解码器的支持。Radisson是否为我提供了配置序列化模式的选项(Avro或Kyro等)?@AnirudhJayakumar对于某些编解码器对象应实现可序列化,而对于其他对象则不应实现可序列化。下面是一组受支持的编解码器。您可以通过
config.setCodec
方法定义编解码器您应该制作一个disclamer,说明您是Redison的创始人和首席开发人员我们应该在Redis中使用store database connection java对象吗?
// Allocating 9 bytes  
ByteBuffer buffer = ByteBuffer.allocate(9);  

// Storing first row: Hour > Minute > Count  
buffer.put((byte) 12);  
buffer.put((byte) 01);  
buffer.put((byte) 10);  




String key = "k";  

Jedis jedis = new Jedis("127.0.0.1");  
jedis.set(key.getBytes(), buffer.array());  
byte [] value= jedis.get(key.getBytes());  
        ByteBuffer valueBuffer = ByteBuffer.wrap(value);  

        System.out.println(valueBuffer.get()+","+valueBuffer.get()+","+valueBuffer.get());