当前位置: 首页 > 知识库问答 >
问题:

spring-data-redis redisTemplate异常

濮阳耀
2023-03-14
@Service("RedisService")
public class RedisServiceImpl implements RedisService {

@Autowired
RedisTemplate<String, Long> redisTemplate;

@Override
public Long get(String key) {
    return redisTemplate.opsForValue().get(key);
}

@Override
public Long incrBy(String key, long increment) {
    return redisTemplate.opsForValue().increment(key, increment);
}

当我使用incrBy方法时,没有异常,只有错误只有get方法





这里是stacktrace--

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:38)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:58)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:1)
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:40)
    at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:198)
    at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:50)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:162)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:133)
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:84)
    at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:42)
    at net.daum.air21.bot.common.service.RedisServiceImpl.get(RedisServiceImpl.java:29)
    at net.daum.air21.bot.user.service.SeraCoffeeServiceImpl.getCurrentCount(SeraCoffeeServiceImpl.java:41)

共有1个答案

督灿
2023-03-14

默认情况下,RedisTemplate使用JdkSerializationRedisSerializer,因此如果您设置了“set”,那么在Redis中,您的Long看起来如下所示:

"\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x00\x00\x00\x00\x04"

IncrBy工作是因为Redis总是从该操作返回一个Long,所以RedisTemplate不会试图反序列化结果。但是,“get”的结果要经过反序列化过程,该过程需要类似于上面的格式。

您可以通过在redistemplate上使用不同的值序列化程序来解决此问题:

redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));
 类似资料:
  • 尝试在JBoss上部署应用程序时出现以下错误: 无法启动的服务:服务jboss.undertow.deployment.default-server.default-host./naturallatex-rest:java.lang.runtimeexception:org.springframework.beans.factory.beancreationexception:创建类路径资源[or

  • 我看了一下下面的问题 与SpringDataJPA相比,使用SpringDataREST有哪些优势? 它不太符合我的需要。我的数据库在MYSQL上,我选择了Spring-Data-JPA实现。REST能给我带来哪些我在简单的Spring-Data-JPA中找不到的额外优势?例如,如果明天,我决定实现缓存b/w我的业务和数据库模块,在这种情况下,我将不得不写较小的代码?哪个容易配置?哪一个更灵活,如

  • Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。 Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模

  • 问题内容: 在哪些典型的现实生活场景中,人们会选择Spring Data JDBC / Spring Data JPA与Hibernate?我想了解最适合这两种实现方式的场景。 问题答案: 正如@Naros所说,标题中当前存在的问题实际上并没有解决。似乎我们应该真正看一下4个选项,并且主要列出每种方法的优点,缺点是没有其他方法的优点: 没有Spring数据的JDBC 您可以对所发生的事情进行100

  • 问题内容: 我有一个实体和一个实体。关系的定义如下: 现在,当我删除角色时,需要从具有该角色的所有用户中删除该角色。通常,您可以通过查找具有该角色的所有用户,从列表中删除该角色并保存用户来执行类似的操作。但是,当可能有超过一百万的用户时,我不想遍历应用程序中的这么多实体。因此,我想使用本机查询从联接表中删除行。我尝试将其添加到我的存储库中: 但是,当我这样做时,我在日志中看到以下内容: 我不明白在