- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当我调用get()方法时,发生异常
这是代码
@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 方法
这是堆栈跟踪 ---
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)
最佳答案
默认情况下,RedisTemplate 使用 JdkSerializationRedisSerializer,所以如果你做了一个“设置”,它会让你的 Long 在 Redis 中看起来像这样:
"\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));
或者试试spring-data-redis自带的RedisAtomicLong类。
关于spring-data-redis redisTemplate 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162725/
我是 Redis 的新手,想用我现有的 spring 应用程序来实现它。 我的问题是使用具有相同键的不同 redisTemplate 来存储不同类型的值。 例如 我在 spring 中定义了 redi
我正在使用 spring redistemplate @Autowired private RedisTemplate redisTemplate; RedisToken => token |
我对 Spring 和 Redis 都很陌生。我想知道有没有办法通过值获取KEY? My KEY is patterned like this: "{typeOfFile}:{id}:{filenam
我已经开始在 spring 应用程序中使用 RedisTemplate。 opsForHash() 有一个“put”方法,但它只需要三个参数。我想保存一些键值对。这在节点中非常简单,例如: redi
我正在尝试测试 RedisTemplate 中的过期方法。例如,我将 session 存储在 redis 中,然后尝试检索 session 并检查值是否相同。对于过期 session ,我使用 red
我必须根据需要为每个请求(写入/读取)创建 RedisTemplate。连接工厂是JedisConnectionFactory JedisConnectionFactory factory=new
我正在尝试使用 Redis 为我的实体存储一些缓存数据,例如,它内部有不同类型的字段, public class Job { private String id; private Da
我使用 spring 的 RedisTemplate。 我在 redis 中有一个哈希。 我想使用模板查询 redis,以获取其键在特定键集中的所有条目。 我注意到了方法: Map entries =
我正在使用 Spring RedisTemplate 来处理与 Redis 相关的操作。我能存储两种数据类型吗?例如,我想存储 Key、String 以及 Key、Integer。如何实现? 最佳答案
在我的SpringBoot项目中,当我使用如下注入(inject)RedisTemplate时,没问题。 @Repository public class CommonDBDaoImpl implem
首先项目A,也就是SpringBOOT项目中使用redisTemplate 来做REDIS的缓存时,你会发现存到REDIS里边的KEY和VALUE,redisTemplat使用jdkSerializ
我有一个 Spring boot 应用程序,它与两个不同的 Redis 集群(在 Amazon Elasticache 上)通信。我正在使用 spring-data-redis 1.6.4。这是我针对
在制作spring redis数据模板时,我使用: RedisTemplate template = new RedisTemplate<>(); 然后我还将反序列化器设置为自定义反序列化器,该反序列
我在 redis 中有不同的模型键。 我使用这些模板来存储值; public RedisTemplate model1RedisTemplate() { RedisTemplate r
尝试将 RedisTemplate bean 与 GenericJackson2JsonRedisSerializer 一起使用,但在调试时我注意到 Spring Session 使用了不同的 Red
我正在使用 Spring 的 RedisTemplate 与 Redis 交互。 目前,我存储在 Redis 中的数据使用 OpsForHash 操作,因为这最适合我存储的数据。 但现在我想添加不同结
有什么方法可以检查 RedisTemplate 中是否存在某个键?或者换句话说,RedisTemplate API 中是否有任何等效的 Redis exists 命令? 最佳答案 是的,你可以使用pu
当我调用get()方法时,发生异常 这是代码 @Service("RedisService") public class RedisServiceImpl implements RedisServic
我在我的 spring boot 应用程序 中使用 RedisTemplate 并且我能够使用 singleKey 进行读取。 String valueJson = (String) redisTem
我想为存储在 Redis 中的 key 设置一个 ttl,我是通过以下方式完成的: @Component public class RedisBetgeniusMarketService implem
我是一名优秀的程序员,十分优秀!