redis存储Data truncation: Incorrect datetime value
最近在编写项目时,用redis存储结果一直报转换异常对此我有了以下思路1.在mysql进行格式转换2.在java先转换3.存json之前就进行格式转换
但是以上方法都不行,因为数据需要的是date类型,如果走转换又过慢有大佬提了一下使用序列化解决,我就尝试了一下,还真可以,以下是我编写思路1.首先需要序列化的类继承Serializable接口2.编写序列化工具类
123456789101112131415161718192021222324252627282930313233343536package com.tiantai.policy.utils;import java.io.*;public class SerializeUtil { // 序列化 public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; byte[] bytes = nu ...
缓存双写不一致
缓存数据库双写不一致
高并发下缓存与数据库双写不一致解决方案
正常的缓存数据库更新的时候应该是先执行线程1,然后执行线程2
如果线程1卡顿了一下,这时就会造成数据库和缓存不一致的情况线程1把线程2更新的缓存数据给覆盖了
最开始的缓存不一致问题以及解决方案
问题:先修改数据库,再删除缓存,如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据出现不一致。
解决思路: 先删除缓存,再修改数据库,如果删除缓存成功了修改数据库失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致,因为读的时候缓存没有,则读数据库中旧数据,然后更新到缓存中。
2、并发下数据缓存不一致问题分析问题: 第一个请求数据发生变更,先删除了缓存,然后要去修改数据库,此时还没来得及去修改; 第二个请求过来去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中; 第三个请求读取缓存中的数据 (此时第一个请求已经完成了数据库修改的操作)。 完了,数据库和缓存中的数据不一样了。。。。
分析原因:
只有在对同一条数据并发读写的时候,才可能会出现这种问题。其实如果说你的并 ...
使用redis实现分布式锁
Java中提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下合理选择能展现非常高的效率
分布式锁一般有三种实现方式:数据库乐观锁,Redis分布式锁,Zookeeper分布式锁
本篇博客主要详细介绍redis分布式锁的进化,进化所解决的场景问题
可靠性首先,为了确保分布式锁的可用性,我们需要确保锁能同时满足以下四个条件
互斥性:在任意时刻,只有一个客户端能持有锁。
不会发生死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
具有容错性:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
解铃还须系铃人:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
实现原理在单机下可以用synchronized同步代码块加锁
123456789101112131415@Autowiredprivate StringRedisTemplate redisTemplate;@Testpublic void deductStock(){ synchronized (this){ int st ...
redis锁
暂时没时间整细节,给个粗略的记录一下
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package com.util.qunar;import com.service.qunar.FQunarSearchService;import com.service.zl.ValidationCabinAndPrice_QNR;import org.apache.log4j.Logger;import org.redisson.Redisson;import org.redisson.api.RLock;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import org.springframework.beans.factory.InitializingBean;import or ...
解决微信小程序键盘上移
在微信开发者工具没有出现上移的情况,但是一到真机调试就出现了,把页面设置固定布局也不管用然后查询微信官方文档,是这样解释的小程序在input框输入时,默认会开启自动上推的功能,但是有的时候会出现卡顿的现象,想关闭自动上推,把adjust-position设置为false就可以了
12345678910<van-row gutter="20"> <van-col span="24"> <van-field left-icon="eye-o" adjust-position="false" placeholder="请输入密码" name="input" type="password" model:value="{{password}}" /> ...
初探xxljob
下载地址
搭建xxljob需要提前准备好
123maven3+jdk8+mysql5.7+
1.首先初始化SQL脚本建立必须的库和表
2.对于解压的文件分为三个模块12345xxl-job-admin:调度中心xxl-job-core:公共依赖xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器) :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式; :xxl-job-executor-sample-frameless:无框架版本;
其中:xxl-job-core是需要引入的源码包后续我们可以用以下形式引入
12345<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version> ...
简单吐槽一下xml
描述
近期与供应商对接的时候,对方的接口还是比较稳定的xml接口,与当下流行的json的便捷性相比还是不太方便,中间我也使用了几种工具类,很难有完全适配的,下文我将讲述我解析xml的历程
初次接触
第一次接触xml接口是在对接物流渠道商的时候,当时他们使用的对接方式为soap格式,刚接触解析起来简直要了老命,什么是soap呢?是基于xml的简易协议,常用于webservie,它有自己的一套编码规则,如下
这种请求网上解析方式就很少,很多只有解析没有构造,文本也不太全,目前见过写的比较好的解析如下:https://blog.csdn.net/RUANJIAOXIAOZI/article/details/90770534
当然还有xsd模式的xml
因为这次讲的是xml解析,上面只是举个栗子,让你们体会一下xml的变种有多难😭
这种接口不过分的说,至少十年往上的架构了
使用dom4j/jsoup解析
dom4j应该是最经典解析xml的api了,性能优异,功能强大。但是使用起来还是略为麻烦,有点像用java的jsoup去爬取网页,需要一个一个节点的去找
12345678910 ...