记录项目中常用的工具类
1、Json 工具类
引入依赖:
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
工具类:
import com.alibaba.fastjson.JSONObject;
/**
* Json工具类
*/
public class JsonUtils {
/**
* java对象转成json字符串
* @param obj 源对象
* @return JSON字符串
*/
public static String objToJson(Object obj) {
if (obj != null) {
return JSONObject.toJSONString(obj);
}
return null;
}
/**
* json字符串转成java对象
* @param json JSON字符串
* @param clazz 转成的目标对象类型
* @param <T> 目标对象
* @return
*/
public static <T> T jsonToObj(String json, Class<T> clazz) {
return JSONObject.parseObject(json, clazz);
}
}
2、Redis 工具类
package com.cbec.util;
import com.cbec.bean.ScoreOrder;
import com.cbec.constans.ConsCode;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Redis工具类,使用之前请确保RedisTemplate成功注入
*
* @author ye17186
* @version 2019/2/22 10:48
*/
@Component
public final class RedisUtils {
private RedisUtils() {
}
@SuppressWarnings("unchecked")
private static RedisTemplate<String, Object> redisTemplate = SpringUtils.getBean("redisTemplate");
// @Autowired
// public static RedisTemplate redisTemplate;
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @return true=设置成功;false=设置失败
*/
public static boolean expire(final String key, final long timeout) {
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @param unit 时间单位
* @return true=设置成功;false=设置失败
*/
public static boolean expire(final String key, final long timeout, final TimeUnit unit) {
Boolean ret = redisTemplate.expire(key, timeout, unit);
return ret != null && ret;
}
/**
* 删除单个key
*
* @param key 键
* @return true=删除成功;false=删除失败
*/
public static boolean del(final String key) {
Boolean ret = redisTemplate.delete(key);
return ret != null && ret;
}
/**
* 删除多个key
*
* @param keys 键集合
* @return 成功删除的个数
*/
public static long del(final Collection<String> keys) {
Long ret = redisTemplate.delete(keys);
return ret == null ? 0 : ret;
}
/**
* 取出指定前缀的key集合
*
* @param prefix Redis键前缀
*/
public static Set<String> getKeys(final String prefix) {
Set<String> keys = redisTemplate.keys(prefix);
for(String key : keys){
System.out.println(key);
}
return keys;
}
/**
* 存入普通对象
*
* @param key Redis键
* @param value 值
*/
public static void set(final String key, final Object value) {
redisTemplate.opsForValue().set(key, value);
}
// 存储普通对象操作
/**
* 存入普通对象
*
* @param key 键
* @param value 值
* @param timeout 有效期,单位秒
*/
public static void set(final String key, final Object value, final long timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
/**
* 获取普通对象
*
* @param key 键
* @return 对象
*/
public static Object get(final String key) {
try {
return redisTemplate.opsForValue().get(key);
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 通过search模糊匹配订单
* 订单的存储规则:
* 主键: scoreorder+"_"+订单id+“_B_”+买方id+"_S_"+卖方id
* value: 订单信息
* @param search : 订单id 或 买方id 或 卖方id
* @param sb : 订单查:"" 买方查:B 卖方查:S
* @return
*/
public static List<ScoreOrder> likeOrderGet(final String search,String sb) {
try {
List<ScoreOrder> list = new ArrayList<>();
String pattern = ConsCode.SCORE_OREDER + "*"+ sb +"_" + search + "*";
Set<String> keys = redisTemplate.keys(pattern);
for (String k: keys) {
Object obj = redisTemplate.opsForValue().get(k);
if(obj != null) {
list.add((ScoreOrder)obj);
}
}
return list;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 根据模糊的key获取准确的key集合
* @param key 订单id 或 买方id 或 卖方id
* @param sb 订单查:"", 买方查:B ,卖方查:S
* @return
*/
public static String getCurrencyKey(String key,String sb) {
String pattern = ConsCode.SCORE_OREDER + "*"+sb+"_" + key + "*";
Set<String> keys = redisTemplate.keys(pattern);
if(keys != null && keys.size() > 0) {
return keys.iterator().next();
}
return null;
}
/**
* 查询订单的过期时间
* @param search 订单id 或 买方id 或 卖方id
* @param sb 订单查:"", 买方查:B ,卖方查:S
* @return
*/
public static Long getOrderExpireTime(String search,String sb) {
String key = getCurrencyKey(search, sb);
if(key == null) {
return -2L; //key不存在
}
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
// 存储Hash操作
/**
* 往Hash中存入数据
*
* @param key Redis键
* @param hKey Hash键
* @param value 值
*/
public static void hPut(final String key, final String hKey, final Object value) {
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 往Hash中存入多个数据
*
* @param key Redis键
* @param values Hash键值对
*/
public static void hPutAll(final String key, final Map<String, Object> values) {
redisTemplate.opsForHash().putAll(key, values);
}
/**
* 获取Hash中的数据
*
* @param key Redis键
* @param hKey Hash键
* @return Hash中的对象
*/
public static Object hGet(final String key, final String hKey) {
return redisTemplate.opsForHash().get(key, hKey);
}
/**
* 获取多个Hash中的数据
*
* @param key Redis键
* @param hKeys Hash键集合
* @return Hash对象集合
*/
public static List<Object> hMultiGet(final String key, final Collection<Object> hKeys) {
return redisTemplate.opsForHash().multiGet(key, hKeys);
}
// 存储Set相关操作
/**
* 往Set中存入数据
*
* @param key Redis键
* @param values 值
* @return 存入的个数
*/
public static long sSet(final String key, final Object... values) {
Long count = redisTemplate.opsForSet().add(key, values);
return count == null ? 0 : count;
}
/**
* 删除Set中的数据
*
* @param key Redis键
* @param values 值
* @return 移除的个数
*/
public static long sDel(final String key, final Object... values) {
Long count = redisTemplate.opsForSet().remove(key, values);
return count == null ? 0 : count;
}
// 存储List相关操作
/**
* 往List中存入数据
*
* @param key Redis键
* @param value 数据
* @return 存入的个数
*/
public static long rPush(final String key, final Object value) {
Long count = redisTemplate.opsForList().leftPush(key, value);
return count == null ? 0 : count;
}
/**
* 往List中存入数据
*
* @param key Redis键
* @param value 数据
* @return 存入的个数
*/
public static long lPush(final String key, final Object value) {
Long count = redisTemplate.opsForList().rightPush(key, value);
return count == null ? 0 : count;
}
/**
* 往List中存入多个数据
*
* @param key Redis键
* @param values 多个数据
* @return 存入的个数
*/
public static long lPushAll(final String key, final Collection<Object> values) {
Long count = redisTemplate.opsForList().rightPushAll(key, values);
return count == null ? 0 : count;
}
/**
* 往List中存入多个数据
*
* @param key Redis键
* @param values 多个数据
* @return 存入的个数
*/
public static long lPushAll(final String key, final Object... values) {
Long count = redisTemplate.opsForList().rightPushAll(key, values);
return count == null ? 0 : count;
}
/**
* 从List中获取begin到end之间的元素
*
* @param key Redis键
* @param start 开始位置
* @param end 结束位置(start=0,end=-1表示获取全部元素)
* @return List对象
*/
public static List<Object> lGet(final String key, final int start, final int end) {
return redisTemplate.opsForList().range(key, start, end);
}
}