package cn.cecep.talroad.util;

import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;

import java.util.HashSet;
import java.util.Set;

public class RedisUtils {


    /**
     * 根据模糊的 key 来删除缓存
     *
     * @param redisTemplate RedisTemplate 实例
     * @param pattern       模糊的 key
     * @return 删除的 key 的数量
     */
    public static boolean delKeysByPattern(RedisTemplate<String, Object> redisTemplate, String pattern) {
        Set<String> keys = new HashSet<>();
        // 定义 scan 参数
        ScanOptions options = ScanOptions.scanOptions().match(pattern).build();
        // 使用 scan 方法查询 key 值列表
        redisTemplate.execute((connection) -> {
            try (Cursor<byte[]> cursor = connection.scan(options)) {
                while (cursor.hasNext()) {
                    byte[] keyBytes = cursor.next();
                    String key = redisTemplate.getStringSerializer().deserialize(keyBytes);
                    keys.add(key);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            return null;
        }, true);

        // 删除匹配的 key 值对应的缓存
        if (keys != null && keys.size() > 0) {
            long res = redisTemplate.delete(keys);
            return res == keys.size();
        }
        return false;
    }
}
