Springboot-集成Redis 配置双Redis操作模板 -批量模糊根据key删除数据

pom.xml 导入jar包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

application-development.yml 配置 或者叫:application.yml

#spring-ehcache的配置
  cache:
    type: redis # redis/ehcache, 在这里设置你使用的缓存框架,如果不想使用redis,请改成ehcache
  ehcache:
    config: classpath:ehcache.xml
  redis:
    host: localhost
    port: 6379
    expireTime: 3600000 #单位秒

java代码配置  配置双实例 因为框架已经用了

redisTemplate 了 且用object做了 key的代码开发,为避免不影响使用
redisTemplate 的代码失效,所以新配置一个实例 用String  做key  可以模糊匹配key
redisTemplate2 对key做了序列化处理,所以可以使用
Set<String> keys = redisTemplate.keys(pattern); 这个功能
package com.jeeplus.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * redis缓存配置
 */
@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis")
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {


    /**
     * RedisTemplate配置
     *
     * @param connectionFactory
     * @return
     */
    @Bean(name="redisTemplate")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }

    @Bean(name="redisTemplate2")
    public RedisTemplate<String, Object> redisTemplate2(RedisConnectionFactory connectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        // key的序列化采用StringRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        //初始化一个RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
        //设置CacheManager的值序列化方式为JdkSerializationRedisSerializer,但其实RedisCacheConfiguration默认就是使用StringRedisSerializer序列化key,JdkSerializationRedisSerializer序列化value,所以以下注释代码为默认实现
        ClassLoader loader = this.getClass().getClassLoader();
        JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);
        RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer);
        RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
        //初始化RedisCacheManager
        RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
        return cacheManager;
    }

}

使用的时候注入 记得 标明要注入那个实例

@Resource(name="redisTemplate2")
    private RedisTemplate redisTemplate;
@Resource(name="redisTemplate")
    private RedisTemplate redisTemplate;

封装一个 针对redisTemplate2 实例批量删除模糊匹配删除key的代码

package com.jeeplus.modules.utils;

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

import java.util.Set;

public class RedisUtil {

    /**
     * 批量模糊匹配删除key对应的值
     * @param redisTemplate
     * @param pattern
     */
    public static void redisDeletes(RedisTemplate redisTemplate, String pattern){
        Set<String> keys = redisTemplate.keys(pattern);
        redisTemplate.delete(keys);
    }
}

 

代码中批量模糊删除key的应用  * 号代办匹配以此为前缀所有的key 都会删除

String key=Constants.REDIS_KEY_OFFICIALTIME+"userId_"+examEnrollRecord.getUserId()+"_page_*";
        RedisUtil.redisDeletes(redisTemplate,key);

 

posted @ 2022-03-10 14:32  知行IT讲堂  阅读(926)  评论(0编辑  收藏  举报