jedis

來源:http://www.cnblogs.com/Springmoon-venn/p/10141915.htmlhtml

方法定義以下:redis

1、String    set(String key, String value)
2、String set(String key, String value, String nxxx) 三、String set(String key, String value, String nxxx, String expx, int time) 四、String set(String key, String value, String nxxx, String expx, long time)

功能都是同樣的,「Set the string value as value of the key.」 將string類型的value 放到key的value上,返回值都是 String。spa

一、把key、value set到redis中,隱含覆蓋,默認的ttl是-1(永不過時)code

二、根據第三個參數,把key、value set到redis中
    nx : not exists, 只有key 不存在時才把key value set 到redis
    xx : is exists ,只有 key 存在是,才把key value set 到redis
 
三、4 和2 就相同,只是多加了個過時時間
     expx參數有兩個值可選 :
          ex : seconds 秒
          px :   milliseconds 毫秒
     使用其餘值,拋出 異常 : redis.clients.jedis.exceptions.JedisDataException : ERR syntax error 
    
    第五個參數就比較尷尬了,有兩種可選的值,int 和long 的time,都是過時時間,那有什麼不同呢?
    
    Jedis 類的set 方法中 int和long(第五個參數)重載的方法,方法體基本同樣:
public String set(final String key, final String value, final String nxxx, final String expx, final int time){ checkIsInMultiOrPipeline(); client.set(key, value, nxxx, expx, time) return client.getStatusCodeReply(); } public String set(final String key, final String value, final String nxxx, final String expx, final long time){ checkIsInMultiOrPipeline(); client.set(key, value, nxxx, expx, time) return client.getStatusCodeReply(); }
有什麼不同呢,其餘並無,一路源碼追下去:
    
Jedis 類 --》 Client類 --》 BinaryClient  都是同樣的
 
在BinaryClient 的set 方法中,對 int 和 long 的time參數,作了個 toByteArray(time),操做,打開源碼,發現:
 
public static final byte[] toByteArray(final int value){ return SafeEncoder.encode(StringvalueOf(value)); } public static final byte[] toByteArray(final long value){ return SafeEncoder.encode(StringvalueOf(value)); }

 

無論是int 仍是long,都轉成String了,因此jedis 的最後兩個重載方法,實際上是同樣的,(猜想:一、expx 參數是px的時候,使用long類型的參數,能夠表示更多時間; 二、知足使用習慣long類型表示毫秒)
  
最後,返回值String,若是寫入成功是「OK」,寫入失敗返回空(在nxxx的時候,也是)
相關文章
相關標籤/搜索