2012-03-06 15 views

risposta

3

Non ci sono mezzi diretti - può essere fatto solo tramite serializzazione e memorizzare risultante byte-array. Pls si riferisce a http://static.springsource.org/spring-data/redis/docs/1.0.x/api/org/springframework/data/redis/serializer/package-summary.html se si desidera utilizzare la molla.

Acclamazioni Muthu

+2

E se la l'oggetto è di terze parti e non serializzabile – User3

+0

@ User3 in questo caso, devi estrarre i dati da tale oggetto di terze parti e copiarlo nel tuo tipo – asgs

4

Si può facilmente farlo con Redis framework basato per Java - Redisson:

RBucket<AnyObject> bucket = redisson.getBucket("anyObject"); 
// set an object 
bucket.set(new AnyObject()); 
// get an object 
AnyObject myObject = bucket.get(); 

// supports some useful functions like: 
bucket.trySet(object); 
bucket.compareAndSet(oldObject, newObject); 
AnyObject prevObject = bucket.getAndSet(new AnyObject()); 

Gestisce la serializzazione e lavorare con connessione in modo non lo fai è necessario gestirlo ogni volta che è necessario inviare un oggetto a Redis. Redisson lo fa per te. Lavora con Redis mentre lavoravi con gli oggetti Java.

Supporta molti codec popolari (Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy e JDK Serialization).

+0

Per gli oggetti java essere serializzati da redisson, se la classe deve essere definita come serializzabile ? O dovremmo fare qualcosa di simile? Inoltre, non capisco completamente il supporto del codec. Radisson mi offre un'opzione per configurare la modalità di serializzazione (Avro o Kyro, ecc.)? –

+1

@AnirudhJayakumar Per alcuni codec l'oggetto dovrebbe implementare Serializable e non dovrebbe per gli altri. Ecco una [lista completa] (https://github.com/redisson/redisson/wiki/4.-data-serialization) dei codec supportati. È possibile definire il codec tramite il metodo 'config.setCodec' –

0

Come si dice in precedenza, non v'è alcun modo diretto per farlo, ma è possibile implementare la vostra auto (nell'esempio qui sotto uso fastjson fare serializzazione, si poteva scegliere uno voi stessi):

public static <T extends Serializable> T putObject(String key, T value, int expireTimeSecs) { 
    if (expireTimeSecs < 0) { 
     throw new IllegalArgumentException(String.format("Illegal expireTimeSecs = %s", expireTimeSecs)); 
    } 
    try (Jedis jedis = POOL.getResource()) { 
     String code; 
     if (expireTimeSecs == 0) { 
      code = jedis.set(key, JSON.toJSONString(value)); 
     } else { 
      code = jedis.setex(key, expireTimeSecs, JSON.toJSONString(value)); 
     } 
     if (!"OK".equalsIgnoreCase(code)) { 
      throw new CacheException("Put object to redis failed!"); 
     } 
    } 
    return value; 
} 

public static <T extends Serializable> T putObject(String key, T value) { 
    return putObject(key, value, 0); 
} 


public static <T extends Serializable> T getObject(String key, Class<T> clazz) { 
    try (Jedis jedis = POOL.getResource()) { 
     return JSON.parseObject(jedis.get(key), clazz); 
    } 
} 

public static Object getObject(String key) { 
    try (Jedis jedis = POOL.getResource()) { 
     return JSON.parse(jedis.get(key)); 
    } 
} 
Problemi correlati