¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.common.utils; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonAutoDetect; |
| | | import com.fasterxml.jackson.annotation.JsonTypeInfo; |
| | | import com.fasterxml.jackson.annotation.PropertyAccessor; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; |
| | | import org.springframework.data.redis.serializer.StringRedisSerializer; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Component |
| | | public class RedisUtil { |
| | | private static RedisTemplate<String, Object> redisTemplate; |
| | | public static RedisTemplate<String, Object> getRedisTemplate() { |
| | | return redisTemplate; |
| | | } |
| | | @Autowired |
| | | private RedisUtil(RedisConnectionFactory redisConnectionFactory){ |
| | | // redisTemplate模æ¿åå§å |
| | | redisTemplate = new RedisTemplate<>(); |
| | | redisTemplate.setConnectionFactory(redisConnectionFactory); |
| | | |
| | | // å°å¯¹è±¡åºåå |
| | | ObjectMapper om=new ObjectMapper(); |
| | | om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
| | | om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, |
| | | ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); |
| | | |
| | | // Stringçåºåå |
| | | StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); |
| | | // jsonåºååé
ç½® |
| | | Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class); |
| | | jackson2JsonRedisSerializer.setObjectMapper(om); |
| | | //keyéç¨Stringçåºååæ¹å¼ |
| | | redisTemplate.setKeySerializer(stringRedisSerializer); |
| | | //hashçkeyä¹éç¨String çåºååæ¹å¼ |
| | | redisTemplate.setHashKeySerializer(stringRedisSerializer); |
| | | //valueçåºååæ¹å¼éç¨jacksonçæ¹å¼ |
| | | redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); |
| | | // //hashçvalueåºååæ¹å¼éç¨jackson |
| | | redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); |
| | | redisTemplate.afterPropertiesSet(); |
| | | } |
| | | |
| | | // =============================common============================ |
| | | /** |
| | | * æå®ç¼åå¤±ææ¶é´ |
| | | * @param key é® |
| | | * @param time æ¶é´(ç§) |
| | | */ |
| | | public static boolean expire(String key, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.expire(key, time, TimeUnit.SECONDS); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®key è·åè¿ææ¶é´ |
| | | * @param key é® ä¸è½ä¸ºnull |
| | | * @return æ¶é´(ç§) è¿å0代表为永ä¹
ææ |
| | | */ |
| | | public static long getExpire(String key) { |
| | | return redisTemplate.getExpire(key, TimeUnit.SECONDS); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 夿keyæ¯å¦åå¨ |
| | | * @param key é® |
| | | * @return true åå¨ falseä¸åå¨ |
| | | */ |
| | | public static boolean hasKey(String key) { |
| | | try { |
| | | return redisTemplate.hasKey(key); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å é¤ç¼å |
| | | * @param key å¯ä»¥ä¼ ä¸ä¸ªå¼ æå¤ä¸ª |
| | | */ |
| | | // @SuppressWarnings("unchecked") |
| | | public static void del(String... key) { |
| | | if (key != null && key.length > 0) { |
| | | if (key.length == 1) { |
| | | redisTemplate.delete(key[0]); |
| | | } else { |
| | | redisTemplate.delete(Arrays.asList(key)); |
| | | // redisTemplate.delete(CollectionUtils.arrayToList(key)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 模ç³å¹é
å é¤å¤ä¸ªç¼å |
| | | * @param key å¯ä»¥ä¼ ä¸ä¸ªå¼ æå¤ä¸ª |
| | | */ |
| | | public static void delsLike(String key) { |
| | | Set<String> keys = redisTemplate.keys(key); |
| | | redisTemplate.delete(keys); |
| | | } |
| | | |
| | | /** |
| | | * è·åå¹¶å é¤ç¼å |
| | | * @param key é® |
| | | * @return å¼ |
| | | */ |
| | | public static Object getAndDelete(String key) { |
| | | try{ |
| | | return key == null ? null : get(key); |
| | | }finally { |
| | | del(key); |
| | | } |
| | | } |
| | | |
| | | // ============================String============================= |
| | | |
| | | /** |
| | | * æ®éç¼åè·å |
| | | * @param key é® |
| | | * @return å¼ |
| | | */ |
| | | public static Object get(String key) { |
| | | return key == null ? null : redisTemplate.opsForValue().get(key); |
| | | } |
| | | |
| | | /** |
| | | * æ®éç¼åæ¾å
¥ |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @return trueæå false失败 |
| | | */ |
| | | |
| | | public static boolean set(String key, Object value) { |
| | | try { |
| | | redisTemplate.opsForValue().set(key, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ®éç¼åæ¾å
¥å¹¶è®¾ç½®æ¶é´ |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param time æ¶é´(ç§) timeè¦å¤§äº0 妿timeå°äºçäº0 å°è®¾ç½®æ éæ |
| | | * @return trueæå false 失败 |
| | | */ |
| | | |
| | | public static boolean set(String key, Object value, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES); |
| | | } else { |
| | | // åªä¿®æ¹åæ°ä¸ä¿®æ¹ttl |
| | | redisTemplate.opsForValue().set(key, value, 0); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * éå¢ |
| | | * @param key é® |
| | | * @param delta è¦å¢å å (大äº0) |
| | | */ |
| | | public static long incr(String key, long delta) { |
| | | if (delta < 0) { |
| | | throw new RuntimeException("éå¢å åå¿
须大äº0"); |
| | | } |
| | | return redisTemplate.opsForValue().increment(key, delta); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * éå |
| | | * @param key é® |
| | | * @param delta è¦åå°å (å°äº0) |
| | | */ |
| | | public static long decr(String key, long delta) { |
| | | if (delta < 0) { |
| | | throw new RuntimeException("éåå åå¿
须大äº0"); |
| | | } |
| | | return redisTemplate.opsForValue().increment(key, -delta); |
| | | } |
| | | |
| | | |
| | | // ================================Map================================= |
| | | |
| | | /** |
| | | * HashGet |
| | | * @param key é® ä¸è½ä¸ºnull |
| | | * @param item 项 ä¸è½ä¸ºnull |
| | | */ |
| | | public static Object hget(String key, String item) { |
| | | return redisTemplate.opsForHash().get(key, item); |
| | | } |
| | | |
| | | /** |
| | | * è·åhashKey对åºçææé®å¼ |
| | | * @param key é® |
| | | * @return 对åºçå¤ä¸ªé®å¼ |
| | | */ |
| | | public static Map<Object, Object> hmget(String key) { |
| | | return redisTemplate.opsForHash().entries(key); |
| | | } |
| | | |
| | | /** |
| | | * HashSet |
| | | * @param key é® |
| | | * @param map 对åºå¤ä¸ªé®å¼ |
| | | */ |
| | | public static boolean hmset(String key, Map<String, Object> map) { |
| | | try { |
| | | redisTemplate.opsForHash().putAll(key, map); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * HashSet 并设置æ¶é´ |
| | | * @param key é® |
| | | * @param map 对åºå¤ä¸ªé®å¼ |
| | | * @param time æ¶é´(ç§) |
| | | * @return trueæå false失败 |
| | | */ |
| | | public static boolean hmset(String key, Map<String, Object> map, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.opsForHash().putAll(key, map); |
| | | expire(key, time); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * åä¸å¼ hashè¡¨ä¸æ¾å
¥æ°æ®,妿ä¸åå¨å°å建 |
| | | * |
| | | * @param key é® |
| | | * @param item 项 |
| | | * @param value å¼ |
| | | * @return true æå false失败 |
| | | */ |
| | | public static boolean hset(String key, String item, Object value) { |
| | | try { |
| | | redisTemplate.opsForHash().put(key, item, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åä¸å¼ hashè¡¨ä¸æ¾å
¥æ°æ®,妿ä¸åå¨å°å建 |
| | | * |
| | | * @param key é® |
| | | * @param item 项 |
| | | * @param value å¼ |
| | | * @param time æ¶é´(ç§) 注æ:妿已åå¨çhashè¡¨ææ¶é´,è¿éå°ä¼æ¿æ¢åæçæ¶é´ |
| | | * @return true æå false失败 |
| | | */ |
| | | public static boolean hset(String key, String item, Object value, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.opsForHash().put(key, item, value); |
| | | expire(key, time); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å é¤hash表ä¸çå¼ |
| | | * |
| | | * @param key é® ä¸è½ä¸ºnull |
| | | * @param item 项 å¯ä»¥ä½¿å¤ä¸ª ä¸è½ä¸ºnull |
| | | */ |
| | | public static void hdel(String key, Object... item) { |
| | | redisTemplate.opsForHash().delete(key, item); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 夿hashè¡¨ä¸æ¯å¦æè¯¥é¡¹çå¼ |
| | | * |
| | | * @param key é® ä¸è½ä¸ºnull |
| | | * @param item 项 ä¸è½ä¸ºnull |
| | | * @return true åå¨ falseä¸åå¨ |
| | | */ |
| | | public static boolean hHasKey(String key, String item) { |
| | | return redisTemplate.opsForHash().hasKey(key, item); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * hashéå¢ å¦æä¸åå¨,å°±ä¼å建ä¸ä¸ª å¹¶ææ°å¢åçå¼è¿å |
| | | * |
| | | * @param key é® |
| | | * @param item 项 |
| | | * @param by è¦å¢å å (大äº0) |
| | | */ |
| | | public static double hincr(String key, String item, double by) { |
| | | return redisTemplate.opsForHash().increment(key, item, by); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * hashéå |
| | | * |
| | | * @param key é® |
| | | * @param item 项 |
| | | * @param by è¦åå°è®°(å°äº0) |
| | | */ |
| | | public static double hdecr(String key, String item, double by) { |
| | | return redisTemplate.opsForHash().increment(key, item, -by); |
| | | } |
| | | |
| | | |
| | | // ============================set============================= |
| | | |
| | | /** |
| | | * æ ¹æ®keyè·åSetä¸çææå¼ |
| | | * @param key é® |
| | | */ |
| | | public static Set<Object> sGet(String key) { |
| | | try { |
| | | return redisTemplate.opsForSet().members(key); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®valueä»ä¸ä¸ªset䏿¥è¯¢,æ¯å¦åå¨ |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @return true åå¨ falseä¸åå¨ |
| | | */ |
| | | public static boolean sHasKey(String key, Object value) { |
| | | try { |
| | | return redisTemplate.opsForSet().isMember(key, value); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°æ°æ®æ¾å
¥setç¼å |
| | | * |
| | | * @param key é® |
| | | * @param values å¼ å¯ä»¥æ¯å¤ä¸ª |
| | | * @return æåä¸ªæ° |
| | | */ |
| | | public static long sSet(String key, Object... values) { |
| | | try { |
| | | return redisTemplate.opsForSet().add(key, values); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°setæ°æ®æ¾å
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param time æ¶é´(ç§) |
| | | * @param values å¼ å¯ä»¥æ¯å¤ä¸ª |
| | | * @return æåä¸ªæ° |
| | | */ |
| | | public static long sSetAndTime(String key, long time, Object... values) { |
| | | try { |
| | | Long count = (long)values.length; |
| | | if (time > 0) { |
| | | count = redisTemplate.opsForSet().add(key, values); |
| | | expire(key, time); |
| | | } |
| | | return count; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åsetç¼åçé¿åº¦ |
| | | * |
| | | * @param key é® |
| | | */ |
| | | public static long sGetSetSize(String key) { |
| | | try { |
| | | return redisTemplate.opsForSet().size(key); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * ç§»é¤å¼ä¸ºvalueç |
| | | * |
| | | * @param key é® |
| | | * @param values å¼ å¯ä»¥æ¯å¤ä¸ª |
| | | * @return ç§»é¤çä¸ªæ° |
| | | */ |
| | | |
| | | public static long setRemove(String key, Object... values) { |
| | | try { |
| | | return redisTemplate.opsForSet().remove(key, values); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | // ===============================list================================= |
| | | |
| | | /** |
| | | * è·ålistç¼åçå
容 |
| | | * |
| | | * @param key é® |
| | | * @param start å¼å§ |
| | | * @param end ç»æ 0 å° -1代表ææå¼ |
| | | */ |
| | | public static List<Object> lGet(String key, long start, long end) { |
| | | try { |
| | | return redisTemplate.opsForList().range(key, start, end); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·ålistç¼åçé¿åº¦ |
| | | * |
| | | * @param key é® |
| | | */ |
| | | public static long lGetListSize(String key) { |
| | | try { |
| | | return redisTemplate.opsForList().size(key); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * éè¿ç´¢å¼ è·ålistä¸çå¼ |
| | | * |
| | | * @param key é® |
| | | * @param index ç´¢å¼ index>=0æ¶ï¼ 0 表头ï¼1 第äºä¸ªå
ç´ ï¼ä¾æ¬¡ç±»æ¨ï¼index<0æ¶ï¼-1ï¼è¡¨å°¾ï¼-2åæ°ç¬¬äºä¸ªå
ç´ ï¼ä¾æ¬¡ç±»æ¨ |
| | | */ |
| | | public static Object lGetIndex(String key, long index) { |
| | | try { |
| | | return redisTemplate.opsForList().index(key, index); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°listæ¾å
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | */ |
| | | public static boolean lSet(String key, Object value) { |
| | | try { |
| | | redisTemplate.opsForList().rightPush(key, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°listæ¾å
¥ç¼å |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param time æ¶é´(ç§) |
| | | */ |
| | | public static boolean lSet(String key, Object value, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.opsForList().rightPush(key, value); |
| | | expire(key, time); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°listæ¾å
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @return true åæ¾æå falseåæ¾å¤±è´¥ |
| | | */ |
| | | public static boolean lSet(String key, List<Object> value) { |
| | | try { |
| | | redisTemplate.opsForList().rightPushAll(key, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°listæ¾å
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param time æ¶é´(ç§) |
| | | * @return true åæ¾æå falseåæ¾å¤±è´¥ |
| | | */ |
| | | public static boolean lSet(String key, List<Object> value, long time) { |
| | | try { |
| | | if (time > 0) { |
| | | redisTemplate.opsForList().rightPushAll(key, value); |
| | | expire(key, time); |
| | | } |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®ç´¢å¼ä¿®æ¹listä¸çææ¡æ°æ® |
| | | * |
| | | * @param key é® |
| | | * @param index ç´¢å¼ |
| | | * @param value å¼ |
| | | * @return true åæ¾æå falseåæ¾å¤±è´¥ |
| | | */ |
| | | |
| | | public static boolean lUpdateIndex(String key, long index, Object value) { |
| | | try { |
| | | redisTemplate.opsForList().set(key, index, value); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * ç§»é¤N个å¼ä¸ºvalue |
| | | * |
| | | * @param key é® |
| | | * @param count ç§»é¤å¤å°ä¸ª |
| | | * @param value å¼ |
| | | * @return ç§»é¤çä¸ªæ° |
| | | */ |
| | | |
| | | public static long lRemove(String key, long count, Object value) { |
| | | try { |
| | | return redisTemplate.opsForList().remove(key, count, value); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | } |
| | | |