在Java中,可以使用自定义注解来实现Redis缓存的新增和删除。首先,需要一个自定义注解,例如@RedisCache。然后,可以通过AOP(面向切面编程)来拦截对特定方法的调用,并根据注解来执行相应的Redis操作。


  1. 自定义注解:

 import java.lang.annotation.ElementType;  
 
 import java.lang.annotation.Retention;  
 
 import java.lang.annotation.RetentionPolicy;  
 
 import java.lang.annotation.Target;  
 
   
 
 @Target(ElementType.METHOD) // 注解应用到方法上  
 
 @Retention(RetentionPolicy.RUNTIME) // 在运行时有效  
 
 public @interface RedisCache {  
 
     String key(); // 缓存的key值  
 
     int timeout() default 300000; // 缓存的超时时间,单位是毫秒  
 
 }
  1. 使用AOP和自定义注解实现缓存的新增和删除:

 import org.aspectj.lang.ProceedingJoinPoint;  
 
 import org.aspectj.lang.annotation.Around;  
 
 import org.aspectj.lang.annotation.Aspect;  
 
 import org.springframework.stereotype.Component;  
 
 import redis.clients.jedis.Jedis;  
 
 import redis.clients.jedis.JedisPool;  
 
   
 
 @Aspect  
 
 @Component  
 
 public class RedisCacheAspect {  
 
     @Around("@annotation(redisCache)")  
 
     public Object cache(ProceedingJoinPoint joinPoint, RedisCache redisCache) throws Throwable {  
 
         Jedis jedis = null;  
 
         try {  
 
             JedisPool jedisPool = ...; // 获取JedisPool实例,这个需要根据配置来获取  
 
             jedis = jedisPool.getResource();  
 
             String key = redisCache.key();  
 
             Object result = joinPoint.proceed(); // 执行方法  
 
             jedis.set(key, result.toString()); // 将结果存入Redis  
 
             jedis.expire(key, redisCache.timeout()); // 设置超时时间  
 
             return result;  
 
         } finally {  
 
             if (jedis != null) {  
 
                 jedis.close(); // 关闭Jedis连接  
 
             }  
 
         }  
 
     }  
 
 }

在这个示例中,我们首先获取了方法的返回值,然后将它存入Redis。我们还使用了expire方法来设置缓存的超时时间。这样,当缓存过期时,数据将自动从Redis中删除。注意,需要自己管理JedisPool的实例。这可能需要在Spring的配置文件中声明一个JedisPool的bean。