在查询出商品的时候,就将当前数据锁定,直到我们修改提交之后。在中途过程中商品被锁定,无法被其他人修改
过程
- 修改autocommit模式为0,默认为1即为自动提交
select status from t_goods where id=1 for update;
此时另起一个查询,发现无法查询到该商品了,一直需要等到上一条sql提交为止
- commit
此时另外一个查询终于可以查到内容了
一片净土
微信支付只需要用到AppId、ApiKey、mchId
即可
进行公众号相关的开发才需要用到AppSecret
1 | https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx77963cc3616036e7&redirect_uri=https://yxjf.188lanxi.com/ClickFarming/getOpenid?param=3311111111111999&response_type=code&scope=snsapi_userinfo&state=2#wechat_redirect |
替换appid,记得需要去公众号网页授权域名才能跳转到redirect_uri
单机部署时,锁机制可用ReentrantLock
可重入锁,或者用synchronized特殊字段锁住,高并发时推荐使用ReentrantLock,效率更高
分布式部署时,因为需要布置多个服务器,不同服务器之间锁不互通,所以需要一个共同的中间件去达成锁的通信,推荐只用redis,当然还有数据库的悲观锁、乐观锁
setnx+expire
,并开启事务(使其具有原子性),两项操作必须都执行成功,一项操作失败,另一项操作也需回退,执行完后del
释放锁官方提供的redis分布式锁的实现
Callable.call()必须有返回时,FutureTask.get()方法才会执行,否则一直阻塞
Java8新提供CompletableFuture,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法
1 | /** |
也可以并行执行,逻辑流程为:
其中CompletableFuture.anyOf()
含义为:只要任意一个成功,即可执行下面的逻辑,CompletableFuture.allOf()
含义为:全部成功之后执行下面逻辑
1 | server { |
同一个域名可以有不同的跳转,location不同即可
注意点:如果请求超时(nginx timeout时间设置为3秒,应用接口比如5秒后才有响应),GET
请求会重复分发,POST
请求会幂等,所以GET请求不能用在新增和删除数据,只能用在查询。但是如果服务器确实挂了,POST请求还是会转发的
高并发场景下,A机器每秒有5000请求超时,故障转移到B、C机器,而导致原本已经满负荷的B、C机器雪上加霜而发生雪崩
proxy_next_upstream_tries
,限制将请求传递到下一个服务器的可能尝试次数。默认为0,即一直传递下去proxy_next_upstream_timeout
,重试超时时间,过了时间之后就不再进行重试正向代理:比如说VPN,我国访问不了谷歌,但是通过VPN代理即可访问,即内网访问外网
反向代理:外网通过NG访问内网,优点:保证内网的安全,负载均衡
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
比如说想要实现点赞功能,用户点击一次,调用redisTemplate.opsForValue().increment(key, delta);
方法即可
1 | port 6002 |
缓存穿透
数据库和缓存中都没有该数据,有人恶意请求的话,所有的请求都会到达数据库导致数据库崩溃。
缓存击穿
数据库有数据缓存中没有该数据,因为缓存有过期时间,如果过期的一瞬间突然涌入大量的相同请求,那么这些请求因为从缓存中无法获取值而转向数据库,导致数据库并发量突然增大而奔溃
一直只会nginx跳转,今天遇到一个新的跳转方法,用portlet.jar包去跳转
1 | nohup java -cp "portlet.jar:" com.bs.tools.jproxy 8089 192.168.17.40 8081 >> proxy8089.out 2>&1 & |
当前的8089端口会跳转到192.168.17.40的8081端口,当有时银行有专线时,可以凭此跳转
path:/Users/mintaoyu/Library/Preferences/IntelliJIdea2018.3
1 | -Xms2g |
1 | <dependency> |
entity层
1 | @Data |
controller层,引入ElasticsearchTemplate,进行增删查改