1. Redis 安装与介绍

Redis安装

  1. Docker方式

    #拉取 Redis 镜像 
    > docker pull redis
    #运行Redis 容器 
    > docker run --name myredis - d - p6379 : 6379 redis  
    #执行容器中的 redis-cli, 命令行操作
    > docker exec - it myredis redis- cli 
    
  2. 压缩包安装

    #安装C 语言的编译环境:
    > yum install centos-release-scl scl-utils-build
    > yum install -y devtoolset-8-toolchain
    > scl enable devtoolset-8 bash
    #测试gcc版本
    > gcc --version
    gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
    Copyright (C) 2018 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    #下载redis-6.2.1.tar.gz
    #解压命令
    > tar -zxvf redis-6.2.1.tar.gz
    #解压完成后进入目录:cd redis-6.2.1
    #在redis-6.2.1目录下再次执行make命令
    > make
    > make install
    
  3. 查看redis脚本
    默认安装目录 /usr/local/bin
    在这里插入图片描述

Redis 数据结构

  1. string 字符串
    ​ 内部是一个字符数组。
  2. list 列表
    ​ 相当于LinkedList,链表。
  3. hash 字典
    ​ 相当于HashMap,Redis 的字典的值只能是字符串
  4. set 集合
    ​ 相当于HashSet,内部键值对无序、唯一。
  5. zset 有序列表
    类似SortedSet与HashMap的结合体,每个value有个socre,代表这个value的排序权重。

Redis分布式锁

SET 命令相关参数:

  • EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value
  • PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value
  • NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value
  • XX : 只在键已经存在时, 才对键进行设置操作。
  1. 实现

    使用 set key value [EX seconds] [PX milliseconds] [NX|XX] 指令,只允许被一个客户端操作;

    例如: setnx 与 expire组合的原子指令

    set lock:write 1 ex 5 nx

    当 锁 lock:write 不存在时加锁,过期时间5s

  2. 超时问题

    线程执行任务时间较长,锁过期释放,被其他线程获取。

  3. Java代码实现

    // 若key不存在,则新建,并设置过期时间
    Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit);