这一篇,我们来使用redis进行数据存储。
新建一个redis的service实现类
package com.tianyalei.service;
import com.tianyalei.model.GoodInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
/**
* Created by wuwf on 17/7/5.
*/
@Service("redis")
public class GoodInfoRedisService implements GoodInfoService {
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public void add(GoodInfo goodInfo) {
redisTemplate.opsForValue().set(goodInfo.getCode(), goodInfo.getAmount() + "");
}
@Override
public void delete(GoodInfo goodInfo) {
redisTemplate.delete(goodInfo.getCode());
}
@Override
public int update(String code, int count) {
if (redisTemplate.opsForValue().increment(code, -count) < 0) {
return -1;
}
return 1;
}
}
我们使用RedisTemplate的increment来保证操作的原子性。
注意一下update方法,如果剩余数量小于0,则返回失败。
由于使用了RedisTemplate,需要先配置一下。
package com.tianyalei;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootApplication
public class CommonApplication {
@Bean
public RedisTemplate getRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
return redisTemplate;
}
public static void main(String[] args) {
SpringApplication.run(CommonApplication.class, args);
}
}
测试:
将MyTest中的Service接口填充为redis
@Resource(name = "redis")
private GoodInfoService service;
其他的不用变,直接运行即可。
可以看到redis同样完成了抢购资格的分配。