# springboot-redis **Repository Path**: xuyaxu/springboot-redis ## Basic Information - **Project Name**: springboot-redis - **Description**: Spring Boot整合Redis的常规使用,包含秒杀案例。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-22 - **Last Updated**: 2023-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Redis的使用

Redis的常用方法的使用

使用Redis做秒杀

秒杀需要解决的问题

1. 并发量大导致超卖的问题。 2. 并发量大导致redis连接超时问题。
解决超卖问题
使用redis事务解决秒杀时的超卖问题,但是又会造成秒杀已经结束然而库存还有的问题。
解决先请求的秒杀失败,导致库存有剩余的问题
500个商品,1000人秒杀使用redis事务会导致秒杀结束商品有大量剩余的情况,这不符合我们所期待的,
什么原因导致的呢?是因为redis监听了商品的数量,如果商品的数量发生了改变,那么当前事务就不生效了,所以才会导致商品有剩余的问题。
解决方法:使用 LUA脚本 ,可以解决超卖及库存遗留问题。
解决redis连接超时问题
使用redis连接池解决高并发连接超时问题。

Redisson的使用

使用Redisson实现Redis分布式锁功能

优点:简介实用,是目前较流行解决方案。

问题:

Request processing failed; nested exception is java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 7b902e4a-2ddc-43b9-a58d-e44e14191c6c thread-id: 74

这个异常是因为:解锁需要创建锁的线程进行解锁,否则就会报这个异常,

而我们在代码中设置了锁的过期时间,如果业务耗时超过了设置的过期时间,那再去解锁就会报这个错。

解决办法:

1. 将锁的过期时间延长稍大于业务耗时时间。

2. 做释放锁操作的时候判断一下是否已成功加锁。