标签:验证 mail 根据 框架 lists hash cal gre mda
SpringBoot整合Redis的资料很多,但是我只需要整合完成后,可以操作Redis就可以了,所以不需要配合缓存相关的注解使用(如@Cacheable),而且我的系统框架用的日志是log4j,不是SpringBoot默认的Logback。通过查询资料我完成了Redis整合,并写了Redis操作工具类。特意在此记录一下,分享给大家,也方便以后查阅。
1.SpringBoot版本如下
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
2.添加Redis依赖
2.1如果没有特殊要求,直接添加依赖即可
org.springframework.boot
spring-boot-starter-data-redis
2.2如开篇所说,我不想要SpringBoot默认的日志,spring-boot-starter-data-redis包里自带了Logback的jar包,所以2.1的依赖不是我想要的,我的依赖如下
org.springframework.data
spring-data-redis
2.0.11.RELEASEredis.clients
jedis
2.9.0
这两个依赖只是spring-boot-starter-data-redis依赖里关于Redis的依赖包,其实只需要这两个就OK了
3.application.properties中加入redis相关配置
#Redis
spring.redis.host=192.168.0.202
#redis.host=192.168.0.202
## Redis服务器连接端口
spring.redis.port=6379
## 连接超时时间(毫秒)
redis.timeout=3
## Redis服务器连接密码(默认为空)
redis.password=123456
## 连接池中的最大连接数
redis.poolMaxTotal=10
## 连接池中的最大空闲连接
redis.poolMaxIdle=10
## 连接池最大阻塞等待时间(使用负值表示没有限制)
redis.poolMaxWait=3
4.Redis模板及基本操作方法
查过资料的小伙伴们应该知道,SpringBoot的Redis模板配置类有一定的局限性,这里不再赘述,我自己写了一个RedisTemplate,直接贴代码
package com.gemdale.redis;
import com.alibaba.fastjson.JSON;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisTemplateService {
private static StringRedisTemplate stringRedisTemplate;
public boolean set(String key ,T value){
try {
//任意类型转换成String
String val = beanToString(value);
if(val==null||val.length() return false;
}
getStringRedisTemplate().opsForValue().set(key,val);
return true;
}catch (Exception e){
return false;
}
}
public T get(String key,Class clazz){
try {
String value = getStringRedisTemplate().opsForValue().get(key);
return stringToBean(value,clazz);
}catch (Exception e){
return null ;
}
}
@SuppressWarnings("unchecked")
private T stringToBean(String value, Class clazz) {
if(value==null||value.length() return null;
}
if(clazz ==int.class ||clazz==Integer.class){
return (T)Integer.valueOf(value);
}
else if(clazz==long.class||clazz==Long.class){
return (T)Long.valueOf(value);
}
else if(clazz==String.class){
return (T)value;
}else {
return JSON.toJavaObject(JSON.parseObject(value),clazz);
}
}
/**
*
* @param value T任意类型
* @return String
*/
private String beanToString(T value) {
if(value==null){
return null;
}
Class > clazz = value.getClass();
if(clazz==int.class||clazz==Integer.class){
return ""+value;
}
else if(clazz==long.class||clazz==Long.class){
return ""+value;
}
else if(clazz==String.class){
return (String)value;
}else {
return JSON.toJSONString(value);
}
}
//获取RedisTemplate
public static RedisTemplate getStringRedisTemplate() {
if (stringRedisTemplate == null){
synchronized (RedisTemplateService.class){
if (stringRedisTemplate == null)
stringRedisTemplate = new StringRedisTemplate(redisConnectionFactory());
}
}
return stringRedisTemplate;
}
public static RedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("192.168.0.202");
jedisConnectionFactory.setPort(6379);
jedisConnectionFactory.setPassword("123456");
return jedisConnectionFactory;
}
}
5.Redis工具类
我另外写了一个专门的工具类,没有聚验证,有需要的小伙伴可以参考指正,放在这里只为备忘
1 package com.winmine.utils;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.data.redis.core.RedisTemplate;
5 import org.springframework.stereotype.Component;
6 import org.springframework.util.CollectionUtils;
7
8 import java.util.List;
9 import java.util.Map;
10 import java.util.Set;
11 import java.util.concurrent.TimeUnit;
12
13 @Component
14 public class RedisUtils {
15 @Autowired
16 private RedisTemplate redisTemplate;
17
18 // =============================common============================
19 /**
20 * 指定缓存失效时间
21 * @param key 键
22 * @param time 时间(秒)
23 * @return
24 */
25 public boolean expire(String key, long time) {
26 try {
27 if (time > 0) {
28 redisTemplate.expire(key, time, TimeUnit.SECONDS);
29 }
30 return true;
31 } catch (Exception e) {
32 e.printStackTrace();
33 return false;
34 }
35 }
36 /**
37 * 根据key 获取过期时间
38 * @param key 键 不能为null
39 * @return 时间(秒) 返回0代表为永久有效
40 */
41 public long getExpire(String key) {
42 return redisTemplate.getExpire(key, TimeUnit.SECONDS);
43 }
44 /**
45 * 判断key是否存在
46 * @param key 键
47 * @return true 存在 false不存在
48 */
49 public boolean hasKey(String key) {
50 try {
51 return redisTemplate.hasKey(key);
52 } catch (Exception e) {
53 e.printStackTrace();
54 return false;
55 }
56 }
57
58 /**
59 * 删除缓存
60 * @param key 可以传一个值 或多个
61 */
62 @SuppressWarnings("unchecked")
63 public void del(String... key) {
64 if (key != null && key.length > 0) {
65 if (key.length == 1) {
66 redisTemplate.delete(key[0]);
67 } else {
68 redisTemplate.delete(CollectionUtils.arrayToList(key));
69 }
70 }
71 }
72
73 // ============================String=============================
74 /**
75 * 普通缓存获取
76 * @param key 键
77 * @return 值
78 */
79 public Object get(String key) {
80 return key == null ? null : redisTemplate.opsForValue().get(key);
81 }
82 /**
83 * 普通缓存放入
84 * @param key 键
85 * @param value 值
86 * @return true成功 false失败
87 */
88 public boolean set(String key, Object value) {
89 try {
90 redisTemplate.opsForValue().set(key, value);
91 return true;
92 } catch (Exception e) {
93 e.printStackTrace();
94 return false;
95 }
96 }
97 /**
98 * 普通缓存放入并设置时间
99 * @param key 键
100 * @param value 值
101 * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
102 * @return true成功 false 失败
103 */
104 public boolean set(String key, Object value, long time) {
105 try {
106 if (time > 0) {
107 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
108 } else {
109 set(key, value);
110 }
111 return true;
112 } catch (Exception e) {
113 e.printStackTrace();
114 return false;
115 }
116 }
117 /**
118 * 递增
119 * @param key 键
120 * @param delta 要增加几(大于0)
121 * @return
122 */
123 public long incr(String key, long delta) {
124 if (delta ) {
125 throw new RuntimeException("递增因子必须大于0");
126 }
127 return redisTemplate.opsForValue().increment(key, delta);
128 }
129 /**
130 * 递减
131 * @param key 键
132 * @param delta 要减少几(小于0)
133 * @return
134 */
135 public long decr(String key, long delta) {
136 if (delta ) {
137 throw new RuntimeException("递减因子必须大于0");
138 }
139 return redisTemplate.opsForValue().increment(key, -delta);
140 }
141
142 // ================================Map=================================
143 /**
144 * HashGet
145 * @param key 键 不能为null
146 * @param item 项 不能为null
147 * @return 值
148 */
149 public Object hget(String key, String item) {
150 return redisTemplate.opsForHash().get(key, item);
151 }
152 /**
153 * 获取hashKey对应的所有键值
154 * @param key 键
155 * @return 对应的多个键值
156 */
157 public Map
6.测试
简单测试如下
1 package com.gemdale.redis;
2
3 import com.databus.Log;
4 import com.winmine.utils.MailUtils;
5 import hibernate.Acount;
6 import hibernate.VehicleDevice;
7 import org.hibernate.Session;
8
9 import java.util.*;
10 import java.util.concurrent.ConcurrentSkipListMap;
11
12 public class RedisTest {
13 RedisTemplateService redisTemplateService = new RedisTemplateService();
14
15
16 public void test() {
17 Integer count = 1;
18 Set keySet = new LinkedHashSet();
19 Set acountSet = new LinkedHashSet();
20 ConcurrentSkipListMap keyMap = new ConcurrentSkipListMap();
21 ConcurrentSkipListMap acountMap = new ConcurrentSkipListMap();
22 Calendar calendar = null;
23 LinkedList list = new LinkedList();
24
25 while (count ) {
26 calendar = Calendar.getInstance();
27 // String key = "key"+count;
28 Integer key = count;
29 String testKey = RedisTemplateService.getStringRedisTemplate().opsForValue().get("testkey");
30 Log.info("键testkey:" + testKey);
31 redisTemplateService.set(key.toString(),calendar.getTimeInMillis());
32 String value = RedisTemplateService.getStringRedisTemplate().opsForValue().get(key.toString());
33 Log.info(key + ":" + value);
34 if (keyMap.size() >= 10){
35 keyMap.remove(keyMap.lastKey());
36 keyMap.put(key,value);
37 }
38 list.removeFirst();
39 list.add(calendar.getTimeInMillis());
40
41
42 Integer userStr = count;
43 Acount user = new Acount();
44 user.setUserid(calendar.getTimeInMillis() + "");
45 user.setUserPrincipalName("user1");
46 user.setUsername("user1");
47 user.setPassword("user1password");
48 user.setEmail("user@user.com");
49 user.setStatus(0);
50 user.setMdid("mdid");
51 user.setLoginType(3);
52 redisTemplateService.set(userStr.toString(),user);
53>