Redis緩存工具類

package org.easyrec.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;

import java.util.List;

@Component
public class RedisCacheUtil {

    private static Logger logger = LoggerFactory.getLogger(RedisCacheUtil.class);

    private volatile static RedisCacheUtil redisCacheUtil;

    private static JedisPool jedisPool;


    private RedisCacheUtil() {

        jedisPool = JedisUtils.getJedisCluster();

    }

    /**
     * 創建RedisCacheUtil類對象
     * @return
     */
    public static RedisCacheUtil getInstance() {

        if(redisCacheUtil == null) {
            redisCacheUtil = new RedisCacheUtil();
        }

        return redisCacheUtil;
    }


    /**
     * 通過key值來獲取該key值所對應的value
     * @param key
     * @return String
     */
    public String get(String key) {

        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();

            String result = jedis.get(key);

            return result;
        }catch (Exception e){
            logger.error("=== 讀取redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return null;
    }


    /**
     * 向redis中插入key和對應的value
     * @param key
     * @param value
     * @return String
     */
    public String set(String key, String value) {

        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();

            String result = jedis.set(key, value);

            return result;
        }catch (Exception e){
            logger.error("=== 存入redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return null;
    }


    /**
     * 向redis中插入key和追加對應的value
     * @param key
     * @param value
     * @return
     */
    public Long lpush(String key, String value) {

        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();

            Long lpush = jedis.lpush(key, value);

            return lpush;
        }catch (Exception e){
            logger.error("=== 存入redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return null;
    }

    /**
     * 獲取管道
     * @return
     */
    public void getPipeline(String key, String value) {

        Jedis jedis = null;
        Pipeline pipelined=null;
        try {
            jedis = jedisPool.getResource();

             pipelined = jedis.pipelined();
             pipelined.lpush(key, value);
        }catch (Exception e){
            logger.error("=== 存入redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            if(pipelined!=null){
                pipelined.sync();
            }
            returnToPool(jedis);

        }
    }

    /**
     * 從右邊彈出數據
     * @param key
     * @return
     */
    public String rpop(String key) {

        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();

            String result = jedis.rpop(key);

            return result;
        }catch (Exception e){
            logger.error("=== 讀取redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return null;
    }

    /**
     * 獲取list中所有的數據
     * @param key
     * @return
     */
    public List lrange (String key) {

        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();

            List<String> stringList = jedis.lrange(key, 0, -1);

            return stringList;
        }catch (Exception e){
            logger.error("=== 讀取redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return null;
    }
    /**
     * 讀取redis中list的元素個數
     * @param key
     * @return
     */
    public long listCount(String key) {

        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();

            Long llen = jedis.llen(key);

            return llen;
        }catch (Exception e){
            logger.error("=== 讀取redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return 0;
    }


    /**
     * 通過hash值和key值查詢value
     * @param hkey
     * @param key
     * @return String
     */
    public String hget(String hkey, String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            String result = jedis.hget(hkey, key);
            return result;
        }catch (Exception e){
            logger.error("=== 讀取redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }

        return null;
    }



    /**
     * 向radis中插入hash值,key值和value
     * @param hkey
     * @param key
     * @param value
     * @return Long
     */
    public long hset(String hkey, String key, String value) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            Long result = jedis.hset(hkey, key, value);
            return result;
        }catch (Exception e){
            logger.error("=== redis數據插入失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return -1;
    }



    /**
     * 作用:對value加一 計數器
     * @param key
     * @return Long
     */
    public long incr(String key) {
        Jedis jedis = null;

        try {

            jedis = jedisPool.getResource();
            Long result = jedis.incr(key);
            return result;
        }catch (Exception e){
            logger.error("=== value加一失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return -1;
    }

    /**
     * 設置key的存在時間
     * @param key
     * @param second
     * @return Long
     */
    public long expire(String key, int second) {
        Jedis jedis = null;

        try {

            jedis = jedisPool.getResource();
            Long result = jedis.expire(key, second);
            return result;
        }catch (Exception e){
            logger.error("=== 設置key的存在時間失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return -1;
    }

    /**
     * 顯示key的剩餘過期時間
     * @param key
     * @return Long
     */
    public long ttl(String key) {
        Jedis jedis = null;

        try {

            jedis = jedisPool.getResource();
            Long result = jedis.ttl(key);
            return result;
        }catch (Exception e){
            logger.error("=== 查詢key的剩餘時間失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return -1;
    }

    /**
     * 通過key刪除數據
     * @param key
     * @return Long
     */
    public Long del(String key) {
        Jedis jedis = null;

        try {
            jedis = jedisPool.getResource();
            Long result = jedis.del(key);
            return result;
        }catch (Exception e){
            logger.error("=== 刪除redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return null;

    }

    /**
     * 通過hash值和key值刪除數據
     * @param hkey
     * @param key
     * @return Long
     */
    public long hdel(String hkey, String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            Long result = jedis.hdel(hkey, key);
            return result;
        }catch (Exception e){
            logger.error("=== 刪除redis緩存失敗 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return -1;
    }

    /**
     * 判斷key是否存在
     * @param key
     * @return Boolean
     */
    public Boolean exists(String key) {
        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();
            Boolean result = jedis.exists(key);
            return result;
        }catch (Exception e){
            logger.error("=== 無法查詢該key值是否存在 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return false;
    }

    /**
     * 查詢redis中key值爲輸入key值的數據有幾條
     * @param keys
     * @return Long
     */
    public Long exists(String... keys) {
        Jedis jedis = null;

        try {

            jedis = jedisPool.getResource();
            Long result = jedis.exists(keys);
            return result;
        }catch (Exception e){
            logger.error("=== 無法查詢數據數量 ===");
            e.printStackTrace();
        }finally {
            returnToPool(jedis);
        }
        return null;
    }


    private void returnToPool(Jedis jedis) {
        if(jedis != null) {
            jedis.close();
        }
    }


}

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