1. 程式人生 > >jedis set 的四個過載方法

jedis set 的四個過載方法

方法定義如下:

1、String    set(String key, String value)
2、String    set(String key, String value, String nxxx) 
3、String    set(String key, String value, String nxxx, String expx, int time) 
4、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。

1、把key、value set到redis中,隱含覆蓋,預設的ttl是-1(永不過期)

2、根據第三個引數,把key、value set到redis中     nx : not exists, 只有key 不存在時才把key value set 到redis     xx : is exists ,只有 key 存在是,才把key value set 到redis   3、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 的最後兩個過載方法,其實是一樣的,(猜測:1、expx 引數是px的時候,使用long型別的引數,可以表示更多時間; 2、滿足使用習慣long型別表示毫秒)    最後,返回值String,如果寫入成功是“OK”,寫入失敗返回空(在nxxx的時候,也是)