【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 }
运行结果如下:


浙公网安备 33010602011771号