工作中我们经常使用到自定义的开发工具类,本文就列举几个中恒在实际工作中常用的几个工具类,供弟兄们参考。
如果本文对您有帮助,欢迎关注、点赞或分享您在工作中经常使用到的工具类。
日期处理public class DateUtils { // 日志 private static final Logger logger = Logger.getLogger(DateUtils.class); /** * 时间格式(yyyy-MM-dd) */ public final static String DATE_PATTERN = "yyyy-MM-dd"; /** * 无分隔符日期格式 "yyyyMMddHHmmssSSS" */ public static String DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS_SSS = "yyyyMMddHHmmssSSS"; /** * 时间格式(yyyy-MM-dd HH:mm:ss) */ public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy" + "/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; // 日期转换格式数组 public static String[][] regularExp = new String[][]{ // 默认格式 {"\\d{4}-((([0][1,3-9]|[1][0-2]|[1-9])-([0-2]\\d|[3][0,1]|[1-9]))|((02|2)-(([1-9])|[0-2]\\d)))\\s+([0,1]\\d|[2][0-3]|\\d):([0-5]\\d|\\d):([0-5]\\d|\\d)", DATE_TIME_PATTERN}, // 仅日期格式 年月日 {"\\d{4}-((([0][1,3-9]|[1][0-2]|[1-9])-([0-2]\\d|[3][0,1]|[1-9]))|((02|2)-(([1-9])|[0-2]\\d)))", DATE_PATTERN}, // 带毫秒格式 {"\\d{4}((([0][1,3-9]|[1][0-2]|[1-9])([0-2]\\d|[3][0,1]|[1-9]))|((02|2)(([1-9])|[0-2]\\d)))([0,1]\\d|[2][0-3])([0-5]\\d|\\d)([0-5]\\d|\\d)\\d{1,3}", DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS_SSS}}; public static String format(Date date) { return format(date, DATE_PATTERN); } public static String format(Date date, String pattern) { if (date != null) { SimpleDateFormat df = new SimpleDateFormat(pattern); return df.format(date); } return null; } public static String timeToStr(Long time, String pattern) { SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); if (time.toString().length() < 13) { time = time * 1000L; } Date date = new Date(time); String value = dateFormat.format(date); return value; } public static long strToTime(String timeStr) { Date time = strToDate(timeStr); return time.getTime() / 1000; } /** * 转换为时间类型格式 * @param strDate 日期 * @return */ public static Date strToDate(String strDate) { try { String strType = getDateFormat(strDate); SimpleDateFormat sf = new SimpleDateFormat(strType); return new Date((sf.parse(strDate).getTime())); } catch (Exception e) { return null; } } /** * 根据传入的日期格式字符串,获取日期的格式 * @return 秒 */ public static String getDateFormat(String date_str) { String style = null; if (StringUtils.isEmpty(date_str)) { return null; } boolean b = false; for (int i = 0; i < regularExp.length; i++) { b = date_str.matches(regularExp[i][0]); if (b) { style = regularExp[i][1]; } } if (StringUtils.isEmpty(style)) { logger.info("date_str:" + date_str); logger.info("日期格式获取出错,未识别的日期格式"); } return style; } /** * 将字符串类型的转换成Date类型 * @param dateStr 字符串类型的日期 yyyy-MM-dd * @return Date类型的日期 * @throws ParseException */ public static Date convertStringToDate(String dateStr) { // 返回的日期 Date resultDate = null; try { // 日期格式转换 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); resultDate = sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return resultDate; } /** * 日期型字符串转化为日期 格式 */ public static Date parseDate(Object str) { if (str == null) { return null; } try { return org.apache.commons.lang3.time.DateUtils.parseDate(str.toString(), parsePatterns); } catch (ParseException e) { return null; } }}Base64加密和解密public class Base64Utils { /** * 加密 * @param str * @return */ public static String encode(String str) { Base64.Encoder encoder = Base64.getEncoder(); byte[] b = str.getBytes(StandardCharsets.UTF_8); return encoder.encodeToString(b); } /** * 解密 * @param s * @return */ public static String decode(String s) { Base64.Decoder decoder = Base64.getDecoder(); return new String(decoder.decode(s), StandardCharsets.UTF_8); }}Bean工具类public class BeanUtils extends org.springframework.beans.BeanUtils { /** * 默认忽略字段<br> */ private static String[] IGNORE_PROPERTIES = {"createUser", "createTime"}; /** * 重写copyProperties,NULL值,可以拷贝 * @param source 拷贝元实体 * @param target 拷贝目标实体 * @throws BeansException 抛出异常 */ public static void copyProperties(Object source, Object target, String[] ignoreList) throws BeansException { Assert.notNull(source, "Source must not be null"); Assert.notNull(target, "Target must not be null"); List<String> ignorePropertyList = new ArrayList<String>(); ignorePropertyList.addAll(Arrays.asList(IGNORE_PROPERTIES)); // 传入的忽略数组非空扩展忽略数组 if (ignoreList != null && ignoreList.length != 0) { ignorePropertyList.addAll(Arrays.asList(ignoreList)); } Class<?> actualEditable = target.getClass(); PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable); for (PropertyDescriptor targetPd : targetPds) { if (targetPd.getWriteMethod() != null) { PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()); if (sourcePd != null && sourcePd.getReadMethod() != null && !ignorePropertyList.contains(targetPd.getName())) { try { Method readMethod = sourcePd.getReadMethod(); if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { readMethod.setAccessible(true); } Object value = readMethod.invoke(source); // 这里判断value是否为空,过滤Integer类型字段 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等 // if (value != null && // !"java.lang.Integer".equals(readMethod.getReturnType().getName())) { // if (value != null && !"".equals(value)) { Method writeMethod = targetPd.getWriteMethod(); if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { writeMethod.setAccessible(true); } writeMethod.invoke(target, value); // } } catch (Throwable ex) { throw new FatalBeanException("Could not copy properties '" + targetPd.getName() + "' from source to target", ex); } } } } } /** * 重写copyProperties,忽略NULL值 * @param source * @param target * @throws BeansException */ public static void copyProperties(Object source, Object target) throws BeansException { Assert.notNull(source, "Source must not be null"); Assert.notNull(target, "Target must not be null"); Class<?> actualEditable = target.getClass(); PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable); for (PropertyDescriptor targetPd : targetPds) { if (targetPd.getWriteMethod() != null) { PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()); if (sourcePd != null && sourcePd.getReadMethod() != null) { try { Method readMethod = sourcePd.getReadMethod(); if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { readMethod.setAccessible(true); } Object value = readMethod.invoke(source); // 这里判断value是否为空,过滤Integer类型字段 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等 // if (value != null && !"java.lang.Integer".equals(readMethod.getReturnType().getName())) { if (value != null && !"".equals(value)) { Method writeMethod = targetPd.getWriteMethod(); if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { writeMethod.setAccessible(true); } writeMethod.invoke(target, value); } } catch (Throwable ex) { throw new FatalBeanException("Could not copy properties '" + targetPd.getName() + "' from source to target", ex); } } } } } /** * bean 转为map * @param obj bean对象 * @param isAllowNull 空字段是否转换 false 不转换 * @return map值 */ public static Map<String, Object> bean2Map(Object obj, boolean isAllowNull) { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); // 过滤class属性 if (!key.equals("class")) { // 得到property对应的getter方法 Method getter = property.getReadMethod(); Object value = getter.invoke(obj); if (isAllowNull || value != null && !value.toString().isEmpty()) { map.put(key, value); } } } } catch (Exception e) { System.out.println("transBean2Map Error " + e); } return map; } /** * map转bean * @param targetMap 被转化的map * @param obj 对象 */ public static void map2Bean(Map<String, Object> targetMap, Object obj) { Map<String, Object> map = new HashMap<String, Object>(); for (String key : targetMap.keySet()) { Object value = targetMap.get(key); map.put(StringUtils.lineToHump(key), value); } try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); if (map.containsKey(key)) { try { Object value = map.get(key); // 得到property对应的setter方法 Method setter = property.getWriteMethod(); setter.invoke(obj, value); } catch (Exception e) { throw new RuntimeException("实体转换错误:" + key); } } } } catch (Exception e) { e.getStackTrace(); throw new RuntimeException("数据转换异常!"); } }}cookie处理工具类public class CookieUtils { /** * 得到Cookie的值, 不编码 * @param request * @param cookieName * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName) { return getCookieValue(request, cookieName, false); } /** * 得到Cookie的值, * @param request * @param cookieName * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) { Cookie[] cookieList = request.getCookies(); if (cookieList == null || cookieName == null) { return null; } String retValue = null; try { for (int i = 0; i < cookieList.length; i++) { if (cookieList[i].getName().equals(cookieName)) { if (isDecoder) { retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8"); } else { retValue = cookieList[i].getValue(); } break; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return retValue; } /** * 得到Cookie的值, * @param request * @param cookieName * @return */ public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) { Cookie[] cookieList = request.getCookies(); if (cookieList == null || cookieName == null) { return null; } String retValue = null; try { for (int i = 0; i < cookieList.length; i++) { if (cookieList[i].getName().equals(cookieName)) { retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString); break; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return retValue; } /** * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码 */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue) { setCookie(request, response, cookieName, cookieValue, -1); } /** * 设置Cookie的值 在指定时间内生效,但不编码 */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage) { setCookie(request, response, cookieName, cookieValue, cookieMaxage, false); } /** * 设置Cookie的值 不设置生效时间,但编码 */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, boolean isEncode) { setCookie(request, response, cookieName, cookieValue, -1, isEncode); } /** * 设置Cookie的值 在指定时间内生效, 编码参数 */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode); } /** * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码) */ public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) { doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString); } /** * 删除Cookie带cookie域名 */ public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String cookieName) { doSetCookie(request, response, cookieName, "", -1, false); } /** * 设置Cookie的值,并使其在指定时间内生效 * @param cookieMaxage cookie生效的最大秒数 */ public static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { try { if (cookieValue == null) { cookieValue = ""; } else if (isEncode) { cookieValue = URLEncoder.encode(cookieValue, "utf-8"); } Cookie cookie = new Cookie(cookieName, cookieValue); if (cookieMaxage > 0) { cookie.setMaxAge(cookieMaxage); } String domainName = getDomainName(request); cookie.setDomain(domainName); cookie.setPath("/"); response.addCookie(cookie); } catch (Exception e) { e.printStackTrace(); } } /** * 设置Cookie的值,并使其在指定时间内生效 * @param cookieMaxage cookie生效的最大秒数 */ public static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) { try { if (cookieValue == null) { cookieValue = ""; } else { cookieValue = URLEncoder.encode(cookieValue, encodeString); } Cookie cookie = new Cookie(cookieName, cookieValue); if (cookieMaxage > 0) { cookie.setMaxAge(cookieMaxage); } if (null != request) {// 设置域名的cookie String domainName = getDomainName(request); cookie.setDomain(domainName); } cookie.setPath("/"); response.addCookie(cookie); } catch (Exception e) { e.printStackTrace(); } } /** * 得到cookie的域名 */ private static final String getDomainName(HttpServletRequest request) { String domainName = null; String serverName = request.getRequestURL().toString(); if (serverName == null || serverName.equals("")) { domainName = ""; } else { serverName = serverName.toLowerCase(); serverName = serverName.substring(7); final int end = serverName.indexOf("/"); serverName = serverName.substring(0, end); final String[] domains = serverName.split("\\."); int len = domains.length; if (len > 3) { // www.xxx.com.cn domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1]; } else if (len <= 3 && len > 1) { // xxx.com or xxx.cn domainName = "." + domains[len - 2] + "." + domains[len - 1]; } else { domainName = serverName; } } if (domainName != null && domainName.indexOf(":") > 0) { String[] ary = domainName.split("\\:"); domainName = ary[0]; } return domainName; }}ID 生成工具类public class IdUtils { /** * 主要功能:生成流水号 yyyyMMddHHmmssSSS + 3位随机数 * 注意事项:无 * @return 流水号 */ public static String createIdByDate() { // 精确到毫秒 SimpleDateFormat fmt = new SimpleDateFormat("(yyyyMMddHHmmssSSS)"); String suffix = fmt.format(new Date()); suffix = suffix + "-" + Math.round((Math.random() * 100000)); return suffix; } /** * 主要功能:生成uuid * 注意事项:无 * @return uuid 32 位 */ public static String createIdbyUUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } /** * 获取随机UUID * @return 随机UUID */ public static String randomUUID() { return UUID.randomUUID().toString(); } /** * 简化的UUID,去掉了横线 * @return 简化的UUID,去掉了横线 */ public static String simpleUUID() { return UUID.randomUUID().toString(true); } /** * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID * @return 随机UUID */ public static String fastUUID() { return UUID.fastUUID().toString(); } /** * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID * @return 简化的UUID,去掉了横线 */ public static String fastSimpleUUID() { return UUID.fastUUID().toString(true); }}Redis工具类@Componentpublic class RedisUtils { private Logger log = LoggerFactory.getLogger(this.getClass()); /** * 默认编码 */ private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; /** * key序列化 */ private static final StringRedisSerializer STRING_SERIALIZER = new StringRedisSerializer(); /** * value 序列化 */ private static final JdkSerializationRedisSerializer OBJECT_SERIALIZER = new JdkSerializationRedisSerializer(); /** * Spring Redis Template */ private RedisTemplate<String, Object> redisTemplate; /** * spring自动调用注入redisTemplate */ public RedisUtils(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; //设置序列化器 this.redisTemplate.setKeySerializer(STRING_SERIALIZER); this.redisTemplate.setValueSerializer(OBJECT_SERIALIZER); this.redisTemplate.setHashKeySerializer(STRING_SERIALIZER); this.redisTemplate.setHashValueSerializer(OBJECT_SERIALIZER); } /** * 获取链接工厂 */ public RedisConnectionFactory getConnectionFactory() { return this.redisTemplate.getConnectionFactory(); } /** * 获取 RedisTemplate对象 */ public RedisTemplate<String, Object> getRedisTemplate() { return redisTemplate; } /** * 清空DB * @param node redis 节点 */ public void flushDB(RedisClusterNode node) { this.redisTemplate.opsForCluster().flushDb(node); } /** * 添加到带有 过期时间的 缓存 * @param key redis主键 * @param value 值 * @param time 过期时间(单位秒) */ public void setExpire(final byte[] key, final byte[] value, final long time) { redisTemplate.execute((RedisCallback<Long>) connection -> { connection.setEx(key, time, value); log.debug("[redisTemplate redis]放入 缓存 url:{} ========缓存时间为{}秒", key, time); return 1L; }); } /** * 添加到带有 过期时间的 缓存 * @param key redis主键 * @param value 值 * @param time 过期时间(单位秒) */ public void setExpire(final String key, final Object value, final long time) { redisTemplate.execute((RedisCallback<Long>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = OBJECT_SERIALIZER.serialize(value); connection.setEx(keys, time, values); return 1L; }); } /** * 一次性添加数组到 过期时间的 缓存,不用多次连接,节省开销 * @param keys redis主键数组 * @param values 值数组 * @param time 过期时间(单位秒) */ public void setExpire(final String[] keys, final Object[] values, final long time) { redisTemplate.execute((RedisCallback<Long>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); for (int i = 0; i < keys.length; i++) { byte[] bKeys = serializer.serialize(keys[i]); byte[] bValues = OBJECT_SERIALIZER.serialize(values[i]); connection.setEx(bKeys, time, bValues); } return 1L; }); } /** * 一次性添加数组到 过期时间的 缓存,不用多次连接,节省开销 * @param keys the keys * @param values the values */ public void set(final String[] keys, final Object[] values) { redisTemplate.execute((RedisCallback<Long>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); for (int i = 0; i < keys.length; i++) { byte[] bKeys = serializer.serialize(keys[i]); byte[] bValues = OBJECT_SERIALIZER.serialize(values[i]); connection.set(bKeys, bValues); } return 1L; }); } /** * 添加到缓存 * * @param key the key * @param value the value */ public void set(final String key, final Object value) { redisTemplate.execute((RedisCallback<Long>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = OBJECT_SERIALIZER.serialize(value); connection.set(keys, values); log.debug("[redisTemplate redis]放入 缓存 url:{}", key); return 1L; }); } /** * 查询在这个时间段内即将过期的key * @param key the key * @param time the time * @return the list */ public List<String> willExpire(final String key, final long time) { final List<String> keysList = new ArrayList<>(); redisTemplate.execute((RedisCallback<List<String>>) connection -> { Set<String> keys = redisTemplate.keys(key + "*"); for (String key1 : keys) { Long ttl = connection.ttl(key1.getBytes(DEFAULT_CHARSET)); if (0 <= ttl && ttl <= 2 * time) { keysList.add(key1); } } return keysList; }); return keysList; } /** * 查询在以keyPatten的所有 key * * @param keyPatten the key patten * @return the set */ public Set<String> keys(final String keyPatten) { return redisTemplate.execute((RedisCallback<Set<String>>) connection -> redisTemplate.keys(keyPatten + "*")); } /** * 根据key获取对象 * * @param key the key * @return the byte [ ] */ public byte[] get(final byte[] key) { byte[] result = redisTemplate.execute((RedisCallback<byte[]>) connection -> connection.get(key)); log.debug("[redisTemplate redis]取出 缓存 url:{} ", key); return result; } /** * 根据key获取对象 * * @param key the key * @return the string */ public Object get(final String key) { Object resultStr = redisTemplate.execute((RedisCallback<Object>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = connection.get(keys); return OBJECT_SERIALIZER.deserialize(values); }); log.debug("[redisTemplate redis]取出 缓存 url:{} ", key); return resultStr; } /** * 根据key获取对象 * @param keyPatten the key patten * @return the keys values */ public Map<String, Object> getKeysValues(final String keyPatten) { log.debug("[redisTemplate redis] getValues() patten={} ", keyPatten); return redisTemplate.execute((RedisCallback<Map<String, Object>>) connection -> { RedisSerializer<String> serializer = getRedisSerializer(); Map<String, Object> maps = new HashMap<>(16); Set<String> keys = redisTemplate.keys(keyPatten + "*"); if (CollectionUtils.isNotEmpty(keys)) { for (String key : keys) { byte[] bKeys = serializer.serialize(key); byte[] bValues = connection.get(bKeys); Object value = OBJECT_SERIALIZER.deserialize(bValues); maps.put(key, value); } } return maps; }); } /** * Ops for hash hash operations. * * @return the hash operations */ public HashOperations<String, String, Object> opsForHash() { return redisTemplate.opsForHash(); } /** * 对HashMap *** 作 * * @param key the key * @param hashKey the hash key * @param hashValue the hash value */ public void putHashValue(String key, String hashKey, Object hashValue) { //log.debug("[redisTemplate redis] putHashValue() key={},hashKey={},hashValue={} ", key, hashKey, hashValue); opsForHash().put(key, hashKey, hashValue); } /** * 获取单个field对应的值 * * @param key the key * @param hashKey the hash key * @return the hash values */ public Object getHashValues(String key, String hashKey) { log.debug("[redisTemplate redis] getHashValues() key={},hashKey={}", key, hashKey); return opsForHash().get(key, hashKey); } /** * 根据key值删除 * * @param key the key * @param hashKeys the hash keys */ public void delHashValues(String key, Object... hashKeys) { log.debug("[redisTemplate redis] delHashValues() key={}", key); opsForHash().delete(key, hashKeys); } /** * key只匹配map * * @param key the key * @return the hash value */ public Map<String, Object> getHashValue(String key) { log.debug("[redisTemplate redis] getHashValue() key={}", key); return opsForHash().entries(key); } /** * 批量添加 * * @param key the key * @param map the map */ public void putHashValues(String key, Map<String, Object> map) { opsForHash().putAll(key, map); } /** * 集合数量 * * @return the long */ public long dbSize() { return redisTemplate.execute(RedisServerCommands::dbSize); } /** * 清空redis存储的数据 * * @return the string */ public String flushDB() { return redisTemplate.execute((RedisCallback<String>) connection -> { connection.flushDb(); return "ok"; }); } /** * 判断某个主键是否存在 * * @param key the key * @return the boolean */ public boolean exists(final String key) { return redisTemplate.execute((RedisCallback<Boolean>) connection -> connection.exists(key.getBytes(DEFAULT_CHARSET))); } /** * 删除key * * @param keys the keys * @return the long */ public long del(final String... keys) { return redisTemplate.execute((RedisCallback<Long>) connection -> { long result = 0; for (String key : keys) { result = connection.del(key.getBytes(DEFAULT_CHARSET)); } return result; }); } /** * 获取 RedisSerializer * * @return the redis serializer */ protected RedisSerializer<String> getRedisSerializer() { return redisTemplate.getStringSerializer(); } /** * 对某个主键对应的值加一,value值必须是全数字的字符串 * * @param key the key * @return the long */ public long incr(final String key) { return redisTemplate.execute((RedisCallback<Long>) connection -> { RedisSerializer<String> redisSerializer = getRedisSerializer(); return connection.incr(redisSerializer.serialize(key)); }); } /** * redis List 引擎 * * @return the list operations */ public ListOperations<String, Object> opsForList() { return redisTemplate.opsForList(); } /** * redis List数据结构 : 将一个或多个值 value 插入到列表 key 的表头 * * @param key the key * @param value the value * @return the long */ public Long leftPush(String key, Object value) { return opsForList().leftPush(key, value); } /** * redis List数据结构 : 移除并返回列表 key 的头元素 * * @param key the key * @return the string */ public Object leftPop(String key) { return opsForList().leftPop(key); } /** * redis List数据结构 :将一个或多个值 value 插入到列表 key 的表尾(最右边)。
* * @param key the key * @param value the value * @return the long */ public Long in(String key, Object value) { return opsForList().rightPush(key, value); } /** * redis List数据结构 : 移除并返回列表 key 的末尾元素 * * @param key the key * @return the string */ public Object rightPop(String key) { return opsForList().rightPop(key); } /** * redis List数据结构 : 返回列表 key 的长度 ; 如果 key 不存在,则 key 被解释为一个空列表,返回 0 ; 如果 key 不是列表类型,返回一个错误。
* * @param key the key * @return the long */ public Long length(String key) { return opsForList().size(key); } /** * redis List数据结构 : 根据参数 i 的值,移除列表中与参数 value 相等的元素 * * @param key the key * @param i the * @param value the value */ public void remove(String key, long i, Object value) { opsForList().remove(key, i, value); } /** * redis List数据结构 : 将列表 key 下标为 index 的元素的值设置为 value * * @param key the key * @param index the index * @param value the value */ public void set(String key, long index, Object value) { opsForList().set(key, index, value); } /** * redis List数据结构 : 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 end 指定。
* * @param key the key * @param start the start * @param end the end * @return the list */ public List<Object> getList(String key, int start, int end) { return opsForList().range(key, start, end); } /** * redis List数据结构 : 批量存储 * * @param key the key * @param list the list * @return the long */ public Long leftPushAll(String key, List<String> list) { return opsForList().leftPushAll(key, list); } /** * redis List数据结构 : 将值 value 插入到列表 key 当中,位于值 index 之前或之后,默认之后。
* * @param key the key * @param index the index * @param value the value */ public void insert(String key, long index, Object value) { opsForList().set(key, index, value); }}如果您在实际工作中有比较实用的工具类,欢迎分享一下,一起学习提高!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)