mirror of
https://github.com/doocs/advanced-java.git
synced 2025-03-12 09:50:11 +08:00
Merge branch 'master' of github.com:doocs/advanced-java
This commit is contained in:
commit
36e13c9496
@ -19,17 +19,18 @@
|
||||
|
||||
#### redis 最普通的分布式锁
|
||||
|
||||
第一个最普通的实现方式,就是在 redis 里使用 `setnx` 命令创建一个 key,这样就算加锁。
|
||||
第一个最普通的实现方式,就是在 redis 里使用 `SET key value [EX seconds] [PX milliseconds] NX` 创建一个 key,这样就算加锁。其中:
|
||||
|
||||
``` r
|
||||
SET resource_name my_random_value NX PX 30000
|
||||
- `NX`:表示只有 `key` 不存在的时候才会设置成功,如果此时 redis 中存在这个 `key`,那么设置失败,返回 `nil`。
|
||||
- `EX seconds`:设置 `key` 的过期时间,精确到秒级。意思是 `seconds` 秒后锁自动释放,别人创建的时候如果发现已经有了就不能加锁了。
|
||||
- `PX milliseconds`:同样是设置 `key` 的过期时间,精确到毫秒级。
|
||||
|
||||
比如执行以下命令:
|
||||
|
||||
```r
|
||||
SET resource_name my_random_value PX 30000 NX
|
||||
```
|
||||
|
||||
执行这个命令就 ok。
|
||||
|
||||
* `NX` :表示只有 `key` 不存在的时候才会设置成功。(如果此时 redis 中存在这个 key,那么设置失败,返回 `nil` )
|
||||
* `PX 30000` :意思是 30s 后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了。
|
||||
|
||||
释放锁就是删除 key ,但是一般可以用 `lua` 脚本删除,判断 value 一样才删除:
|
||||
|
||||
``` lua
|
||||
|
@ -39,7 +39,7 @@ dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian
|
||||
|
||||
* http 协议
|
||||
|
||||
走 json 序列化。
|
||||
走表单序列化。
|
||||
|
||||
* webservice
|
||||
|
||||
@ -74,6 +74,4 @@ Hessian 的对象序列化机制有 8 种原始类型:
|
||||
|
||||
### 为什么 PB 的效率是最高的?
|
||||
|
||||
可能有一些同学比较习惯于 `JSON` or `XML` 数据存储格式,对于 `Protocol Buffer` 还比较陌生。 `Protocol Buffer` 其实是 Google 出品的一种轻量并且高效的结构化数据存储格式,性能比 `JSON` 、 `XML` 要高很多。
|
||||
|
||||
其实 PB 之所以性能如此好,主要得益于两个:**第一**,它使用 proto 编译器,自动进行序列化和反序列化,速度非常快,应该比 `XML` 和 `JSON` 快上了 `20~100` 倍;**第二**,它的数据压缩效果好,就是说它序列化后的数据量体积小。因为体积小,传输起来带宽和速度上会有优化。
|
||||
|
Loading…
Reference in New Issue
Block a user