当前位置: 首页 > news >正文

深圳建设交易网站网站备案号有效期

深圳建设交易网站,网站备案号有效期,大名网站建设价格,河北城乡建设学校网站一。技术改造背景 由于之前的比较陈旧的技术,后面发起了技术改造,redis整体改后使用redisson框架。 二。问题 改造完成后,使用方反馈 缓存获取异常 异常信息如下 Caused by: java.io.CharConversionException: Unexpected EOF in the mid…

一。技术改造背景

由于之前的比较陈旧的技术,后面发起了技术改造,redis整体改后使用redisson框架。

二。问题

改造完成后,使用方反馈 缓存获取异常 异常信息如下

Caused by: java.io.CharConversionException: Unexpected EOF in the middle of a 4-byte UTF-32 char: got 1, needed 4, at char #1, byte #5)
at com.fasterxml.jackson.core.io.UTF32Reader.reportUnexpectedEOF(UTF32Reader.java:187)
at com.fasterxml.jackson.core.io.UTF32Reader.loadMore(UTF32Reader.java:248)
at com.fasterxml.jackson.core.io.UTF32Reader.read(UTF32Reader.java:126)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._loadMore(ReaderBasedJsonParser.java:276)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken2(ReaderBasedJsonParser.java:2727)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken(ReaderBasedJsonParser.java:2707)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1986)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:802)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3666)
at org.redisson.codec.JsonJacksonCodec$2.decode(JsonJacksonCodec.java:99)
at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:393)
at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:205)
at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:144)
at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:120)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:519)
at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)

三。问题定位

从日志上来看 解密失败了,回头看未改造的redis 存储的序列化方式是 hessian 而改造后的 redis存储的序列化方式是JsonJacksonCodec 导致反序列化报错

四。问题解决

具体问题定位到了后 解决办法就已经有了。

  • 修改redisson的序列化方式 保持和旧的序列化方式相同
  • 做缓存迁移或者缓存全量失效(理论来讲不太现实)

那这个很明显,选择修改redisson的序列化方式 保持和旧的序列化方式相同。
redison目前支持的 序列化方式

Codec class nameDescription
org.redisson.codec.Kryo5CodecKryo 5 binary codec (Android compatible) Default codec
org.redisson.codec.KryoCodecKryo 4 binary codec
org.redisson.codec.JsonJacksonCodecJackson JSON codec. Stores type information in @class field (Android compatible)
org.redisson.codec.TypedJsonJacksonCodecJackson JSON codec which doesn’t store type id (@class field) during encoding and doesn’t require it for decoding
org.redisson.codec.AvroJacksonCodecAvro binary json codec
org.redisson.codec.SmileJacksonCodecSmile binary json codec
org.redisson.codec.CborJacksonCodecCBOR binary json codec
org.redisson.codec.MsgPackJacksonCodecMsgPack binary json codec
org.redisson.codec.IonJacksonCodecAmazon Ion codec
org.redisson.codec.SerializationCodecJDK Serialization binary codec (Android compatible)
org.redisson.codec.LZ4CodecLZ4 compression codec. Uses Kryo5Codec for serialization by default
org.redisson.codec.SnappyCodecV2Snappy compression codec based on snappy-java project. Uses Kryo5Codec for serialization by default
org.redisson.codec.MarshallingCodecJBoss Marshalling binary codec Deprecated!
org.redisson.client.codec.StringCodecString codec
org.redisson.client.codec.LongCodecLong codec
org.redisson.client.codec.ByteArrayCodecByte array codec
org.redisson.codec.CompositeCodecAllows to mix different codecs as one

很意外并没有 我们需要的hessian的序列化 只能手写! redisson 默认的序列化方式为Kryo5Codec

首先引入依赖

<dependency><groupId>com.caucho</groupId><artifactId>hessian</artifactId><version>4.0.66</version>
</dependency>

其次继承 BaseCodec 实现我们的 HessianCoder 即可 完整的实现如下

import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.ByteBufInputStream;
import io.netty.buffer.ByteBufOutputStream;
import lombok.extern.slf4j.Slf4j;
import org.redisson.client.codec.BaseCodec;
import org.redisson.client.handler.State;
import org.redisson.client.protocol.Decoder;
import org.redisson.client.protocol.Encoder;import java.io.IOException;/*** 自定义实现 Hessian 序列化 兼容原有的序列化方式** @author leon* @date 2023-08-10 15:14:03*/
@Slf4j
public class HessianCoder extends BaseCodec {private final Encoder encoder = new Encoder() {@Overridepublic ByteBuf encode(Object in) throws IOException {try (ByteBufOutputStream os = new ByteBufOutputStream(ByteBufAllocator.DEFAULT.buffer())) {HessianOutput ho = new HessianOutput(os);ho.writeObject(in);return os.buffer();} catch (Exception e) {log.error("Hessian序列化异常: {}", e.getMessage(), e);throw new IOException(e);}}};private final Decoder<Object> decoder = new Decoder<Object>() {@Overridepublic Object decode(ByteBuf buf, State state) throws IOException {try (ByteBufInputStream inputStream = new ByteBufInputStream(buf)) {HessianInput hi = new HessianInput(inputStream);return hi.readObject();} catch (Exception e) {log.error("Hessian反序列化异常: {}", e.getMessage(), e);throw new IOException(e);}}};@Overridepublic Decoder<Object> getValueDecoder() {return decoder;}@Overridepublic Encoder getValueEncoder() {return encoder;}
}

最后修改我们的redisson配置 将序列化方式替换为HessianCoder 即可

在进行测试获取缓存 也没报错了。

参考官方文档:https://github.com/redisson/redisson/wiki/4.-data-serialization

http://www.yayakq.cn/news/564384/

相关文章:

  • 泉州网站建设托管wordpress 支持多域名
  • 做HH的网站网站死链检查
  • 网站如何提高流量做放单主持的网站
  • 辽宁省建设厅网站官网有中文网站 怎么做英文网站
  • 怎么查网站的空间商新河网站
  • 巴塘网站建设乐清北白象网络怎么装
  • 资溪做面包招聘的网站广告联盟app
  • 哈尔滨企业自助建站莱芜网站优化加徽信xiala5
  • 路由器通过域名解析做网站产品推广广告
  • 企业网站发展趋势河北邢台移动网站建设
  • 做网络推广的网站有哪些漳州市城乡和住房建设局网站
  • 苏宁易购网站建设怎样做读书会网站
  • 网站有源代码如何做seo淘宝网页版官网入口
  • 西部数码网站源码怀仁网站建设
  • 做网站赚钱全攻略ftp网站怎么看后台的代码
  • 怎么开网站 第一步怎么做wordpress主题文件夹
  • 网站制作公司网站建设手机响应式网站
  • 建设银行广州招聘网站播放视频网站怎么做
  • 淮安新港建设有限公司网站网站目录有什么意义
  • 专业网站定制公司wordpress wiki 皮肤
  • 知名网站建设是哪家网上做室内设计的网站
  • 购物网站流量怎么做大连做网站团队
  • 郑州网站制作费用积极做好门户网站建设工作
  • 个人两字印章在线制作网站网站开发vue
  • 推文最好的网站是哪个北京软件开发公司排名榜
  • html网站模板资源网站建设移动网络公司
  • 做鞋子的招聘网站有哪些wordpress分类页seo
  • 阿里云空间部署网站顺德网站建设合理使用颜色搭配_方能达到最佳视觉效果
  • 做网站上海的备案地址网络正常
  • 网站系统设计说明书mvc net跳转到另一网站