Redis:定时清理垃圾图片

时间:2024-01-25 14:32:14

首先理解清理垃圾文件的原理

在填写表单信息时上传图片后就已经存入云中,但是此时取消表单的填写这个图片就变成垃圾图片,所以在点击新建填写表单的方法/upload中,把上传的图片名字存入Redis的value中,key(key1)值可以任意。然后在提交表单的方法中把成功提交表单的图片存入到value中,key(key2)与上面不同。

利用Redis的差集sdiff就可以得到上传的垃圾图片的名字,再利用云的处理垃圾图片的方法就可以清除。

示例代码如下:

添加依赖

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

<dependency>
         <groupId>com.qiniu</groupId>
         <artifactId>qiniu-java-sdk</artifactId>
         <version>7.2.0</version>
</dependency>

配置application.yml

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    jedis:
      pool:
        max-idle: 6    #最大空闲数
        max-active: 10 #最大连接数
        min-idle: 2

配置Jedis

@Configuration
public class JedisConfig {
    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Bean
    public JedisPoolConfig jedisPoolConfig(){

        //创建一个配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(maxActive);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        return poolConfig;
    }
    @Bean
    public JedisPool jedisPool(JedisPoolConfig PoolConfig){
        //创建连接池对象
        return new JedisPool(PoolConfig,host,port);
    }

}

在/upload方法中

//upload:SETMEAL_PIC_REAOURCE 1 2 3
jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_RESOURCES,imgName);

在add方法中

//add:SETMEAL_PIC_DB_REAOURCE 1 2
            jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES,setmeal.getImg());

注意两个代码都要放在上传成功代码之后!!!!!!

在CleanImgJob方法中

筛选出垃圾图片

@Component
public class CleamImgJob {
    @Autowired
    private JedisPool jedisPool;

    public void cleanImg(){
        Jedis jedis = jedisPool.getResource();
        //jedis.sdiff(SETMEAL_PIC_REAOURCE, SETMEAL_PIC_DB_REAOURCE);--->3
        Set<String> imgNameSet = jedis.sdiff(RedisConstant.SETMEAL_PIC_RESOURCES,RedisConstant.SETMEAL_PIC_DB_RESOURCES);
        //QiniuUtil.deletePic(3);
        for (String imgNmae : imgNameSet) {
            QiniuUtils.deleteFileFromQiniu(imgNmae);
            //jedis.srem(SETMEAL_PIC_REAOURCE, 3);//防止重复删除
            jedis.srem(RedisConstant.SETMEAL_PIC_RESOURCES,imgNmae);
            System.out.println(new Date() + "-------->定时清理垃圾图片:" + imgNmae);
        }

    }

最后在QuartzConfig配置类中