(五)Redis在项目中应用
参考:
1. redis实现分布式锁
参考:
127.0.0.1:6379> set distributeKey requestId ex 10 nx
OK
127.0.0.1:6379> get distributeKey
"requestId"
127.0.0.1:6379> del distributeKey
(integer) 1
127.0.0.1:6379> get distributeKey
(nil)
127.0.0.1:6379> set distributeKey requestId ex 10 nx
OK
127.0.0.1:6379> set distributeKey requestId_1 ex 10 nx
(nil)
127.0.0.1:6379> get distributeKey
"requestId"
127.0.0.1:6379>
2. 订单或任务缓存
127.0.0.1:6379> lpush face "{url:http://**.jpg,roi:{x:0,y:0,w:1,h:1}}"
(integer) 1
127.0.0.1:6379> lpush face "{url:http://**1.jpg,roi:{x:0,y:0,w:1,h:1}}"
(integer) 2
127.0.0.1:6379> lrange face 0 -1
1) "{url:http://**1.jpg,roi:{x:0,y:0,w:1,h:1}}"
2) "{url:http://**.jpg,roi:{x:0,y:0,w:1,h:1}}"
127.0.0.1:6379>
3. Redis和DB数据一致性
只要有多份数据,就会涉及到数据一致性的问题。
更新缓存步骤:
- 更新DB;
- 更新Redis;
- 更新Redis失败,出现数据不一致:
- 重试n次;
- 更新操作插入MQ,后台继续更新;
4. 大并发Redis穿透直接访问DB
使用连接池,限制访问DB并发数。
5. 接口限流器
参考: