RedisService

package com.sprucetec.bone.common.redis;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.util.Pool;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class RedisService {
    @Autowired
    private Pool<Jedis> pool;

    public Pool<Jedis> getPool() {
        return pool;
    }

    /**
     * 判斷指定key是否存在
     *
     * @param key key
     * @return 如果存在,返回true,否則返回false
     */
    public boolean exists(final String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.exists(key);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    //刪除指定的Keys
    public long delete(final String... keys) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.del(keys);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    // 重命名指定的Key,如果參數中的兩個Keys的命令相同,
    // 或者是源Key不存在,該命令都會返回相關的錯誤信息。如果newKey已經存在,則直接覆蓋。
    public String rename(final String oldkey, final String newkey) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.rename(oldkey, newkey);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    // 設置某個key的過期時間(單位:秒),在超過該時間後,Key被自動的刪除。
    // 如果該Key在超時之前被修改,與該鍵關聯的超時將被移除。
    public long expire(final String key, final int seconds) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.expire(key, seconds);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    // #將指定Key的Value原子性的遞增1。如果該Key不存在,其初始值爲0,在incr之後其值爲1,返回遞增後的值。
    public long incrBy(final String key, final long integer) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.incrBy(key, integer);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public long incr(final String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.incr(key);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    // #將指定Key的Value原子性的遞減1。如果該Key不存在,其初始值爲-1,在incr之後其值爲1,返回遞減後的值。

    public long decrBy(final String key, final long integer) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.decrBy(key, integer);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public long decr(final String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.decr(key);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    @SuppressWarnings("unchecked")
    public <T> T getJSONToObject(Class<?> clazz, String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String value = jedis.get(key);
            return (T) JSON.toJavaObject((JSON) JSON.parse(value), clazz);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public String getString(String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.get(key);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    @SuppressWarnings("unchecked")
    public <T> List<T> mget(Class<?> clazz, final String... keys) {
        List<T> list = new ArrayList<T>();
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            List<String> values = jedis.mget(keys);
            for (String value : values) {
                list.add((T) JSON.toJavaObject((JSON) JSON.parse(value), clazz));
            }
            return list;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public <T> String setObjectToJSON(String key, T value) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String str = JSON.toJSONString(value);
            return jedis.set(key, str);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public String set(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.set(key, value);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }


    public <T> String setex(final String key, final int seconds, final T value) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String str = JSON.toJSONString(value);
            return jedis.setex(key, seconds, str);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public <T> String mset(final Map<String, T> map) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String[] keyValues = new String[map.size() * 2];
            int i = 0;
            for (String key : map.keySet()) {
                keyValues[2 * i] = key;
                keyValues[2 * i + 1] = JSON.toJSONString(map.get(key));
                i++;
            }
            return jedis.mset(keyValues);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    // #該命令原子性的完成參數中所有key/value的設置操作,
    // 如果在這一批Keys中有任意一個Key已經存在了,那麼該操作將全部回滾,
    // 即所有的修改都不會生效。
    public <T> Long msetnx(final Map<String, T> map) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String[] keyValues = new String[map.size() * 2];
            int i = 0;
            for (String key : map.keySet()) {
                keyValues[2 * i] = key;
                keyValues[2 * i + 1] = JSON.toJSONString(map.get(key));
                i++;
            }
            return jedis.msetnx(keyValues);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    /**
     * 插入Map類型的某key對應的值
     */
    public int hset(String key, String field, String value) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.hset(key, field, value).intValue();
        } finally {
            if (jedis != null)
                jedis.close();
        }
    }

    /**
     * 查詢Map類型的某key對應的值
     */
    public String hget(String key, String field) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.hget(key, field);
        } finally {
            if (jedis != null)
                jedis.close();
        }
    }

    /**
     * 查詢Map類型的值
     */
    public Map<String, String> hgetAll(String key) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.hgetAll(key);
        } finally {
            if (jedis != null)
                jedis.close();
        }
    }

    /**
     * 刪除hash中的一條記錄
     */
    public long hdel(String hashKey, String taskId) {
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.hdel(hashKey, taskId);
        } finally {
            if (jedis != null)
                jedis.close();
        }
    }

}
發佈了29 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章