Redis基础

Redis为什么这么快?

  • I/O复用模型。
  • 单线程操作没有切换线程开销。
  • 基于内存操作,快。

Redis数据结构

  • String  最基本的KV结构
  • hash 类似于java对象
  • list 集合可重复
  • set 不可重复
  • zset 有序集合score排序 

基于redis的分布式锁实现

  • 加锁
    • 方式一:使用lua脚本,jedis执行lua脚本是当成命令一次执行,具有原子性。
    • 方式二:使用原生set
    • ’NX’:没有锁就加锁。'PX’:设置过期时间,expireTIme配合PX使用过期时长。requestId请求标识(解铃还须系铃人)。虽然可以保证原子性,但是如果我们设置的过期时间比较短,而执行业务的时间比较长,就会存在锁代码块失效的问题,失效后其他客户端也能获取到同样的锁,从而导致问题,所以要将过期时间设置的足够长,具体时间设置多长要依据具体的业务来权衡。
  • 解锁
    • 使用lua脚本解锁 见加锁方式一的解锁代码。 
posted @ 2020-01-29 15:49  lastcy  阅读(115)  评论(0编辑  收藏  举报