利用Redis实现流水号生成
文章首发于:clawhub.club
最近有个需求,涉及到生成特定流水号:编码+14位时间YYYYMMDDHH24MMSS+6位流水号(定长),序号从000001开始,增量步长为1。因为系统为集群部署,所以需要中间件来做后6位的增量计数。redis的INCR命令正好合适:INCR 命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
因为系统使用的是jedis 2.9.0 所以封装了两个简单的方法:接口:
1234567891011/** * 对某个键的值自增 * 内部键对应的值自增与键的过期时间设置非原子性, * 假设多线程,同时执行自增操作,计数没有问题, * 过期时间在此键没有调用时开始生校。 * * @param key 键 * @param cacheSeconds 超时时间,0为不超时 * @return 值 */ long getAndIncrement(String key, int cacheSeconds);
...
maven项目打包时引入外部jar包
文章首发于:clawhub.club
最近在重构公司的老项目代码,将jar包通过maven管理,有些包不存在于maven仓库,所以要通过maven将本地jar打到最终的包中。
123456789<!--淘宝大鱼--><dependency> <groupId>com.taobao</groupId> <artifactId>taobao-sdk-java-auto</artifactId> <systemPath>${project.basedir}/lib/taobao-sdk-java-auto_1455552377940-20160816.jar</systemPath> <version>1455552377940-20160816</version> <scope>system</scope></dependency>
pom文件的build节点下必须增加资源配置,否 ...
java字符串补零到定长
文章首发于:clawhub.club
String.format(“%06d”, 1)
%06d分析%d:整数类型(十进制)0:填补项6:填补的位数
附上转换表:
redis自增序列
文章首发于:clawhub.club
Redis Incrby 命令Redis Incrby 命令将 key 中储存的数字加上指定的增量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
redis Incrby 命令基本语法如下:1INCRBY KEY_NAME INCR_AMOUNT
springboot-redis 中自增序列使用123456//redis自增RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));//两秒超时entityIdCounter.expire(2, TimeUnit.SECONDS);//获取自增值long num = entityIdCounter.getAndIncrement( ...
java生成6位随机数
文章首发于:clawhub.club
Math.random结果:[0.0,1.0),大于等于0但是小于1的浮点数值
6位随机字符串12345String result = "";for (int i = 0; i<6; i++){ int intVal = (int)(Math.random()*26+97); result = result +(char) intVal;}
0-9 48-57A-Z 65-90a-z 97-122
6位随机数字1(int) ((Math.random() * 9 + 1) * 100000)
结果为:[100000,1000000)
JAVA一个或多个空格分隔字符串,split方法分析。
文章首发于:clawhub.club
java中通过split方法来分隔字符串,且支持正则表达式。空格在正则表达式中用\s标识,+号表示出现一次或者多次。
使用一个空格分隔字符串123456789101112//代码 String string = "Hi,hello world!"; String[] strArr = string.split("\\s"); System.out.println(strArr.length); for (String str : strArr) { System.out.println(str); }//结果3Hi,helloworld!
使用一个或多个空格分割字符串1234567891011//代码 String string = "Hi,hello world!"; String[] strArr = string.split("\\s+&quo ...
Mybatis批量插入
文章首发于:clawhub.club
mybatis是通过foreach标签实现批量插入。在构建 IN 条件语句的时候,遍历集合。
foreach标签官方示例123456789<select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach></select>
属性介绍
collection:指定要遍历的集合:
list类型的参数会特殊处理封装在map中,map的key就叫list
item:将当前遍历出 ...
javax.crypto.BadPaddingException-Given final block not properly padded
文章首发于:clawhub.club
项目中用到了AES加密,在windows上运行的好好的,但是在linux下,解密时就会抛出:javax.crypto.BadPaddingException: Given final block not properly padded。记录一下,以后不要踩这种坑。
出问题的代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475/** * AES加密字符串 * * @param content 需要被加密的字符串 * @param password 加密需要的密码 * @return 密文 byte [ ] */ public static byte[] encrypt(String content, String password) { try ...
MQTT协议解析
文章首发于:clawhub.club
转 MQTT协议-MQTT协议解析(MQTT数据包结构)协议就是通信双方的一个约定,即,表示第1位传输的什么、第2位传输的什么……。在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、 可变头(Variable header)、 消息体(payload)三部分构成。
MQTT 数据包结构
固定头(Fixed header),存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识
可变头(Variable header),存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容
消息体(Payload),存在于部分MQTT数据包中,表示客户端收到的具体内容
1 MQTT固定头固定头存在于所有MQTT数据包中,其结构如下:
Bit
7
6
5
4
3
2
1
0
byte 1
MQTT数据包类型
不同类型MQTT数据包的具体标识
byte 2…
剩余长度
1.1 MQTT数据包类型位置:byte 1, bits 7-4。
相于一个4位的无符号值,类型如 ...
FTPS碰到的事儿
文章首发于:clawhub.club
背景传输数据方案设计时,把SFTP定为了传输工具,但是昨天突然说SFTP不安全,要变成FTPS。
SFTP为什么不安全SFTP全称叫Secure File Transfer Protocol,客户端和服务器端都通过端口22传输和接收数据。SFTP 为 SSH的一部分,而SSH专为远程登录会话和其他网络服务提供安全性的协议。
又因为服务器是集群的,内部互联,所以不能对外开放这个SFTP。
FTPS是啥就是FTP加一层外壳SSL/TSL。
FTP全称:File Transfer Protocol 是用于在网络上进行文件传输的一套标准协议。有主动和被动两种传输方式,服务器端和客户端个通过不同的端口传输命令以及数据。
FTP主动模式的传输过程:
FTP被动模式的传输过程:
**SSL(**Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL/TLS协 ...