官方网址:https://redis.io
		github:https://github.com/antirez/redis
	

    安装redis

  1. 物料准备
    官方下载页面下载安装包,或者下载本站备份的安装包redis-7.4.0.tar.gz
  2. 解压并编译安装
    tar -xzvf redis-7.4.0.tar.gz
    cd redis-7.4.0
    make
    make PREFIX=/usr/local/redis install
  3. 编辑配置文件
    mkdir /usr/local/redis/conf
    cp redis.conf /usr/local/redis/conf/
    vim /usr/local/redis/conf/redis.conf
    将第88行 bind 127.0.0.1 -::1 改为 bind 0.0.0.0 ,允许任何IP访问
    将第310行 daemonize no 改为 daemonize yes ,打开守护进程(常驻后台)
    第1051行设置密码 requirepass [密码]
    547行:masterauth [主服务密码]
  4. 将redis命令加入环境变量
    vim /etc/profile
    末尾追加 export PATH=$PATH:/usr/local/redis/bin
    source /etc/profile
  5. 编辑内核参数,修改内存分配策略,这里我们设置为1。如果不设置默认为0,可能发生redis savedb失败的情况
    vim /etc/sysctl.conf
    # 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
    # 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
    # 2:表示内核允许分配超过所有物理内存和交换空间总和的内存。
    vm.overcommit_memory = 1
    sysctl -p
  6. 编辑启动文件,纳入系统管理
    vim /etc/systemd/system/redis.service
    重载配置
    systemctl daemon-reload
  7. 启动redis服务
    systemctl start redis
  8. 连接redis
    redis-cli
    auth [密码]
    部分命令
  9. string类型(单个value值上限是512MB)
  10. list类型(常见先进先出队列)
  11. set类型(无序、不重复的集合,最大可以包含(2的32次方-1)个元素)
  12. zset类型(有序、不重复的集合)
  13. hash类型(类似于存储一个moduleBean对象)
  14. 数据持久化

  15. RDB自动备份(默认开启)
    触发条件可以查看配置文件vim /usr/local/redis/conf/redis.conf
    save 900 1 # 15分钟内最少有1个key改变
    save 300 100 # 5分钟内最少有100个key改变
    save 60 10000 # 1分钟内最少有10000个key改变
    dbfilename dump.rdb # 快照文件名
    dir /usr/local/redis # 默认保存路径
    stop-writes-on-bgsave-error yes # 发生备份错误时停止处理写请求
    rdbcompression yes # 是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩,有一定cpu消耗
    rdbchecksum yes # 是否进行数据校验。如果是的话,redis会采用CRC64算法进行数据校验,有约10%性能损耗
    rdb-del-sync-files no # 在没有开启持久性的情况下是否删除RDB文件
    相关命令
  16. AOF增量备份(append only file),以日志的形式存储每个写操作
    开启AOF可以编辑配置文件vim /usr/local/redis/conf/redis.conf
    第1399行 appendonly 设为yes
    第1458行 appendfsync 备份频率设为everysec
    dir /usr/local/redis # 默认保存路径
    appenddirname aof # 保存目录名
    appendfilename appendonly.aof # 保存文件名
    auto-aof-rewrite-min-size 64mb # 当aof文件大小达到多少时触发重写压缩
    auto-aof-rewrite-percentage 100 # 当aof文件重写后超出自身百分之多少时进行二次重写压缩
    aof生成文件说明
    相关命令
  17. RDB+AOF的混合模式
    vim /usr/local/redis/conf/redis.conf
    aof-use-rdb-preamble yes # 默认值就是yes
  18. 主从架构

  19. (主服务)编辑配置
    vim /usr/local/redis/conf/redis.conf
    protected-mode no # 关闭安全保护机制,允许主从、哨兵、集群中各节点之间的相互访问
  20. (主服务)重启redis服务
    systemctl restart redis
  21. (从服务)编辑配置
    vim /usr/local/redis/conf/redis.conf
    replicaof [主服务IP] 6379
    547行:masterauth [主服务密码]
    第1051行设置密码 requirepass [密码]
  22. (从服务)重启redis服务
    systemctl restart redis
  23. 主从切换-Sentinel哨兵

  24. (每个服务,奇数个,最少3个)编辑配置
    vim /usr/local/redis/conf/sentinel.conf
    protected-mode no # 关闭安全保护机制,允许主从、哨兵、集群中各节点之间的相互访问
    port 26379
    daemonize yes
    sentinel monitor mymaster [主服务IP] 6379 [阈值,需要几个哨兵标记主观下线后才判定为客观下线,一般设置为哨兵数量的一半向上取整]
    sentinel auth-pass mymaster [主服务密码]
  25. (每个服务)启动哨兵
    redis-sentinel /usr/local/redis/conf/sentinel.conf
  26. redis集群

  27. Redis官网查看集群搭建方式:https://redis.io/topics/cluster-tutorial
    创建集群要求redis没有任何数据,包括appendonlydir、dump.rdb、nodes_700X.conf
    创建集群要求至少3个主节点
    集群拆分出16384个哈希槽用来方便数据存储,分给集群中的主节点
    本示例为三台服务器,每台服务器部署两个redis节点,规划如下:
    server1 server2 server3
    主1 从1
    主2 从2
    从3 主3
  28. (每个服务)编辑配置文件(六个节点的端口分别使用7001~7006)
    vim /usr/local/redis/conf/redis[端口].conf
    port [端口]
    cluster-enabled yes # 启用集群模式
    cluster-config-file nodes_[端口].conf
    cluster-node-timeout 5000 # 超时时间
    appendonly yes
    pidfile /var/run/redis_[端口].pid
  29. (每个服务)启动服务
    redis-server /usr/local/redis/conf/redis[端口].conf
  30. 创建集群(三个主节点写在前面,对应从节点写在后面,--cluster-replicas 1表示每个主节点有1个从节点)
    redis-cli --cluster create server1:7001 server2:7003 server3:7005 server1:7002 server2:7004 server3:7006 --cluster-replicas 1
  31. 连接集群
    redis-cli -c -h [主节点IP] -p 7001
  32. 关闭集群
    redis-cli -c -h [serverIP] -p [端口] shutdown
    重启集群
    redis-server /usr/local/redis/conf/redis[端口].conf
  33. 添加主节点到集群
    redis-cli --cluster add-node server4:7007 server1:7001
    可能遇到某几个槽未迁移的问题,解决步骤:
    1. 修复槽,多个槽则执行多次
      redis-cli -h [服务器IP] -p [端口] cluster setslot [槽索引] stable
    2. 自动平衡
      redis-cli --cluster rebalance server1:7001 --cluster-threshold 1
  34. 添加从节点到集群
    1. 获取新主节点 ID
      NODE_ID_7007=$(redis-cli -h server4 -p 7007 cluster nodes | grep myself | awk '{print $1}')
    2. 添加从节点并绑定到主节点
      redis-cli --cluster add-node server5:7008 server1:7001 --cluster-slave --cluster-master-id $NODE_ID_7007
    3. 验证集群状态
      redis-cli --cluster check server1:7001