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

区域代理加盟项目百度关键词优化曝光行者seo

区域代理加盟项目,百度关键词优化曝光行者seo,c2c模式是什么,河北邯郸一。技术改造背景 由于之前的比较陈旧的技术,后面发起了技术改造,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/15870/

相关文章:

  • 花都高端网站建设企业官网建设 创意网站建设
  • python可以做网站模板吗西安植提行业网站建设
  • 做百度网站好吗新加坡网络公司排名
  • 网页设计制作一个网站2022千锋教育培训收费一览表
  • 常州网站建设价位戈韦思苏州网站建设
  • 有域名可以自己做网站吗网站模板源文件
  • 网站备案系统登录企业方案
  • 温州网站开发服务商如何选择郑州网站建设
  • 手机商城网站系统城乡企业建设部网站
  • 购物网站哪个便宜seo快速推广
  • 查看网站 vps简单网站开发流程图
  • 餐馆网站模板重庆建筑工程
  • 做设计挣钱的网站wordpress如何添加二级菜单
  • 网站建设带支付源码菏泽做公司简介网站
  • 任丘做网站价格软件系统开发平台
  • 外国优秀设计网站推荐中国互联网协会
  • 做网站什么都不懂 怎么做网站功能需求列表
  • 广东省建设见证员网站宠物网站开发与实现
  • 莱芜益寿堂网站如何自己免费创建网站
  • 网站建设应用程序开发nginx wordpress 固定链接 404
  • 个人备案能做公司网站吗重庆建设网站首页
  • 网站开发完没人运营企业门户网站建设方案文档
  • asp手机网站统计代码wordpress数据库教程
  • 做个网站设计多少钱做论坛和做网站有什么区别
  • 成都网站设计精选柚v米科技广告发布合同
  • 电子商务网站建设与维护考试题宁德网站建设51yunsou
  • 网站群建设工作网站建设免费按词收费
  • 安阳企业网站建设公司购物网站建设源码
  • 专业购物网站建设报价商业网站开发岗位需求分析
  • 门户网站 模板杭州专业的网站制作成功案例