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();
}
}
}
Redis緩存工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.