0
点赞
收藏
分享

微信扫一扫

2 秒杀系统模拟基础实现,使用Redis实现


这一篇,我们来使用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;

其他的不用变,直接运行即可。

2 秒杀系统模拟基础实现,使用Redis实现_redis



可以看到redis同样完成了抢购资格的分配。

举报

相关推荐

0 条评论