最全Redis工具類

類結構圖:
在這裏插入圖片描述

BaseJedisHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 抽象 Jedis 共有方法
 */
public abstract class BaseJedisHandler implements Constants {

    /**
     * jedis 連接池
     */
    private static JedisPool jedisPool;

    BaseJedisHandler() {
    }

    static {

        JedisPoolConfig config = new JedisPoolConfig();

        /*
         * 控制一個 pool 可分配多少個 jedis 實例,通過 pool.getResource() 來獲取
         *
         * 如果賦值爲-1,則表示不限制
         *
         * 如果 pool 已經分配了 maxActive 個 jedis 實例,則此時pool的狀態爲exhausted(耗盡)
         */
        config.setMaxTotal(500);

        /*
         * 控制一個 pool 最多有多少個狀態爲 idle(空閒的) 的 jedis 實例。
         */
        config.setMaxIdle(5);

        /*
         * 表示當 borrow(引入) 一個 jedis 實例時,最大的等待時間,如果超過等待時間,則直接拋出 JedisConnectionException
         */
        config.setMaxWaitMillis(100_1000);

        /*
         * 在 borrow 一個 jedis 實例時,是否提前進行 validate 操作
         *
         * 如果爲true,則得到的 jedis 實例均是可用的
         */
        config.setTestOnBorrow(true);


        /* redis如果設置了密碼 */
        // jedisPool = new JedisPool(config, "localhost", 6379, 10000, "password");

        /* redis未設置了密碼 */
        jedisPool = new JedisPool(config, "localhost", 6379);
    }

    /**
     * 從jedis連接池中獲取獲取jedis對象
     *
     * @return Jedis 對象
     */
    Jedis getJedis() {
        return jedisPool.getResource();
    }

    /**
     * 回收 jedis( 放到finally中 )
     *
     * @param jedis 待回收的Jedis
     */
    void returnJedis(Jedis jedis) {
        if (null != jedis) {
            jedis.close();
        }
    }

    /**
     * 獲取 StringsHandler
     *
     * @return StringsHandler
     */
    public static StringsHandler newStringsInstance() {
        return StringsHandler.getInstance();
    }

    /**
     * 獲取 JedisHandler
     *
     * @return JedisHandler
     */
    public static HashHandler newHashHandler() {
        return HashHandler.getInstance();
    }

    /**
     * 獲取 KeyHandler
     *
     * @return KeyHandler
     */
    public static KeyHandler newKeyHandler() {
        return KeyHandler.getInstance();
    }

    /**
     * 獲取 ListsHandler
     *
     * @return ListsHandler
     */
    public static ListsHandler newListsHandler() {
        return ListsHandler.getInstance();
    }

    /**
     * 獲取 ListsHandler
     *
     * @return ListsHandler
     */
    public static SetsHandler newSetsHandler() {
        return SetsHandler.getInstance();
    }

}

KeyHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
import redis.clients.util.SafeEncoder;

import java.util.List;
import java.util.Set;

/**
 * Key Handler
 */
class KeyHandler extends BaseJedisHandler {

    private static final KeyHandler INSTANCE = new KeyHandler();

    public static KeyHandler getInstance() {
        return INSTANCE;
    }

