Redis 安装 目录规划 [root@r_db01 ~]# tree /data /data ├── redis_cluster │ └── redis_6379 └── soft [root@r_db01 ~]# tree /opt/ /opt/ └── redis_cluster └── redis_6379 ├── conf ├── logs └── pid 编译安装 创建所需目录 mkdir -p /data/soft mkdir -p /data/redis_cluster/redis_6379 mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs} 下载tar包 cd /data/soft/ wget http://download.redis.io/releases/redis-3.2.9.tar.gz 解压安装 yum install -y gcc-c++ tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/ ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis cd /opt/redis_cluster/redis make && make install 生成配置文件 vi /opt/redis_cluster/redis_6379/conf/redis_6379.conf ### 以守护进程模式启动 daemonize yes ### 绑定的主机地址 bind 10.35.172.71 ### 监听端口 port 6379 ### pid文件和log文件的保存地址 pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log ### 设置数据库的数量，默认数据库为0 databases 16 ### 指定本地持久化文件的文件名,默认是dump.rdb dbfilename redis_6379.rdb ### 本地数据库的目录 dir /data/redis_cluster/redis_6379 启动服务 启动 redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 关闭 redis-cli -h db01 shutdown 使用 全局命令 查看所以键(禁止使用) Keys * 查看键总数 Dbsize 检查键是否存在(存在:1 不存在: 0) Exists key 删除键 Del key [key …] 键过期 Expire key seconds # 大于等于0的证书: 键剩余过期时间 # -1: 键没设置过期时间 # -2: 键不存在 查看键的类型 Type key 字符类型 设置 - 获取 SET GET db01:6379> set key value OK db01:6379> get key "value" 计数器 INCR INCRBY db01:6379> SET A 10 OK db01:6379> GET A "10" db01:6379> INCR A (integer) 11 db01:6379> GET A "11" db01:6379> INCRBY A 4 (integer) 15 db01:6379> get A "15" 多值设置 - 多支获取 MEST MGET db01:6379> mset key3 v3 key4 v4 key5 v5 OK db01:6379> mget key3 key4 key5 1) "v3" 2) "v4" 3) "v5" 判断,删除 EXISTS DEL db01:6379> exists key5 (integer) 1 db01:6379> del key5 (integer) 1 db01:6379> exists key5 (integer) 0 db01:6379> del key5 (integer) 0 查看类型 TYPE db01:6379> set key5 v5 OK db01:6379> type key5 string 过期(单位: 秒) EXPIRE db01:6379> expire key5 10 (integer) 1 db01:6379> ttl key5 (integer) 6 去除超时 PERSIST db01:6379> persist key5 (integer) 1 db01:6379> ttl key5 (integer) -1 列表 LPUSH RPUSH LRANGE db01:6379> RPUSH LST 1 2 3 4 5 (integer) 5 db01:6379> get lst (error) WRONGTYPE Operation against a key holding the wrong kind of value db01:6379> lrange lst 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" RPOP LPOP db01:6379> LPOP LST "1" db01:6379> lrange LST 0 -1 1) "2" 2) "3" 3) "4" 4) "5" db01:6379> RPOP LST "5" db01:6379> lrange LST 0 -1 1) "2" 2) "3" 3) "4" 哈希 HMSET HMGAT HGAT db01:6379> HMSET acha name acha age 20 six m OK db01:6379> HMGET acha name age six 1) "acha" 2) "20" 3) "m" db01:6379> HGET acha age "20" 集合 SADD SMEMBERS db01:6379> sadd set1 1 2 3 (integer) 3 db01:6379> smembers set1 1) "1" 2) "2" 3) "3" SREM db01:6379> srem set1 2 3 (integer) 2 db01:6379> smembers set1 1) "1" SDIFF (差集) db01:6379> sadd set1 1 2 3 4 (integer) 2 db01:6379> sadd set2 1 4 5 (integer) 3 db01:6379> sdiff set1 set2 1) "2" 2) "3" SINTER (交集) db01:6379> sinter set1 set2 1) "1" 2) "4" SUNION (并集) db01:6379> sunion set1 set2 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 持久化 RDB 可以在指定的时间间隔内生成数据集的 时间点快照 优点：速度快，适合于用做备份，主从复制也是基于RDB持久化功能实现的 缺点：会有数据丢失 配置参数 vim /data/6379/redis.conf dir /data/6379 dbfilename dump.rdb #900秒（15分钟）内有1个更改 save 900 1 #300秒（5分钟）内有10个更改 save 300 10 #60秒内有10000个更改 save 60 10000 AOF 记录服务器执行的所有写操作命令，并在服务器启动时，通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存，新命令会被追加到文件的末尾 优点：可以最大程度保证数据不丢 缺点：日志记录量级比较大 配置参数 #日志文件名 appendfilename "appendonly.aof" #是否打开aof日志功能 appendonly yes #每1个命令,都立即同步到aof appendfsync always #每秒写1次 appendfsync everysec #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof appendfsync no Tip: RDB & AOF 可以同时开启 安全认证 redis默认开启了保护模式，只允许本地回环地址登录并访问数据库 protected-mode yes/no （保护模式，是否只允许本地访问） bind：指定IP进行监听 [root@db01 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf bind 10.35.172.71 127.0.0.1 requirepass：密码 [root@db01 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf requirepass sa 密码验证 [root@db01 ~]# redis-cli -a sa 127.0.0.1:6379> set k1 v1 OK or [root@db01 ~]# redis-cli -a sa 127.0.0.1:6379> set k1 v1 OK 主从复制 一个主节点可以有多个从节点 每个从节点只能由一个主节点 配置方法： 在配置文件中加入 slaveof {masterHost} {masterPort} 启动命令后加 slaveof {masterHost} {masterPort} 直接使用命令 slaveof {masterHost} {masterPort} 查看状态信息： Info replication 断开复制: slaveof no one Tip:断开主从关系，从节点升为主节点，不会清空原有数据 哨兵 Sentinel (哨兵)，基于主从复制，为redis提供高可用性，故障时，可以自动切换主从 作用： 监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover) 部署： 创建数据目录 mkdir -p /data/redis_cluster/redis_26379 创建配置目录 mkdir -p /opt/redis_cluster/redis_26379/{conf,pid,logs} 生成配置文件 vim /opt/redis_cluster/redis_26379/conf/redis_26379.conf bind 10.35.172.71 port 26379 daemonize yes logfile /opt/redis_cluster/redis_26379/logs/redis_26379.log dir /data/redis_cluster/redis_26379 sentinel monitor mymaster 10.35.172.71 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 配置文件说明 #主节点别名 主节点ip和端口 判断主节点失败,两个sentinel节点同意 sentinel monitor mymaster 10.0.0.51 6379 2 #选项指定 Sentinel 认为服务器已经断线所需的毫秒数。 sentinel down-after-milliseconds mymaster 30000 #向新的主节点发起复制操作的从节点个数，1轮询发起复制 sentinel parallel-syncs mymaster 1 #故障转移超时时间 sentinel failover-timeout mymaster 180000 启动 redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf 登录 redis-cli -h db01 -p 26379 查询 Info Sentinel 手动切换主节点 将从节点 slavepriority 配置为0 设置主节点 将slave-priority调回原值 #查询命令 CONFIG GET slave-priority #设置命令 CONFIG SET slave-priority 0 #主动切换 sentinel failover mymaster