All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.developframework.resource.spring.cache.RedisCacheHelper Maven / Gradle / Ivy

The newest version!
package com.github.developframework.resource.spring.cache;

import develop.toolkit.base.struct.KeyValuePair;
import develop.toolkit.base.struct.KeyValuePairs;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import java.time.Duration;
import java.util.Set;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * redis缓存助手
 *
 * @author qiushui on 2020-04-30.
 */
public final class RedisCacheHelper {

    /**
     * 判断是否有键
     *
     * @param redisTemplate
     * @param key
     * @param 
     * @param 
     * @return
     */
    public static  boolean hasKey(RedisTemplate redisTemplate, K key) {
        Boolean hasKey = redisTemplate.hasKey(key);
        return hasKey != null && hasKey;
    }

    /**
     * 获取列表长度
     *
     * @param redisTemplate
     * @param key
     * @param 
     * @param 
     * @return
     */
    public static  long listSize(RedisTemplate redisTemplate, K key) {
        Long size = redisTemplate.opsForList().size(key);
        return size != null ? size : 0;
    }

    /**
     * 列表是否有值
     *
     * @param redisTemplate
     * @param key
     * @param 
     * @param 
     * @return
     */
    public static  boolean listNotEmpty(RedisTemplate redisTemplate, K key) {
        Long size = redisTemplate.opsForList().size(key);
        return size != null && size > 0;
    }

    /**
     * 列表是否为空
     *
     * @param redisTemplate
     * @param key
     * @param 
     * @param 
     * @return
     */
    public static  boolean listEmpty(RedisTemplate redisTemplate, K key) {
        Long size = redisTemplate.opsForList().size(key);
        return size == null || size == 0;
    }

    /**
     * 列表匹配查询匹配单个
     *
     * @param redisTemplate
     * @param key
     * @param predicate
     * @param 
     * @param 
     * @return
     */
    public static  KeyValuePair listFind(RedisTemplate redisTemplate, K key, Predicate predicate) {
        ListOperations listOperations = redisTemplate.opsForList();
        long size = listSize(redisTemplate, key);
        for (long i = 0; i < size; i++) {
            V v = listOperations.index(key, i);
            if (v != null && predicate.test(v)) {
                return KeyValuePair.of(i, v);
            }
        }
        return KeyValuePair.of(-1L, null);
    }

    /**
     * 列表匹配查询
     *
     * @param redisTemplate
     * @param key
     * @param predicate
     * @param 
     * @param 
     * @return
     */
    public static  KeyValuePairs listFindAll(RedisTemplate redisTemplate, K key, Predicate predicate) {
        KeyValuePairs keyValuePairs = new KeyValuePairs<>();
        ListOperations listOperations = redisTemplate.opsForList();
        long size = listSize(redisTemplate, key);
        for (long i = 0; i < size; i++) {
            V v = listOperations.index(key, i);
            if (v != null && predicate.test(v)) {
                keyValuePairs.addKeyValue(i, v);
            }
        }
        return keyValuePairs;
    }

    /**
     * 读取值
     *
     * @param redisTemplate
     * @param defaultSupplier
     * @param key
     * @param 
     * @param 
     * @return
     */
    public static  V readValue(RedisTemplate redisTemplate, K key, Duration timeout, Supplier defaultSupplier) {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        V v = valueOperations.get(key);
        if (v == null) {
            v = defaultSupplier.get();
            if (v != null) {
                if (timeout != null) {
                    valueOperations.set(key, v, timeout);
                } else {
                    valueOperations.set(key, v);
                }
            }
        }
        return v;
    }

    /**
     * 读取Hash值
     *
     * @param redisTemplate
     * @param key
     * @param hashKey
     * @param defaultSupplier
     * @param 
     * @param 
     * @param 
     * @return
     */
    public static  HV readHash(RedisTemplate redisTemplate, H key, HK hashKey, Supplier defaultSupplier) {
        HashOperations hashOperations = redisTemplate.opsForHash();
        HV v = hashOperations.get(key, hashKey);
        if (v == null) {
            v = defaultSupplier.get();
            if (v != null) {
                hashOperations.put(key, hashKey, v);
            }
        }
        return v;
    }

    /**
     * 批量删除
     *
     * @param redisTemplate
     * @param pattern
     * @param 
     * @param 
     */
    public static  void deleteKeys(RedisTemplate redisTemplate, K pattern) {
        Set keys = redisTemplate.keys(pattern);
        if (keys != null) {
            redisTemplate.delete(keys);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy