redis缓存

pom.xml文件
redis.clients
jedis

在测试类测试
redis缓存_第1张图片

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
redis缓存_第2张图片

解锁还会出现一个问题,因为解锁的方法都在finally里面,所以别人可能会接调属于自己的锁,造成了提前释放。
所以需要设定密码,就value。
真正的密码匹配或者是超出了执行时间才会释放。

你可能感兴趣的