【Redis系列_5】Redis实现秒杀

1.简介

秒杀作为电商聚拢并忽悠吃瓜群众的常见手法已经玩的如火纯青。而实现秒杀的过程(基于java)有很多种实现方式,常见的有:数据库,zookeeper,redis等。本文将介绍一些常见的秒杀实现。

2.秒杀实现1_Redis List

redis的列表是原子操作,redis是单线程的,所有使用redis的list可以实现简单的秒杀功能。

原理与过程:

1.秒杀物品存入列表(lpush操作:lpush productlist 1 2 3 4 5 6 7 8 9 10 )

 

2.单个客户端访问列表(lpop操作:lpop productlist 

代码十分简单:

启动30个线程,模拟30个客户端,每个客户端执行lpop操作,但是只有部分客户端可以拿到数据:

 1 package redis;
 2 
 3 import redis.clients.jedis.Jedis;
 4 
 5 public class RedisDemo {
 6 
 7     public static void main(String[] args) {
 8         //启动30个客户端抢10个商品
 9         for(int i=0;i<30;i++){
10             new Thread(new MyCustomer(i)).start();
11         }
12     }
13 
14 }
15 
16 //一个客户就是一个线程
17 class MyCustomer implements Runnable{
18     private int customerID;
19     
20     public MyCustomer(int id){
21         this.customerID = id;
22     }
23 
24     @Override
25     public void run() {
26         try {
27             Thread.sleep(3000);
28         } catch (InterruptedException e) {
29             // TODO Auto-generated catch block
30             e.printStackTrace();
31         }
32         
33         // 执行秒杀 抢商品
34         Jedis client = new Jedis("192.168.157.111", 6379);
35         String productID = client.lpop("productlist");
36         
37         System.out.println("客户端 " + customerID+ "  抢到商品:" + productID);
38         
39         client.close();
40     }
41 }

运行结果如下:

 

posted @ 2018-05-28 18:08  爱寂寞撒的谎言  阅读(611)  评论(0)    收藏  举报