pom.xml文件
<dependency> <groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
在测试类测试



jedis.setex(key,存活工夫,v)
jedis.setnx(k,?)如果k里没有值就赋值,有就不动。

秒杀业务的实现--分布式锁机制
7000元 手机 20显示胜利 领取1元
首先:1tomcat服务器必定有多台

  2数据库数据只有1份  3 必然会呈现高并发的景象  即多线程对同一资源进行操作,导致线程安全性问题  应用同步锁:实用于单台tomcat服务器  同步锁不适用于大程序的开发,因为它只能负责体态tomcat  ![image.png](/img/bVcHorV)

如果两台tomcat都应用同步锁,
两台服务器独特对数据库进行读写操作,肯定会产生并发问题,即手机屡次卖出。
怎么保障业务的实现??

为了解决这种问题时用分布式锁,锁应用第三方操作,专用。

准则:当锁被应用时,其余用户不能应用。
策略:用户向redis中放弃一个key,如果redis中有人应用这把锁,其他人不容许应用。如果redis没有key,则示意我能够应用这把锁。
为了避免这个key始终不开释就在锁设置存活工夫。

原理图 用的是一个redis
redis单线程,单过程的,所以不会有同时存key的可能
加锁 setkey
解锁 delkey

具体

如何验证加锁胜利
jedis.set("aaa",v,setParams)
这个办法里,如果加锁胜利会返回ok

解锁还会呈现一个问题,因为解锁的办法都在finally外面,所以他人可能会接调属于本人的锁,造成了提前开释。
所以须要设定明码,就value。
真正的明码匹配或者是超出了执行工夫才会开释。