关闭

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

标签: java秒杀系统实现秒杀系统
1060人阅读 评论(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同样完成了抢购资格的分配。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

用Redis轻松实现秒杀系统

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

PHP多线程模拟秒杀抢单

应集团要求给服务号做了个抢单秒杀的功能,需要对秒杀做个测试,想试试 PHP 多线程,就模拟了下抢单功能。先说秒杀模块的思路:正常情况下的用户秒杀操作 1、发起秒杀请求 2、进入秒杀队列 3、随机滞后 ...
  • Peter_Zhao_Feng
  • Peter_Zhao_Feng
  • 2016-09-20 17:06
  • 3052

1 秒杀系统模拟基础实现,使用DB实现

本文根据动脑学院的一节类似的课程,改编实现。分别使用DB和redis来完成。 隔离的解释 业务隔离:将秒杀业务独立出来,尽量不与其他业务关联,以减少对其他业务的依赖性。譬如秒杀业务...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2017-07-06 11:27
  • 876

使用R实现一个简单的连续系统模拟

连续系统就是指状态随着时间连续变化的系统。我们通过计算机模拟对连续系统得到的结果只是近似的,但如果只要这种近似达到了一定的精度,也就可以满足要求。 连续系统模拟的一般方法就是首先建立系统的连续模型,...
  • wzgl__wh
  • wzgl__wh
  • 2016-08-01 20:40
  • 2025

51单片机实现交通灯系统模拟

  • 2015-10-20 23:28
  • 72KB
  • 下载

Redis分布式锁----乐观锁的实现,以秒杀系统为例

原文:http://blog.csdn.net/evankaka/article/details/70570200 摘要:本文使用redis来实现乐观锁,并以秒杀系统为实例来讲解整个过程。 本...
  • I_will_try
  • I_will_try
  • 2017-11-07 11:07
  • 107

用Redis轻松实现秒杀系统

秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘、异步处理而不是同步处理、分布式处理。 用上这三招,不论秒杀时负载多大,都能轻松...
  • universe_ant
  • universe_ant
  • 2016-10-12 16:08
  • 708

用 Redis 轻松实现秒杀系统的构思

原文地址:http://blog.jobbole.com/99463/ 秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘...
  • liangzi4454
  • liangzi4454
  • 2016-04-14 15:39
  • 389

用Redis轻松实现秒杀系统

什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸...
  • zxc456733
  • zxc456733
  • 2017-12-21 16:12
  • 62

用Redis轻松实现秒杀系统

导论 曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。 秒杀系统的架构设计 秒杀系统,是典型的短时大量...
  • qiandublog
  • qiandublog
  • 2016-12-01 12:08
  • 1993
    个人资料
    • 访问:306164次
    • 积分:3941
    • 等级:
    • 排名:第9311名
    • 原创:97篇
    • 转载:34篇
    • 译文:0篇
    • 评论:135条
    博客专栏
    友情链接
    最新评论