Redis存取List

实体类必须序列化,对于redis这种nosql数据库,实例化很重要,很多文章也都介绍了必须实例化,在配置redisTemplate时也会配置序列化规则:

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory" /><property name="KeySerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer"></bean></property><property name="ValueSerializer"><beanclass="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean></property><property name="HashKeySerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer"></bean></property><property name="HashValueSerializer"><beanclass="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean></property></bean>

redis存取List api

//存入List<T>,需要实现序列化
public <T> void putCache(JedisCluster jedisCluster,String key ,List<T> list,Integer liveSeconds){  log.info("===========putCache===========key:"+key);try {  if (null==liveSeconds ) {jedisCluster.set(SerializationUtils.serialize(cacheConfig.getPreFixKey(key).getBytes()) ,SerializationUtils.serialize(list));} else {jedisCluster.setex(SerializationUtils.serialize(cacheConfig.getPreFixKey(key).getBytes()), liveSeconds, SerializationUtils.serialize(list));}} catch (Exception e) {  log.error("Set key error : "+e);  }  }  //取List<T>需要实现反序列化public <T> List<T> getCache(JedisCluster jedisCluster,String key){ log.info("===========getCache===========key:"+key);byte[] in = jedisCluster.get(SerializationUtils.serialize(cacheConfig.getPreFixKey(key).getBytes()));if (null == in) {return null;}else{List<T> list = (List<T>) SerializationUtils.deserialize(in);  return list; }}  //命名key的规则public String getPreFixKey(String key){return String.format("%s:%s",namespace,key);}

SerializationUtils类

不管是存入还是取出,都是通过字节流,这也是序列化的原因。

public abstract class SerializationUtils {/*** Serialize the given object to a byte array.* @param object the object to serialize* @return an array of bytes representing the object in a portable fashion*/@Nullablepublic static byte[] serialize(@Nullable Object object) {if (object == null) {return null;}ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);try {ObjectOutputStream oos = new ObjectOutputStream(baos);oos.writeObject(object);oos.flush();}catch (IOException ex) {throw new IllegalArgumentException("Failed to serialize object of type: " + object.getClass(), ex);}return baos.toByteArray();}/*** Deserialize the byte array into an object.* @param bytes a serialized object* @return the result of deserializing the bytes*/@Nullablepublic static Object deserialize(@Nullable byte[] bytes) {if (bytes == null) {return null;}try {ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));return ois.readObject();}catch (IOException ex) {throw new IllegalArgumentException("Failed to deserialize object", ex);}catch (ClassNotFoundException ex) {throw new IllegalStateException("Failed to deserialize object type", ex);}}}

bug:Failed to serialize object of type: class com.google.common.collect.Lists$Revers

产生这个bug的原因是因为Lists.Revers没有实现序列化,所以存入redis的时候会报这个错误,当时遇到这个bug也查了好长时间,最后看这个Lists.Revers源码才发现这个问题。包括Lists.partition(),List.subList()等都没有实现序列化。

解决

将Lists.Revers、Lists.partition(),List.subList()等重新装入到已经实现序列化的list中去,问题解决

//Lists.Revers转list
List<User> list = new LinkedList<User>();
List<User> resutlListReverse = Lists.reverse(resutlList);
list.addAll(resutlListReverse);
//List.subList转list
List<User> subList = List.subList(0,10);
list.addAll(subList);

redis存取list<T>,及bug:Failed to serialize object of type: class com.google.common.collect.Lists$Revers相关推荐

  1. java连接redis存取数据(详细)

    声明:本文章仅供参考,学无止境,若有不足之处请指出,非常感谢! 源代码+相关工具下载:https://download.csdn.net/download/corleone_4ever/1081125 ...

  2. Redis存取对象集合

    今天遇到个使用Redis存取对象集合的问题,百度半天,没个能用的,后来问了下基友,基友说是把集合转成json串,存入Redis,用的时候再做json解析,果然成功了.开心啊,哈哈哈.记录下,希望会帮助 ...

  3. SLF4J: Failed toString() invocation on an object of type [org.eclipse.jetty.websocket.server......

    在配置SpringBoot的log时,遇到如下错误: SLF4J: Failed toString() invocation on an object of type [org.eclipse.jet ...

  4. Failed to register Grid Infrastructure type ora.mdns.type

    安装11g的集群软件的时候,在最后运行root.sh脚本时候,没有执行成功,最后提示如下错误: [root@r2 ~]# /u01/app/11.2.0/grid_1/root.sh Performi ...

  5. 解决argo workflow报错:MountVolume.SetUp failed for volume “docker-sock“ : hostPath type check failed

    提交workflow时报错: MountVolume.SetUp failed for volume "docker-sock" : hostPath type check fai ...

  6. Failed to convert value of type 'java.lang.String' to required type 'java.util.Date

    异常原因:Controller层获取JSP页面请求参数是String类型,而在Controller层接收时使用Date类型,属于方法参数类型不匹配异常 警告: Failed to bind reque ...

  7. 成功解决:Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but

    前言 在根据镜像elasticsearch创建容器的时候,启动容器失败. 查看报错日志 查看日志 这里查看相关容器启动失败日志 docker logs e09 [root@localhost elas ...

  8. Failed to convert value of type ‘java.lang.String‘ to required type ‘java.util.Date‘;

    在Java的controller中添加一个方法即可解决 /*** 解决:Failed to convert value of type 'java.lang.String' to required t ...

  9. Java中使用Jedis连接Redis服务端时提示:JedisConnectionException: Failed connecting

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

最新文章

  1. 真正的人工智能不应该只有统计学
  2. IDC评述网:2012年11月全国IDC品牌排行榜
  3. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件
  4. cisco dhcp vlan vrrp ospf 实验
  5. 再谈多态——向上映射及VMT/DMT(转)
  6. php ajax 重复提交,php+ajax远程加载避免重复提交
  7. (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
  8. Wodpress模板
  9. 中国好岳父?女婿亏掉公司半个亿 岳父3天还清!涉事公司回应了
  10. 传网易云音乐高管变动:市场副总裁李茵离职 CEO被降权
  11. win7x64 连接oracle 客户端 vs 2010调试 提示“ORA-12154: TNS: 无法解析指定的连接标识符 ”
  12. jQuery WeUI学习笔记二
  13. web项目中如何启动爬虫程序?Django+Requests+Ajax制作可视化翻译界面详解
  14. 百度离线地图服务器搭建
  15. Win10 AMD平台无法开启SVM虚拟化
  16. vscode 突然无法切换输入法(切换中文输入法)
  17. 0.1+0.2 为什么不等于0.3
  18. IMSI号和IMEI解释
  19. 主成分分析(PCA)与K-L变换
  20. 卡西欧350计算机度分秒转换,卡西欧FX-4500PA计算器怎样将如:12.58244度转换成度分秒啊...

热门文章

  1. 华为鸿蒙os英语,华为正式发布HarmonyOS鸿蒙操作系统
  2. 腾讯米大师接入Demo
  3. java后台导出word,详细过程及趟过的坑
  4. 电影购票系统接口篇【全栈开发】
  5. Maven仓库管理器Nexus的安装配置
  6. 计算机要大牛 掌握的方法【上】写的很全面,收藏
  7. 思科、华为交换机err-disable的相关排查解决
  8. Linux使用tc模拟网络延迟和丢包
  9. OmniGraffle for mac(绘图软件)
  10. 公路货运、安全如何风险感知?