今天使用spring-data-redis包操作redis,就是简单的使用redis的计数功能,在redis中的操作命令如:incr key;get key;
这两步操作使用spring-data-redis的话,就是这样操作
ValueOperations<String, Object> valueOper=redisTemplate.opsForValue();
valueOper.increment(key,1);
Object value=valueOper.get(key);
但就这个简单的操作,spring-data-redis出错了,研究了源码后,唏嘘不已,给出下面的方案,解决这个问题
public long getIncrValue(final String key) {
return redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer=redisTemplate.getStringSerializer();
byte[] rowkey=serializer.serialize(key);
byte[] rowval=connection.get(rowkey);
try {
String val=serializer.deserialize(rowval);
return Long.parseLong(val);
} catch (Exception e) {
return 0L;
}
}
});
}
使用这个方法去获取通过increment()自增的值