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