2020-09-25 18:31

GSON是挺气蛋,安卓上默认使用的就是GSON,不少东西挺是特立独行了。用了他,就的容忍他的气蛋。

2020-09-24 18:11

好的,接下来我就这么做了!

2020-09-24 17:29

刚才看了源码,确实是因为使用fst序列化,不同的序列化工具可能会增加一些额外的特征字节。我这个问题就是使用了JFinal封装的redis操作函数(这些函数都加了额外的序列化操作)。然后又用lua脚本去读数据,结果反序列化成string的时候,就出错了。现在只能是回避这个问题了,因为我控制不了lua脚本的序列化和反序列化,就只能使用jedis原生的取、放数据的函数来操作了。

2020-09-21 18:24

@JFinal,是的,我就是这么做的,使用jdk的线程池ExecutorService来控制的。我能保证线程里run函数每次循环执行,只会执行很少的点时间,一般不会超过1秒,其实就是往redis里的list压数据,和从redis的list里pop数据。这都会很快的。每次run的时候都去检查stop标志是否设置成true,如果为true,就停止run里的while,这样线程也就执行完了。从理论上来说,这种方法应该是可以保证数据不会丢失的。

2020-09-21 12:14

@JFinal 感谢波总的科普。我目前是做了一个线程管理插件。在onstop里把所有我起的线程设置stop标志,线程的run函数里while循环每次都判断这个标志,false就退出run,线程也就结束了。然后线程池等待所有线程执行完。再退出。按这个逻辑,目前测试看是可以控制住不丢数据的。当然,如果进程被-9kill掉,谁也没办法了。

2020-09-17 10:10

退出不会使用kill -9 方式。直接kill。JFinal会发起onStop回调。所有插件的onstop方法都会被调到。我自己写了一个插件,在插件里创建一个线程池。在插件里onstop里控制线程池shutdown,并且给每个线程设置标志位,线程里的run方法根据标志位决定是否继续循环。这样,就可以保证程序退出的时候,线程里的线程肯定能运行完。实际测试了一下,目前看还算可以。感谢@xiaoyi_e

2020-09-15 09:07

这个问题就到这里了!我也是早上看到这里以前有人问了这个问题。我也是一时着急,才发了这个反馈!

2020-09-15 09:06

@flyinkeke 经过一夜的纠结和评估,还是觉得把id改成varchar了。坑死人的js!谢谢你的回复。我已经按你那个连接把雪花算法改一下了。

2020-09-14 18:08

@JFinal 我刚遇到这个问题,在前端是解决不了的,目前所有浏览器对number的支持都是到2的53次方减1,这么一个数。浏览器已经是解决不了。只能是后台解决。

2020-09-11 11:47

@JFinal 我这里就是接受波总的建议,所有操作数据的地方都放在
Db.tx () -> {
这里是数据库操作
});
这样操作,保险