Redis基础
Redis为什么这么快?
- I/O复用模型。
- 单线程操作没有切换线程开销。
- 基于内存操作,快。
Redis数据结构
- String 最基本的KV结构
- hash 类似于java对象
- list 集合可重复
- set 不可重复
- zset 有序集合score排序
基于redis的分布式锁实现
- 加锁
- 方式一:使用lua脚本,jedis执行lua脚本是当成命令一次执行,具有原子性。
- 方式二:使用原生set
- ’NX’:没有锁就加锁。'PX’:设置过期时间,expireTIme配合PX使用过期时长。requestId请求标识(解铃还须系铃人)。虽然可以保证原子性,但是如果我们设置的过期时间比较短,而执行业务的时间比较长,就会存在锁代码块失效的问题,失效后其他客户端也能获取到同样的锁,从而导致问题,所以要将过期时间设置的足够长,具体时间设置多长要依据具体的业务来权衡。
- 解锁
- 使用lua脚本解锁 见加锁方式一的解锁代码。