Jedis操作Redis--String類型


/**
 * String(字符串)
 * APPEND,BITCOUNT,BITOP,BITFIELD,DECR,DECRBY,GET,GETBIT,GETRANGE,GETSET,INCR,INCRBY,INCRBYFLOAT,MGET,MSET,MSETNX,PSETEX,SET,SETBIT,SETEX,SETNX,SETRANGE,STRLEN
 */
public class StringTypeTest {
    private Jedis jedis;

    private static final String KEY = "name";

    private static final String VALUE = "layman";

    @Before
    public void setUp() {
        JedisShardInfo info = new JedisShardInfo("192.168.133.188", 6379);
        this.jedis = new Jedis(info);
        jedis.select(0);
    }

    /**
     * SET key value [EX seconds] [PX milliseconds] [NX|XX]
     * 將字符串值 value 關聯到 key 。
     * 如果 key 已經持有其他值, SET 就覆寫舊值,無視類型。
     * 對於某個原本帶有生存時間(TTL)的鍵來說, 當 SET 命令成功在這個鍵上執行時, 這個鍵原有的 TTL 將被清除。
     * 可選參數
     * 從 Redis 2.6.12 版本開始, SET 命令的行為可以通過一系列參數來修改:
     * EX second :設置鍵的過期時間為 second 秒。 SET key value EX second 效果等同於 SETEX key second value 。
     * PX millisecond :設置鍵的過期時間為 millisecond 毫秒。 SET key value PX millisecond 效果等同於 PSETEX key millisecond value 。
     * NX :只在鍵不存在時,才對鍵進行設置操作。 SET key value NX 效果等同於 SETNX key value 。
     * XX :只在鍵已經存在時,才對鍵進行設置操作。
     */
    @Test
    public void SET() {
        //設置不存在key為name時設置其值為layman並在15秒后過期
        jedis.set(KEY, VALUE, "NX", "EX", 15);
        out(jedis.get(KEY));
    }

    /**
     * MSET key value [key value ...]  MGET key [key ...]返回所有(一個或多個)給定 key 的值。如果給定的key里面,有某個key不存在,那么這個key返回特殊值nil 。因此,該命令永不失敗。
     * 同時設置一個或多個 key-value 對。
     * 如果某個給定 key 已經存在,那么 MSET 會用新值覆蓋原來的舊值,如果這不是你所希望的效果,請考慮使用 MSETNX 命令:它只會在所有給定 key 都不存在的情況下進行設置操作。
     * MSET 是一個原子性(atomic)操作,所有給定 key 都會在同一時間內被設置,某些給定 key 被更新而另一些給定 key 沒有改變的情況,不可能發生。
     */
    @Test
    public void MSET() {
        jedis.mset("name", "layman", "age", "24");
        out(jedis.mget("name", "age"));
    }

    /**
     * GET key
     * 返回 key 所關聯的字符串值。
     * 如果 key 不存在那么返回特殊值 nil 。
     * 假如 key 儲存的值不是字符串類型,返回一個錯誤,因為 GET 只能用於處理字符串值。
     */
    @Test
    public void GET() {
        out(jedis.get(KEY));
    }

    /**
     * GETSET key value
     * 將給定 key 的值設為 value ,並返回 key 的舊值(old value)。
     * 當 key 存在但不是字符串類型時,返回一個錯誤。
     */
    @Test
    public void GETSET() {
        SET();
        out(jedis.getSet(KEY, "leo"));
        GET();
    }

    /**
     * APPEND key value
     * 如果 key 已經存在並且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
     * 如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。
     */
    @Test
    public void APPEND() {
        SET();
        jedis.append("name", "APPEND");
        GET();
    }

    /**
     * SETBIT key offset value
     * 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
     * 位的設置或清除取決於 value 參數,可以是 0 也可以是 1 。
     * 當 key 不存在時,自動生成一個新的字符串值。
     * 字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。
     * offset 參數必須大於或等於 0 ,小於 2^32 (bit 映射被限制在 512 MB 之內)。
     */
    @Test
    public void SETBIT() {
        jedis.setbit(KEY, 2l, true);
        BITCOUNT();
    }

    /**
     * BITCOUNT key [start] [end]
     * 計算給定字符串中,被設置為 1 的比特位的數量。
     * 一般情況下,給定的整個字符串都會被進行計數,通過指定額外的 start 或 end 參數,可以讓計數只在特定的位上進行。
     * start 和 end 參數的設置和 GETRANGE 命令類似,都可以使用負數值: 比如 -1 表示最后一個字節, -2 表示倒數第二個字節,以此類推。
     * 不存在的 key 被當成是空字符串來處理,因此對一個不存在的 key 進行 BITCOUNT 操作,結果為 0 。
     */
    @Test
    public void BITCOUNT() {
        out(jedis.bitcount(KEY));
    }

    /**
     * SETRANGE key offset value
     * 用 value 參數覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始。
     * 不存在的 key 當作空白字符串處理。
     * SETRANGE 命令會確保字符串足夠長以便將 value 設置在指定的偏移量上,
     * 如果給定key原來儲存的字符串長度比偏移量小(比如字符串只有 5 個字符長,但你設置的 offset 是 10 ),
     * 那么原字符和偏移量之間的空白將用零字節(zerobytes, "\x00" )來填充。
     */
    @Test
    public void SETRANGE() {
        SET();
        jedis.setrange(KEY, 4L, "leo");
        GET();
        /** 結果
         *  layman
         *  laymleo
         */
    }

    /**
     * GETRANGE key start end
     * 返回 key 中字符串值的子字符串,字符串的截取范圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。
     * 負數偏移量表示從字符串最后開始計數, -1 表示最后一個字符, -2 表示倒數第二個,以此類推。
     */
    @Test
    public void GETRANGE() {
        SET();
        out(jedis.getrange(KEY, 2, -3));
    }

    /**
     * 返回 key 所儲存的字符串值的長度。
     */
    @Test
    public void STRLEN() {
        SET();
        out(jedis.strlen(KEY));
    }

    /**
     * INCR key
     * 將 key 中儲存的數字值增一。
     * 如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。
     * 如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
     */
    @Test
    public void INCR() {
        jedis.incr(KEY);
        GET();
    }

    /**
     * INCRBY key increment     INCRBYFLOAT key increment
     * 將 key 所儲存的值加上增量 increment 。
     * 如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCRBY 命令。
     * 如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
     */
    @Test
    public void INCRBY() {
        jedis.incrBy(KEY, 24);
        GET();
        jedis.incrByFloat(KEY, 0.22225);
        GET();
    }

    private void out(Object msg) {
        System.out.println(msg);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM