package com.doumee.service.common; 
 | 
  
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.shiro.cache.CacheException; 
 | 
import org.apache.shiro.util.CollectionUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import java.util.*; 
 | 
import java.util.concurrent.TimeUnit; 
 | 
  
 | 
/** 
 | 
 * 缓存代理类,便于缓存变更 
 | 
 * @author  dm 
 | 
 * @since 2025/03/31 16:44 
 | 
 */ 
 | 
@Slf4j 
 | 
@Component 
 | 
public class CacheProxy<K,V> { 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<K, V> redisTemplate; 
 | 
  
 | 
    /** 
 | 
     * 获取缓存值 
 | 
     * 
 | 
     * @param key 缓存键 
 | 
     * @return V 
 | 
     */ 
 | 
    public V get(K key) throws CacheException { 
 | 
        log.trace("CacheProxy: get, key = [" + key + "]"); 
 | 
        if (key == null) { 
 | 
            return null; 
 | 
        } 
 | 
        return redisTemplate.opsForValue().get(key); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取缓存值 
 | 
     * 
 | 
     * @param key 缓存键 
 | 
     * @param value 缓存值 
 | 
     * @return V 
 | 
     */ 
 | 
    public V put(K key, V value) throws CacheException { 
 | 
        log.trace("CacheProxy: put, key = [" + key + "]"); 
 | 
        if (key == null) { 
 | 
            log.warn("CacheProxy: put, key can not be null"); 
 | 
        } 
 | 
        redisTemplate.opsForValue().set(key, value); 
 | 
        return value; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定过期时长 
 | 
     * 
 | 
     * @param key 缓存键 
 | 
     * @param value 缓存值 
 | 
     * @param expire 过期时间(s) 
 | 
     * @return V 
 | 
     */ 
 | 
    public V put(K key, V value, int expire) throws CacheException { 
 | 
        this.put(key, value, expire * 1000L); 
 | 
        return value; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定过期时长 
 | 
     * 
 | 
     * @param key 缓存键 
 | 
     * @param value 缓存值 
 | 
     * @param expire 过期时间(ms) 
 | 
     * @return V 
 | 
     */ 
 | 
    public V put(K key, V value, long expire) throws CacheException { 
 | 
        log.trace("CacheProxy: put, key = [" + key + "]"); 
 | 
        if (key == null) { 
 | 
            log.warn("CacheProxy: put, key can not be null"); 
 | 
        } 
 | 
        redisTemplate.opsForValue().set(key, value, expire, TimeUnit.MILLISECONDS); 
 | 
        return value; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 清理缓存 
 | 
     */ 
 | 
    public void clear() throws CacheException { 
 | 
        log.trace("CacheProxy: clear"); 
 | 
        Set<K> keys = this.keys(); 
 | 
        redisTemplate.delete(keys); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取缓存数 
 | 
     * 
 | 
     * @return int 
 | 
     */ 
 | 
    public int size() { 
 | 
        log.trace("CacheProxy: size"); 
 | 
        return this.keys().size(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取缓存key 
 | 
     *  
 | 
     * @return Set<K> 
 | 
     */ 
 | 
    public Set<K> keys() { 
 | 
        log.trace("CacheProxy: keys"); 
 | 
        Set<K> keys = redisTemplate.keys(null); 
 | 
        if (CollectionUtils.isEmpty(keys)) { 
 | 
            return Collections.emptySet(); 
 | 
        } 
 | 
        return keys; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取缓存key 
 | 
     * 
 | 
     * @param keyPattern 缓存键正则  
 | 
     * @return Set<K> 
 | 
     */ 
 | 
    public Set<K> keys(String keyPattern) { 
 | 
        log.trace("CacheProxy: keys, keyPattern = [" + keyPattern + "]"); 
 | 
        if (keyPattern == null || "".equals(keyPattern) || "*".equals(keyPattern)) { 
 | 
            return keys(); 
 | 
        } 
 | 
        return redisTemplate.keys((K)keyPattern); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取所有缓存值 
 | 
     * 
 | 
     * @return Collection<V> 
 | 
     */ 
 | 
    public Collection<V> values() { 
 | 
        log.trace("CacheProxy: values"); 
 | 
        Collection<V> values = new ArrayList<>(); 
 | 
        Set<K> keys = this.keys(); 
 | 
        if (CollectionUtils.isEmpty(keys)) { 
 | 
            return values; 
 | 
        } 
 | 
        for (K k : keys) { 
 | 
            values.add(redisTemplate.opsForValue().get(k)); 
 | 
        } 
 | 
        return values; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取所有缓存值 
 | 
     * 
 | 
     * @param key 缓存键 
 | 
     * @return Collection<V> 
 | 
     */ 
 | 
    public V remove(K key) throws CacheException { 
 | 
        log.trace("CacheProxy: remove, key = [" + key + "]"); 
 | 
        if (key == null) { 
 | 
            return null; 
 | 
        } 
 | 
        V value = this.get(key); 
 | 
        redisTemplate.delete(key); 
 | 
        return value; 
 | 
    } 
 | 
} 
 |