diff --git a/dev-common/pom.xml b/dev-common/pom.xml
index f39fbd752e1d156803f4a97254c3d46cf5326f8c..28f425a1141830907d49e935ae28eed4f55aeb38 100644
--- a/dev-common/pom.xml
+++ b/dev-common/pom.xml
@@ -110,6 +110,22 @@
org.springframework.data
spring-data-elasticsearch
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.commons
+ commons-pool2
+
\ No newline at end of file
diff --git a/dev-common/src/main/java/com/dev/common/utils/RedisUtils.java b/dev-common/src/main/java/com/dev/common/utils/RedisUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..278bf79386b11ef414350810999291f9344b9a8f
--- /dev/null
+++ b/dev-common/src/main/java/com/dev/common/utils/RedisUtils.java
@@ -0,0 +1,539 @@
+package com.dev.common.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Classname RedisUtil
+ * @Description redis工具类
+ * @Date 2019/9/24 18:08
+ * @Created by SSL
+ */
+@Component
+public class RedisUtils {
+ @Autowired
+ private static RedisTemplate redisTemplate;
+
+ public RedisUtils(RedisTemplate redisTemplate) {
+ this.redisTemplate = redisTemplate;
+ }
+
+
+ /**
+ * 指定缓存失效时间
+ * @param key 键
+ * @param time 时间(秒)
+ * @return
+ */
+ 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(CollectionUtils.arrayToList(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.SECONDS);
+ }else{
+ set(key, value);
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 递增
+ * @param key 键
+ * @param delta 要增加几(大于0)
+ * @return
+ */
+ 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)
+ * @return
+ */
+ 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
+ * @return 值
+ */
+ public static Object hget(String key,String item){
+ return redisTemplate.opsForHash().get(key, item);
+ }
+
+ /**
+ * 获取hashKey对应的所有键值
+ * @param key 键
+ * @return 对应的多个键值
+ */
+ public static Map