基于Spring的 Redis工具类

来源:互联网 发布:转行程序员 编辑:程序博客网 时间:2024/05/18 06:27


 知己知彼  

RedisTemplate  简化Redis数据访问代码的助手类。在给定对象和底层二进制数据之间执行自动序列化/反序列化
 Redis商店。默认情况下,它使用Java序列化对象(通过{@link JdkSerializationRedisSerializer})。对于字符串密集型操作,请考虑专用的{@link StringRedisTemplate}。支持实现RedisCallback接口的Redis访问代码。它提供{@link RedisConnection}处理,使得既不实现RedisCallback,也不调用代码需要明确地关心检索/关闭Redis连接,或处理连接生命周期 。对于典型的单步操作,有各种便利方法。一旦配置,这个类是线程安全的。请注意,虽然模板是基因化的,但要由序列化器/反序列化器来正确转换给定的序列
 *来自二进制数据的对象。


StringRedisTemplate  RedisTemplate的字符串聚焦扩展。 由于大多数针对Redis的操作都是基于String的,所以这个类提供了一个专门的类,最大限度地减少其通用的{@link RedisTemplate模板}的配置,特别是在条款序列化程序。请注意,此模板将{@link RedisCallback}所使用的{@link RedisConnection}公开为{@link StringRedisConnection}。



工具类

@Componentpublic class RedisUtils {private static final Logger LOGGER = Logger.getLogger(RedisUtils.class);//工具不允许实例化private RedisUtils() {}private static StringRedisTemplate stringRedisTemplate;@Autowired@Qualifier("stringRedisTemplate")private StringRedisTemplate stringRedisTemplateAutowired;/** * 初始化静态注入 */@PostConstructpublic void init() {stringRedisTemplate = this.stringRedisTemplateAutowired;}/** * 通过Key从Redis获取数据 * @param key键值 * @return */public static String get(String key) {try {String value = stringRedisTemplate.opsForValue().get(key);LOGGER.info("从Redis获取: Key: " + key + ",value: " + value);return value;} catch (Exception e) {LOGGER.error(e);return null;}}/** * 数据放入Redis * @param key * @param value * @return */public static boolean put(String key, String value) {try {stringRedisTemplate.opsForValue().set(key, value);LOGGER.info("存入Redis: Key: " + key + ",value: " + value);} catch (Exception e) {LOGGER.error(e);return false;}return true;}/** * 自定义数据存放时间 * 单位分钟 * @param key * @param value * @param time  * @return */public static boolean put(String key, String value, long time) {return put(key, value, time, TimeUnit.MINUTES);}/** * 自定义数据存放时间 * @param key * @param value * @param time * @return */public static boolean put(String key, String value, long time, TimeUnit timeUnit) {try {stringRedisTemplate.opsForValue().set(key, value, time, timeUnit);LOGGER.info("存入Redis: Key: " + key + ",value: " + value);} catch (Exception e) {LOGGER.error(e);return false;}return true;}public static boolean delete(String key) {try {stringRedisTemplate.delete(key);LOGGER.info("从Redis删除: Key: " + key);} catch (Exception e) {LOGGER.error(e);return false;}return true;}/** * key是否存在 * @param key * @return */public static boolean exists(final String key) {return stringRedisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(final RedisConnection redisConnection) throws DataAccessException {boolean exists = redisConnection.exists(key.getBytes(StandardCharsets.UTF_8));LOGGER.info("Redis exists: Key " + key + " is " + exists);return exists;}});}/** * 自增 * @param key * @return */public static long increment(String key) {return stringRedisTemplate.opsForValue().increment(key, 1);}/** * 自减 * @param key * @return */public static long decrement(String key){return stringRedisTemplate.opsForValue().increment(key, -1);}/** * Key延时 * @param key * @param timeout * @param unit * @return */public static Boolean expire(String key, long timeout, TimeUnit unit) {return stringRedisTemplate.expire(key, timeout, unit);}/** * 刷新缓存 * @param key * @param value * @return */public static boolean refresh(String key, String value) {if (exists(key))delete(key);return put(key, value);}public static long size() {return stringRedisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(final RedisConnection redisConnection) throws DataAccessException {long size = redisConnection.dbSize();LOGGER.info("Redis size: " + size);return size;}});}/** * 刷新数据库 * @return */public static boolean flush() {String result = stringRedisTemplate.execute(new RedisCallback<String>() {@Overridepublic String doInRedis(final RedisConnection redisConnection) throws DataAccessException {redisConnection.flushDb();LOGGER.info("Redis数据库刷新");return "success";}});return "success".equals(result);}public static String ping() {return stringRedisTemplate.execute(new RedisCallback<String>() {@Overridepublic String doInRedis(final RedisConnection redisConnection) throws DataAccessException {String ping = redisConnection.ping();LOGGER.info("Redis ping: " + ping);return ping;}});}}