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

标签: java秒杀系统实现 秒杀系统
1230人阅读 评论(0) 收藏 举报
分类:

这一篇,我们来使用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同样完成了抢购资格的分配。

查看评论

spring-data-redis-2(实现并发操作:秒杀)

package com.linyi.sell.service.impl;import org.springframework.beans.factory.annotation.Autowired; i...
  • qq_35559756
  • qq_35559756
  • 2017-12-01 11:24:30
  • 329

redis实现秒杀demo

代码package com.prosay.redis;import java.util.List;import redis.clients.jedis.Jedis; import redis.clie...
  • lzh657083979
  • lzh657083979
  • 2017-09-09 18:58:12
  • 1474

电商项目中使用Redis实现秒杀功能

参与过抢购活动就知道,很明显的一点是商即便商品实际没有了也是可以下单成功的,但是在支付的时候会提示你商品没有了。 实现原理:list双向链表 使用redis队列,因为pop操作是原子的,即使有...
  • weixin_39768635
  • weixin_39768635
  • 2017-09-25 20:37:29
  • 2345

redis实现秒杀思路

1.创建数据库 CREATE TABLE `redis_queue` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `uid` int(1...
  • Qiang1370373713
  • Qiang1370373713
  • 2017-07-28 21:02:33
  • 365

redis 实现消息队列,秒杀功能实现小测试

消息队列(mq) 一些列的操作,把它保存到一个容器中,这个结构的特点,是一个一个进行排队操作。 ①添加任务消息到队列中 ②消费(消耗)队列中的消息  (执行任务操作) redis实现消息队列的结...
  • weixin_38849871
  • weixin_38849871
  • 2017-09-17 22:42:07
  • 873

PHP结合redis实现秒杀活动大并发

PHP结合redis实现秒杀活动大并发
  • mxdzchallpp
  • mxdzchallpp
  • 2016-10-28 15:21:34
  • 1878

redis秒杀商品队列

$user_id=session('user_id');          header("Content-type:text/html;charset=utf-8");          $redi...
  • ztblog
  • ztblog
  • 2016-09-19 14:10:20
  • 3407

基于redis分布式锁实现“秒杀”

  • 2017年03月01日 15:02
  • 353KB
  • 下载

用Redis轻松实现秒杀系统

秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Red...
  • shendl
  • shendl
  • 2016-04-08 01:03:49
  • 38294

用redis做一个简单的秒杀

下面是一个简单的下单操作
  • younger_z
  • younger_z
  • 2016-09-25 19:41:03
  • 1059
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 45万+
    积分: 5482
    排名: 6111
    博客专栏
    友情链接
    最新评论