分享下项目中实用的Redis 干货代码

@Component
public class RedisUtils {

    /**
     * 默认过期时长,单位:秒
     */
    public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
    /**
     * 不设置过期时长
     */
    public final static long NOT_EXPIRE = -1;
    private final static Gson GSON = new Gson();

    private final RedisTemplate<String, Object> redisTemplate;
    private final ValueOperations<String, String> valueOperations;
    private final HashOperations<String, String, Object> hashOperations;
    private final ListOperations<String, Object> listOperations;
    private final SetOperations<String, Object> setOperations;
    private final ZSetOperations<String, Object> zSetOperations;

    @Autowired
    public RedisUtils(RedisTemplate<String, Object> redisTemplate, ValueOperations<String, String> valueOperations, HashOperations<String, String, Object> hashOperations, ListOperations<String, Object> listOperations, SetOperations<String, Object> setOperations, ZSetOperations<String, Object> zSetOperations) {
        this.redisTemplate = redisTemplate;
        this.valueOperations = valueOperations;
        this.hashOperations = hashOperations;
        this.listOperations = listOperations;
        this.setOperations = setOperations;
        this.zSetOperations = zSetOperations;
    }

    public void set(String key, Object value, long expire) {
        valueOperations.set(key, toJson(value));
        if (expire != NOT_EXPIRE) {
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
    }
    public void hset(String key,String hashKey,Object value){
        hashOperations.put(key,hashKey,value);
    }

    public String hget(String key,Object hashKey){
        return hashOperations.get(key,hashKey).toString();
    }


    public void set(String key, Object value) {
        set(key, value, DEFAULT_EXPIRE);
    }

    public <T> T get(String key, Class<T> clazz, long expire) {
        String value = valueOperations.get(key);
        if (expire != NOT_EXPIRE) {
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
        return fromJson(value, clazz);
    }

    public <T> T get(String key, Class<T> clazz) {
        return get(key, clazz, NOT_EXPIRE);
    }

    public String get(String key, long expire) {
        String value = valueOperations.get(key);
        if (expire != NOT_EXPIRE) {
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
        return value;
    }

    public String get(String key) {
        return get(key, NOT_EXPIRE);
    }

    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * Object转成JSON数据
     */
    private String toJson(Object object) {
        if (object instanceof Integer || object instanceof Long || object instanceof Float ||
                object instanceof Double || object instanceof Boolean || object instanceof String) {
            return String.valueOf(object);
        }
        return GSON.toJson(object);
    }

    /**
     * JSON数据,转成Object
     */
    private <T> T fromJson(String json, Class<T> clazz) {
        return GSON.fromJson(json, clazz);
    }

    public void  expire(String key, long timeout, TimeUnit timeUnit) {
        redisTemplate.expire(key, timeout, timeUnit);
    }

    /**
     * 匹配查询redis中的key
     *
     * @param rex
     * @return
     */
    public Set<String> keys(String rex) {
        Set<String> result = null;
        result = redisTemplate.keys(rex);
        return result;
    }


}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class RedisKeys {

    public static String getSysConfigKey(String key) {
        return "sys:config:" + key;
    }

}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

public interface RedisOperatorService {
   
   Boolean exists(String key) ;
   
   String set(String key, String value) ;

   String get(String key) ;
   
   Long ttl(String key) ;
   
   String setex(String key, int seconds, String value);
   
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Service
@Transactional(rollbackFor = Exception.class)
public class RedisOperatorImpl implements RedisOperatorService {
   protected static final Logger LOG = LoggerFactory
           .getLogger(RedisOperatorService.class);

   @Resource(name="JedisPool")
   private JedisPool jedisPool;
   
   public void returnResource(Jedis jedis) {
      jedis.close();
   }
   
   public void returnResource(Jedis jedis, boolean broken) {
      jedis.close();
   }

   @Override
   public Boolean exists(String key) {
      Boolean result = false;
      Jedis jedis = jedisPool.getResource();
      if (jedis == null) {
         return result;
      }
      boolean broken = false;
      try {
         result = jedis.exists(key);
      } catch (Exception e) {
         LOG.error(e.getMessage(), e);
         broken = true;
      } finally {
         returnResource(jedis, broken);
      }
      return result;
   }

   @Override
   public String set(String key, String value) {
      String result = null;
      Jedis jedis = jedisPool.getResource();
      if (jedis == null) {
         return result;
      }
      boolean broken = false;
      try {
         result = jedis.set(key, value);
      } catch (Exception e) {
         LOG.error(e.getMessage(), e);
         broken = true;
      } finally {
         returnResource(jedis, broken);
      }
      return result;
   }

   @Override
   public String get(String key) {
      String result = null;
      Jedis jedis = jedisPool.getResource();
      if (jedis == null) {
         return result;
      }
      boolean broken = false;
      try {
         result = jedis.get(key);
      } catch (Exception e) {
         LOG.error(e.getMessage(), e);
         broken = true;
      } finally {
         returnResource(jedis, broken);
      }
      return result;
   }

   @Override
   public Long ttl(String key) {
      Long result = null;
      Jedis jedis = jedisPool.getResource();
      if (jedis == null) {
         return result;
      }
      boolean broken = false;
      try {
         result = jedis.ttl(key);
      } catch (Exception e) {
         LOG.error(e.getMessage(), e);
         broken = true;
      } finally {
         returnResource(jedis, broken);
      }
      return result;
   }

   @Override
   public String setex(String key, int seconds, String value) {
      String result = null;
      Jedis jedis = jedisPool.getResource();
      if (jedis == null) {
         return result;
      }
      boolean broken = false;
      try {
         result = jedis.setex(key, seconds, value);
      } catch (Exception e) {
         LOG.error(e.getMessage(), e);
         broken = true;
      } finally {
         returnResource(jedis, broken);
      }
      return result;
   }
   
}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Component
public class SysConfigRedis {

    private final RedisUtils redisUtils;

    @Autowired
    public SysConfigRedis(RedisUtils redisUtils) {
        this.redisUtils = redisUtils;
    }

    public void saveOrUpdate(SysConfigEntity config) {
        if (config == null) {
            return;
        }
        String key = RedisKeys.getSysConfigKey(config.getParamKey());
        redisUtils.set(key, config);
    }

    public void delete(String configKey) {
        String key = RedisKeys.getSysConfigKey(configKey);
        redisUtils.delete(key);
    }

    public SysConfigEntity get(String configKey) {
        String key = RedisKeys.getSysConfigKey(configKey);
        return redisUtils.get(key, SysConfigEntity.class);
    }

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Configuration
public class JedisPoolBean {

    @Bean(name = "JedisPool")
    public JedisPool getJedisPoll() {
        return new JedisPool();
    }

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Configuration
public class RedisConfig {

    private final RedisConnectionFactory factory;

    @Autowired
    public RedisConfig(RedisConnectionFactory factory) {
        this.factory = factory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }

    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }

    @Bean
    public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {
        return redisTemplate.opsForValue();
    }

    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }

    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }

    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

项目代码如下


版权声明:本文为cnnlkj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。