Redis应用之并发处理

本文探讨了Redis在并发场景中的应用,包括秒杀、抢购等。通过Jmeter和PostMan测试发现,单独使用Redis仍存在并发问题。为解决此问题,文章介绍了使用Redis + Lua脚本实现原子性操作,确保并发安全性。此外,还讨论了基于Redis的分布式锁,包括可重入锁的设计,以及Redisson分布式锁的实现与压力测试,证明其在并发处理中的有效性。
摘要由CSDN通过智能技术生成

一、应用场景

1、多人并发场景,例如秒杀,抢购,设置总数量一百,并发一次减1,减到0为止。

2、单人并发场景,例如连续点击事件,抢票脚本,事件往表插入一条记录,一个用户只能插入一条记录。

二、表结构

-- Create table

create table IPLN_REDIS_TEST

(

id VARCHAR2(32),

key VARCHAR2(100),

value NUMBER,

remark VARCHAR2(100)

)

tablespace TS_VER_EPM

pctfree 10

initrans 1

maxtrans 255

storage

(

initial 64K

next 1M

minextents 1

maxextents unlimited

);

-- Add comments to the table

comment on table IPLN_REDIS_TEST

is 'redis测试';

三、代码实现-使用关系型数据库处理并发

1、多人并发代码,请求成功,数量减1,减到0为止

@ResponseBody

@RequestMapping(value = {"multipleConcurrency.do"}, method = {RequestMethod.POST})

public String multipleConcurrency(@RequestBody Map<String, Object> params){

//校验数据库中是否有key

// ----------采用关系型数据库 处理并发----------

Map<String, Object> keyMap = iRedisTestService.getRedisTestByKey(params);

if(keyMap != null && Integer.parseInt(keyMap.get("VALUE").toString()) > 0){

iRedisTestService.updateRedisTest(params);

}else{

return "没有Key,或者并发数为0";

}

return "并发成功,value-1";

}

2、单人并发代码,请求成功,插入一条数据,同一操作人只能插入一条数据

@ResponseBody

@RequestMapping(value = {"singleConcurrency.do"}, method = {RequestMethod.POST})

public String singleConcurrency(@RequestBody Map<String, Object> params){

// ----------采用关系型数据库 处理并发----------

Map<String, Object> keyMap = iRedisTestService.getRedisTestByKey(params);

if(keyMap == null){

params.put("value", 1);

params.put("remark", "一个用户并发");

iRedisTestService.insertRedisTest(params);

}else{

return "已有并发数";

}

return "并发成功,插入一条数据";

}

四、PostMan进行测试

1、多用户并发postman测试

2、单用户并发测试

3、测试结果

五、Jmeter并发测试

1、编写测试计划,

单个并发测试,线程数5000并发

多个并发测试,线程数5000并发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值