简介
1、Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
2、redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
3、Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
4、就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,另外,它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性
安装redis
server2
停掉MySQL
推荐使用systemd
如果使用systemd管控,那么在make时,加上该选项
安装gcc和make
因为有Makefile,所以不用./configure
make+make install
redis默认安装位置
进入utils目录,运行redis自带的安装程序,有提示信息,提示用systemd
注释之后重新启动
6379是端口
config file :配置文件
log file : 日志
data direrctory :数据目录
executable path : 调用的主程序
server3
make+make install
使用
Redis-cli命令:启动 redis 服务器后,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务;
Redis Info 命令:以一种易于理解和阅读的格式,返回关于Redis 服务器的各种信息和统计数值。
redis主从复制
bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。
如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求。
slave也需要修改
replicaof用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点;
已经同步
常用指令
redis常用指令:
config get * //查看配置
select 1 //选择数据库
flushdb //清空当前数据库
flushall //清空所有数据库
move key 1 //移动key
del key //删除
rename oldkey newkey //改名
expire key 10 //设置过期时间
persist key //设置持久化
keys user* //查询
exists key //判断是否存在
redis+sentinel 实现高可用
Redis 的哨兵模式(Sentinel)用于管理多个 Redis 服务器(instance),该模式执行以下三个任务:
监控(Monitoring)
: Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification)
: 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover)
: 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器
不用编译直接传
配置sentinel
后面的2,说明至少两个节点投票说出故障了,才会切到新的master
启动之前拷贝,要不会写入本机信息
这个命令其实是软链接,两个命令都可以使用
故障切换
如今server2开启了,但是也不是master了,是slave
看server2配置文件
关于redis哨兵判断监视节点是否宕机的原理
redis哨兵Sdown,Odown两种失败状态:
主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。
客观下线条件只适用于主服务器,对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要协商, 从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。