    /**
     * Delete all the keys of all the existing databases
     */
    public String flushAll() {
        Jedis jedis = getJedis();

        try {
            return jedis.flushAll();
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Atomically renames the key oldKey to newKey.<p>
     * <p>
     * If the source and destination name are the same an error is returned.
     * <p>
     * If newkey already exists it is overwritten.
     *
     * @param oldKey old key
     * @param newKey new key
     * @return status
     */
    public String rename(String oldKey, String newKey) {
        return rename(SafeEncoder.encode(oldKey), SafeEncoder.encode(newKey));
    }

    /**
     * Rename oldKey into newKey but fails if the destination key newKey already exists.
     *
     * @param oldKey old key
     * @param newKey new key
     * @return status
     */
    public long renamenx(String oldKey, String newKey) {
        Jedis jedis = getJedis();

        try {
            return jedis.renamenx(oldKey, newKey);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Atomically renames the key oldKey to newKey
     *
     * @param oldKey old key
     * @param newKey new key
     * @return status
     */
    public String rename(byte[] oldKey, byte[] newKey) {
        Jedis jedis = getJedis();
        String status = jedis.rename(oldKey, newKey);
        returnJedis(jedis);
        return status;
    }

    /**
     * Set a default timeout on the specified key
     *
     * @param key Key
     * @return result
     */
    public long expire(String key) {
        return expire(key, EXPIRE);
    }

    /**
     * Set a timeout on the specified key
     *
     * @param key     Key
     * @param seconds second, -1 : no expired
     * @return result
     */
    public long expire(String key, int seconds) {
        Jedis jedis = getJedis();
        try {
            return jedis.expire(key, seconds);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * expire at timestamp (UTC)
     *
     * @param key       Key
     * @param timestamp long
     * @return result
     */
    public long expireAt(String key, long timestamp) {
        Jedis jedis = getJedis();

        try {
            return jedis.expireAt(key, timestamp);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * returns the remaining time to live in seconds
     *
     * @param key Key
     * @return time to live in seconds
     */
    public long ttl(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.ttl(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Undo a expire at turning the expire key into a normal key.(no expire)
     *
     * @param key Key
     * @return result
     */
    public long persist(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.persist(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the specified keys.
     *
     * @param keys keys to removed
     * @return returns the number of keys removed
     */
    public long del(String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.del(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the specified keys.
     *
     * @param keys keys to removed
     * @return returns the number of keys removed
     */
    public long del(byte[]... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.del(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Test if the specified key exists.
     *
     * @param key Key
     * @return The command returns true if the key exists, otherwise false is returned.
     */
    public boolean exists(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.exists(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Sort the elements contained in the List, Set, or Sorted Set value at key.
     *
     * @param key Key
     * @return the list of numbers ordered from the smallest to the biggest number.
     */
    public List<String> sort(String key) {
        Jedis sjedis = getJedis();

        try {
            return sjedis.sort(key);
        } finally {
            returnJedis(sjedis);
        }
    }

    /**
     * Sort a Set or a List accordingly to the specified parameters.
     *
     * @param key               Key
     * @param sortingParameters 定義排序類型或limit的起止位置.
     * @return List<String> a list of sorted elements.
     **/
    public List<String> sort(String key, SortingParams sortingParameters) {
        Jedis jedis = getJedis();

        try {
            return jedis.sort(key, sortingParameters);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the type of the value stored at key in form of a string.
     * <p>
     * The type can be one of "none", "string", "list", "set".
     * <p>
     * "none" is returned if the key does not exist.
     *
     * @param key Key
     * @return String string|list|set|set|hash
     **/
    public String type(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.type(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Returns all the keys matching the glob-style pattern
     *
     * @param pattern pattern
     * @return Multi bulk reply
     */
    public Set<String> keys(String pattern) {
        Jedis jedis = getJedis();

        try {
            return jedis.keys(pattern);
        } finally {
            returnJedis(jedis);
        }
    }

}

StringsHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;
import redis.clients.util.SafeEncoder;

import java.util.List;

/**
 * Strings Handler
 */
public class StringsHandler extends BaseJedisHandler {

    private static final StringsHandler INSTANCE = new StringsHandler();

    public static StringsHandler getInstance() {
        return INSTANCE;
    }

    /**
     * Get the value of the specified key.
     *
     * @param key Key
     * @return Value
     */
    public String get(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.get(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Get the value of the specified key.
     *
     * @param key Key
     * @return Value
     */
    public byte[] get(byte[] key) {
        Jedis jedis = getJedis();

        try {
            return jedis.get(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * The command is exactly equivalent to the following group of commands: SET + EXPIRE. The operation is atomic.
     *
     * @param key     Key
     * @param seconds 過期時間,以秒爲單位
     * @param value   Value
     * @return Status code
     */
    public String setEx(String key, int seconds, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.setex(key, seconds, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * The command is exactly equivalent to the following group of commands: SET + EXPIRE. The operation is atomic.
     *
     * @param key     Key
     * @param seconds 過期時間,以秒爲單位
     * @param value   Value
     * @return Status code
     */
    public String setEx(byte[] key, int seconds, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.setex(key, seconds, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * if the key already exists no operation is performed
     *
     * @param key   Key
     * @param value Value
     * @return 1 if the key was set 0 if the key was not set
     */
    public long setnx(String key, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.setnx(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the string value as value of the key. The string can't be longer than 1073741824 bytes (1 GB).
     *
     * @param key   Key
     * @param value Value
     * @return Status code
     */
    public String set(String key, String value) {
        return set(SafeEncoder.encode(key), SafeEncoder.encode(value));
    }

    /**
     * Set the string value as value of the key. The string can't be longer than 1073741824 bytes (1 GB).
     *
     * @param key   Key
     * @param value Value
     * @return Status code
     */
    public String set(String key, byte[] value) {
        return set(SafeEncoder.encode(key), value);
    }

    /**
     * Set the string value as value of the key. The string can't be longer than 1073741824 bytes (1 GB).
     *
     * @param key   Key
     * @param value Value
     * @return Status code
     */
    public String set(byte[] key, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.set(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 從指定位置開始插入數據,插入的數據會覆蓋指定位置以後的數據<br/>
     * <p>
     * 例:String str1="123456789";<br/>
     * <p>
     * 對str1操作後setRange(key,4,0000),str1="123400009";
     *
     * @param key    Key
     * @param offset offset
     * @param value  value
     * @return long value的長度
     */
    public long setRange(String key, long offset, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.setrange(key, offset, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * If the key already exists and is a string, this command appends the provided value at the end of the string.
     * <p>
     * If the key does not exist it is created and set as an empty string
     *
     * @param key   Key
     * @param value Value
     * @return specifically the total length of the string after the append operation.
     **/
    public long append(String key, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.append(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 將key對應的value減去指定的值,只有value可以轉爲數字時該方法纔可用
     *
     * @param key    Key
     * @param number 要減去的值
     * @return the new value of key after the increment.
     */
    public long decrBy(String key, long number) {
        Jedis jedis = getJedis();

        try {
            return jedis.decrBy(key, number);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 將key對應的value加上指定的值,只有value可以轉爲數字時該方法纔可用
     * <p>
     * ( 可以作爲獲取唯一id的方法 )
     *
     * @param key    Key
     * @param number 要減去的值
     * @return the new value of key after the increment.
     */
    public long incrBy(String key, long number) {
        Jedis jedis = getJedis();

        try {
            return jedis.incrBy(key, number);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 對指定key對應的value進行截取
     *
     * @param key         Key
     * @param startOffset 開始位置(包含)
     * @param endOffset   結束位置(包含)
     * @return String 截取的值
     */
    public String getrange(String key, long startOffset, long endOffset) {
        Jedis jedis = getJedis();

        try {
            return jedis.getrange(key, startOffset, endOffset);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * GETSET is an atomic set this value and return the old value command.
     * <p>
     * Set key to the string value and return the old value stored at key.
     *
     * @param key   Key
     * @param value Value
     * @return return the old value
     */
    public String getSet(String key, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.getSet(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Get the values of all the specified keys.
     *
     * @param keys Keys
     * @return 值的集合
     */
    public List<String> mget(String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.mget(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the the respective keys to the respective values.
     *
     * @param keysvalues 例:keysvalues="key1","value1","key2","value2";
     * @return Status code reply Basically +OK as MSET can't fail
     */
    public String mset(String... keysvalues) {
        Jedis jedis = getJedis();

        try {
            return jedis.mset(keysvalues);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 獲取key對應的值的長度
     *
     * @param key Key
     * @return value值得長度
     */
    public long strlen(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.strlen(key);
        } finally {
            returnJedis(jedis);
        }
    }

}

HashHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Hash Handler
 */
public class HashHandler extends BaseJedisHandler {

    private static final HashHandler INSTANCE = new HashHandler();

    public static HashHandler getInstance() {
        return INSTANCE;
    }


    /**
     * Remove the specified field from an hash stored at key.
     *
     * @param key   Key
     * @param field 存儲的名字
     * @return 狀態碼,1成功,0失敗
     */
    public long hdel(String key, String field) {
        Jedis jedis = getJedis();

        try {
            return jedis.hdel(key, field);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Test for existence of a specified field in a hash.
     *
     * @param key   Key
     * @param field 存儲的名字
     * @return Return true if the hash stored at key contains the specified field. Return false if the key is not found or the field is not present.
     */
    public boolean hexists(String key, String field) {
        Jedis jedis = getJedis();

        try {
            return jedis.hexists(key, field);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * If key holds a hash, retrieve the value associated to the specified field.
     * <p>
     * If the field is not found or the key does not exist, a special 'nil' value is returned.
     *
     * @param key   Key
     * @param field Field
     * @return the value associated to the specified field.
     */
    public String hget(String key, String field) {
        Jedis jedis = getJedis();

        try {
            return jedis.hget(key, field);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * If key holds a hash, retrieve the value associated to the specified field.
     * <p>
     * If the field is not found or the key does not exist, a special 'nil' value is returned.
     *
     * @param key   Key
     * @param field Field
     * @return the value associated to the specified field.
     */
    public byte[] hget(byte[] key, byte[] field) {
        Jedis jedis = getJedis();

        try {
            return jedis.hget(key, field);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return all the fields and associated values in a hash.
     *
     * @param key Key
     * @return Map<String, String>
     */
    public Map<String, String> hgetAll(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.hgetAll(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the specified hash field to the specified value.
     * <p>
     * If key does not exist, a new key holding a hash is created.
     *
     * @param key   Key
     * @param field Field
     * @param value Value
     * @return If the field already exists, and the HSET just produced an update of the value, 0 is returned, otherwise if a new field is created 1 is returned.
     **/
    public long hset(String key, String field, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.hset(key, field, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the specified hash field to the specified value.
     * <p>
     * If key does not exist, a new key holding a hash is created.
     *
     * @param key   Key
     * @param field Field
     * @param value Value
     * @return If the field already exists, and the HSET just produced an update of the value, 0 is returned, otherwise if a new field is created 1 is returned.
     */
    public long hset(String key, String field, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.hset(key.getBytes(), field.getBytes(), value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the specified hash field to the specified value if the field not exists.
     *
     * @param key   Key
     * @param field Field
     * @param value Value
     * @return If the field already exists, 0 is returned, otherwise if a new field is created 1 is returned.
     **/
    public long hsetnx(String key, String field, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.hsetnx(key, field, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return all the values in a hash.
     *
     * @param key Key
     * @return All the fields values contained into a hash.
     */
    public List<String> hvals(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.hvals(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Increment the number stored at field in the hash at key by value.
     *
     * @param key   Key
     * @param field Field
     * @param value 要增加的值,可以是負數
     * @return The new value at field after the increment operation.
     */
    public long hincrby(String key, String field, long value) {
        Jedis jedis = getJedis();

        try {
            return jedis.hincrBy(key, field, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return all the fields in a hash.
     *
     * @param key Key
     * @return All the fields names contained into a hash.
     */
    public Set<String> hkeys(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.hkeys(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the number of items in a hash.
     *
     * @param key Key
     * @return The number of entries (fields) contained in the hash stored at key. If the specified key does not exist, 0 is returned assuming an empty hash.
     */
    public long hlen(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.hlen(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Retrieve the values associated to the specified fields.
     *
     * @param key    Key
     * @param fields 存儲位置
     * @return Multi Bulk Reply specifically a list of all the values associated with the specified fields, in the same order of the request.
     */
    public List<String> hmget(String key, String... fields) {
        Jedis jedis = getJedis();

        try {
            return jedis.hmget(key, fields);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Retrieve the values associated to the specified fields.
     *
     * @param key    Key
     * @param fields 存儲位置
     * @return Multi Bulk Reply specifically a list of all the values associated with the specified fields, in the same order of the request.
     */
    public List<byte[]> hmget(byte[] key, byte[]... fields) {
        Jedis jedis = getJedis();

        try {
            return jedis.hmget(key, fields);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the respective fields to the respective values. HMSET replaces old values with new values.
     * <p>
     * If key does not exist, a new key holding a hash is created.
     *
     * @param key Key
     * @param map 對應關係
     * @return Return OK or Exception if hash is empty
     */
    public String hmset(String key, Map<String, String> map) {
        Jedis jedis = getJedis();

        try {
            return jedis.hmset(key, map);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set the respective fields to the respective values. HMSET replaces old values with new values.
     * <p>
     * If key does not exist, a new key holding a hash is created.
     *
     * @param key Key
     * @param map 對應關係
     * @return Return OK or Exception if hash is empty
     */
    public String hmset(byte[] key, Map<byte[], byte[]> map) {
        Jedis jedis = getJedis();

        try {
            return jedis.hmset(key, map);
        } finally {
            returnJedis(jedis);
        }
    }

}

ListsHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.ListPosition;
import redis.clients.util.SafeEncoder;

import java.util.List;

/**
 * Lists Handler
 */
public class ListsHandler extends BaseJedisHandler {

    private static final ListsHandler INSTANCE = new ListsHandler();

    public static ListsHandler getInstance() {
        return INSTANCE;
    }

    /**
     * Return the length of the list stored at the specified key.
     *
     * @param key Key
     * @return The length of the list.
     */
    public long llen(byte[] key) {
        Jedis jedis = getJedis();

        try {
            return jedis.llen(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the length of the list stored at the specified key.
     *
     * @param key Key
     * @return The length of the list.
     */
    public long llen(String key) {
        return llen(SafeEncoder.encode(key));
    }


    /**
     * Set a new value as the element at index position of the List at key.
     *
     * @param key   Key
     * @param index 位置
     * @param value 值
     * @return Status code
     */
    public String lset(byte[] key, int index, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.lset(key, index, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Set a new value as the element at index position of the List at key.
     *
     * @param key   Key
     * @param index 位置
     * @param value 值
     * @return Status code
     */
    public String lset(String key, int index, String value) {
        return lset(SafeEncoder.encode(key), index, SafeEncoder.encode(value));
    }

    /**
     * 在指定位置插入記錄
     *
     * @param key   Key
     * @param where 前面插入或後面插入
     * @param pivot 相對位置的內容
     * @param value 插入的內容
     * @return 記錄總數
     */
    public long linsert(byte[] key, ListPosition where, byte[] pivot, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.linsert(key, where, pivot, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 在value的相對位置插入記錄
     *
     * @param key   Key
     * @param where 前面插入或後面插入
     * @param pivot 相對位置的內容
     * @param value 插入的內容
     * @return 記錄總數
     */
    public long linsert(String key, ListPosition where, String pivot, String value) {
        return linsert(SafeEncoder.encode(key), where, SafeEncoder.encode(pivot), SafeEncoder.encode(value));
    }

    /**
     * 獲取List中指定位置的值
     *
     * @param key   Key
     * @param index 位置
     * @return 值
     **/
    public byte[] lindex(byte[] key, int index) {
        Jedis jedis = getJedis();

        try {
            return jedis.lindex(key, index);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 獲取List中指定位置的值
     *
     * @param key   Key
     * @param index 位置
     * @return 值
     **/
    public String lindex(String key, int index) {
        return SafeEncoder.encode(lindex(SafeEncoder.encode(key), index));
    }

    /**
     * Atomically return and remove the first (LPOP) element of the list.
     *
     * @param key Key
     * @return 移出的記錄
     */
    public byte[] lpop(byte[] key) {
        Jedis jedis = getJedis();

        try {
            return jedis.lpop(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Atomically return and remove the first (LPOP) element of the list.
     *
     * @param key Key
     * @return 移出的記錄
     */
    public String lpop(String key) {
        return SafeEncoder.encode(lpop(SafeEncoder.encode(key)));
    }


    /**
     * Atomically return and remove the last (RPOP) element of the list.
     *
     * @param key Key
     * @return 移出的記錄
     */
    public String rpop(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.rpop(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the string value to the head (LPUSH) of the list stored at key.
     *
     * @param key   Key
     * @param value Value
     * @return 記錄總數
     */
    public long rpush(byte[] key, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.rpush(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the string value to the head (LPUSH) of the list stored at key.
     *
     * @param key   Key
     * @param value Value
     * @return 記錄總數
     */
    public long rpush(String key, String value) {
        Jedis jedis = getJedis();

        try {
            return jedis.rpush(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the string value to the tail (RPUSH) of the list stored at key.
     *
     * @param key   Key
     * @param value Value
     * @return 記錄總數
     */
    public long lpush(byte[] key, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.lpush(key, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the string value to the tail (RPUSH) of the list stored at key.
     *
     * @param key   Key
     * @param value Value
     * @return 記錄總數
     */
    public long lpush(String key, String value) {
        return lpush(SafeEncoder.encode(key), SafeEncoder.encode(value));
    }


    /**
     * Return the specified elements of the list stored at the specified key.
     *
     * @param key   key
     * @param start start
     * @param end   end
     * @return List
     */
    public List<String> lrange(String key, long start, long end) {
        Jedis jedis = getJedis();

        try {
            return jedis.lrange(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the specified elements of the list stored at the specified key.
     *
     * @param key   key
     * @param start start
     * @param end   end
     * @return List
     */
    public List<byte[]> lrange(byte[] key, int start, int end) {
        Jedis jedis = getJedis();

        try {
            return jedis.lrange(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the first count occurrences of the value element from the list.
     *
     * @param key   Key
     * @param count 要刪除的數量,如果爲負數則從List的尾部檢查並刪除符合的記錄
     * @param value 要匹配的值
     * @return 刪除後的List中的記錄數
     */
    public long lrem(byte[] key, int count, byte[] value) {
        Jedis jedis = getJedis();

        try {
            return jedis.lrem(key, count, value);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the first count occurrences of the value element from the list.
     *
     * @param key   Key
     * @param count 要刪除的數量,如果爲負數則從List的尾部檢查並刪除符合的記錄
     * @param value 要匹配的值
     * @return 刪除後的List中的記錄數
     */
    public long lrem(String key, int count, String value) {
        return lrem(SafeEncoder.encode(key), count, SafeEncoder.encode(value));
    }

    /**
     * Trim an existing list so that it will contain only the specified range of elements specified.
     *
     * @param key   Key
     * @param start 記錄的開始位置(0表示第一條記錄)
     * @param end   記錄的結束位置(如果爲-1則表示最後一個,-2,-3以此類推)
     * @return Status code
     */
    public String ltrim(byte[] key, int start, int end) {
        Jedis jedis = getJedis();

        try {
            return jedis.ltrim(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Trim an existing list so that it will contain only the specified range of elements specified.
     *
     * @param key   Key
     * @param start 記錄的開始位置(0表示第一條記錄)
     * @param end   記錄的結束位置(如果爲-1則表示最後一個,-2,-3以此類推)
     * @return Status code
     */
    public String ltrim(String key, int start, int end) {
        return ltrim(SafeEncoder.encode(key), start, end);
    }

}

SetsHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * Set Handler
 */
public class SetsHandler extends BaseJedisHandler {

    private static final SetsHandler INSTANCE = new SetsHandler();

    public static SetsHandler getInstance() {
        return INSTANCE;
    }

    /**
     * Add the specified member to the set value stored at key
     *
     * @param key    Key
     * @param member Member
     * @return status, 0 or 1
     */
    public long sadd(String key, String... member) {
        Jedis jedis = getJedis();

        try {
            return jedis.sadd(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the specified member to the set value stored at key
     *
     * @param key    Key
     * @param member Member
     * @return status, 0 or 1
     */
    public long sadd(byte[] key, byte[] member) {
        Jedis jedis = getJedis();

        try {
            return jedis.sadd(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the set cardinality (number of elements)
     *
     * @param key Key
     * @return the cardinality (number of elements) of the set as an integer.
     */
    public long scard(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.scard(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the difference between the Set stored at key1 and all the Sets key2, ..., keyN
     *
     * @param keys keys
     * @return the members of a set resulting from the difference between the first set provided and all the successive sets.
     */
    public Set<String> sdiff(String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.sdiff(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * This command works exactly like SDIFF but instead of being returned the resulting set is stored in dstKey.
     *
     * @param dstKey 新結果集的key
     * @param keys   比較的集合
     * @return 新集合中的記錄數
     **/
    public long sdiffstore(String dstKey, String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.sdiffstore(dstKey, keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the members of a set resulting from the intersection of all the sets hold at the specified keys.
     *
     * @param keys Keys
     * @return Multi bulk reply, specifically the list of common elements.
     **/
    public Set<String> sinter(String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.sinter(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * This command works exactly like SINTER but instead of being returned the resulting set is stored as dstkey.
     *
     * @param dstkey 新結果集的key
     * @param keys   比較的集合
     * @return 新集合中的記錄數
     **/
    public long sinterstore(String dstkey, String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.sinterstore(dstkey, keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return true if member is a member of the set stored at key, otherwise false is returned.
     *
     * @param key    Key
     * @param member member
     * @return Return true if member is a member of the set stored at key, otherwise false is returned.
     **/
    public boolean sismember(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.sismember(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return all the members (elements) of the set value stored at key. This is just syntax glue for SINTER.
     *
     * @param key Key
     * @return Multi bulk reply
     */
    public Set<String> smembers(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.smembers(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return all the members (elements) of the set value stored at key. This is just syntax glue for SINTER.
     *
     * @param key Key
     * @return Multi bulk reply
     */
    public Set<byte[]> smembers(byte[] key) {
        Jedis jedis = getJedis();

        try {
            return jedis.smembers(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Move the specified member from the set at srcKey to the set at dstKey.
     *
     * @param srcKey srcKey
     * @param dstKey dstKey
     * @param member member
     * @return 1 if the element was moved 0 if the element was not found on the first set and no operation was performed
     */
    public long smove(String srcKey, String dstKey, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.smove(srcKey, dstKey, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove a random element from a Set returning it as return value.
     *
     * @param key Key
     * @return If the Set is empty or the key does not exist, a nil object is returned.
     */
    public String spop(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.spop(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the specified member from the set value stored at key.
     * <p>
     * If member was not a member of the set no operation is performed.
     * <p>
     * If key does not hold a set value an error is returned.
     *
     * @param key    key
     * @param member member
     * @return 1 if the new element was removed 0 if the new element was not a member of the set
     */
    public long srem(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.srem(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the members of a set resulting from the union of all the sets hold at the specified keys.
     *
     * @param keys keys
     * @return Multi bulk reply, specifically the list of common elements.
     */
    public Set<String> sunion(String... keys) {
        Jedis jedis = getJedis();

        try {
            return jedis.sunion(keys);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * This command works exactly like SUNION but instead of being returned the resulting set is stored as dstKey.
     * <p>
     * Any existing value in dstKey will be over-written.
     *
     * @param dstKey dstKey
     * @param keys   keys
     * @return status code
     */
    public long sunionstore(String dstKey, String... keys) {
        Jedis jedis = getJedis();
        long s = jedis.sunionstore(dstKey, keys);
        returnJedis(jedis);
        return s;
    }
}

SortSetHandler

package com.wj.redis;

import redis.clients.jedis.Jedis;

import java.util.Map;
import java.util.Set;

/**
 * SortSet Handler
 */
public class SortSetHandler extends BaseJedisHandler {

    /**
     * Add the specified member having the specified score to the sorted set stored at key.
     *
     * @param key    Key
     * @param score  權重
     * @param member member
     * @return 1 if the new element was added 0 if the element was already a member of the sorted set and the score was updated
     */
    public long zadd(String key, double score, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zadd(key, score, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Add the specified member having the specified score to the sorted set stored at key.
     *
     * @param key          Key
     * @param scoreMembers member-權重
     * @return 1 if the new element was added 0 if the element was already a member of the sorted set and the score was updated
     */
    public long zadd(String key, Map<String, Double> scoreMembers) {
        Jedis jedis = getJedis();

        try {
            return jedis.zadd(key, scoreMembers);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the sorted set cardinality (number of elements).
     *
     * @param key key
     * @return the cardinality (number of elements) of the set as an integer.
     */
    public long zcard(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.zcard(key);
        } finally {
            returnJedis(jedis);
        }
    }


    /**
     * 獲取指定權重區間內集合的數量
     *
     * @param key key
     * @param min 最小排序位置
     * @param max 最大排序位置
     */
    public long zcount(String key, double min, double max) {
        Jedis jedis = getJedis();

        try {
            return jedis.zcount(key, min, max);
        } finally {
            returnJedis(jedis);
        }
    }


    /**
     * 返回指定位置的集合元素,0爲第一個元素,-1爲最後一個元素
     *
     * @param key   Key
     * @param start 開始位置(包含)
     * @param end   結束位置(包含)
     * @return Set<String>
     */
    public Set<String> zrange(String key, int start, int end) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrange(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * If member already exists in the sorted set adds the increment to its score and updates the position of the element in the sorted set accordingly.
     *
     * @param key    Key
     * @param score  要增的權重
     * @param member 要插入的值
     * @return The new score
     */
    public double zincrby(String key, double score, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zincrby(key, score, member);
        } finally {
            returnJedis(jedis);
        }
    }


    /**
     * Return the all the elements in the sorted set at key with a score between min and max (including elements with score equal to min or max).
     *
     * @param key Key
     * @param min 上限權重
     * @param max 下限權重
     * @return Set<String>
     */
    public Set<String> zrangeByScore(String key, double min, double max) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrangeByScore(key, min, max);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the rank (or index) of member in the sorted set at key, with scores being ordered from low to high.
     *
     * @param key    Key
     * @param member member
     * @return long 位置
     */
    public long zrank(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrank(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the rank (or index) of member in the sorted set at key, with scores being ordered from high to low.
     *
     * @param key    key
     * @param member member
     * @return long 位置
     */
    public long zrevrank(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrevrank(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove the specified member from the sorted set value stored at key.
     *
     * @param key    key
     * @param member member
     * @return 1 if the new element was removed 0 if the new element was not a member of the set
     */
    public long zrem(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrem(key, member);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * delete key
     *
     * @param key key
     * @return status
     */
    public long zrem(String key) {
        Jedis jedis = getJedis();

        try {
            return jedis.del(key);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove all elements in the sorted set at key with rank between start and end.
     *
     * @param key   Key
     * @param start 開始區間,從0開始(包含)
     * @param end   結束區間,-1爲最後一個元素(包含)
     * @return specifically the number of elements removed.
     */
    public long zremrangeByRank(String key, int start, int end) {
        Jedis jedis = getJedis();

        try {
            return jedis.zremrangeByRank(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Remove all the elements in the sorted set at key with a score between min and max
     * <p>
     * (including elements with score equal to min or max).
     *
     * @param key Key
     * @param min 下限權重(包含)
     * @param max 上限權重(包含)
     * @return specifically the number of elements removed.
     */
    public long zremrangeByScore(String key, double min, double max) {
        Jedis jedis = getJedis();

        try {
            return jedis.zremrangeByScore(key, min, max);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * 獲取給定區間的元素,原始按照權重由高到低排序
     *
     * @param key   Key
     * @param start 開始區間,從0開始(包含)
     * @param end   結束區間,-1爲最後一個元素(包含)
     * @return Set<String>
     */
    public Set<String> zrevrange(String key, int start, int end) {
        Jedis jedis = getJedis();

        try {
            return jedis.zrevrange(key, start, end);
        } finally {
            returnJedis(jedis);
        }
    }

    /**
     * Return the score of the specified element of the sorted set at key.
     * <p>
     * If the specified element does not exist in the sorted set, or the key does not exist at all, a special 'nil' value is returned.
     *
     * @param key    Key
     * @param member member
     * @return double 權重
     */
    public double zscore(String key, String member) {
        Jedis jedis = getJedis();

        try {
            return jedis.zscore(key, member);
        } finally {
            returnJedis(jedis);
        }
    }
}

用法實例

package com.wj.test;

import com.wj.redis.HashHandler;
import com.wj.redis.BaseJedisHandler;
import com.wj.redis.StringsHandler;
import org.junit.Test;

/**
 * Jedis Util demo
 */
public class JedisUtilTest {

    @Test
    public void test() {
        StringsHandler stringsHandler = BaseJedisHandler.newStringsInstance();
        stringsHandler.set("nnn", "nnnn");
        System.out.println("-----" + stringsHandler.get("nnn"));

        HashHandler hashHandler = BaseJedisHandler.newHashHandler();
        hashHandler.hset("hashKey", "field_hash", "field_value");
        System.out.println(hashHandler.hget("hashKey", "field_hash"));
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章