目录
1.redis介绍
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
redis的官网地址 redis中文官方网站
redis是一种高级的key:value存储系统,其中value支持五种数据类型:
1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)关于key
1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd。
2.redis的常用命令
常用命令 含义
config get * 查看配置
select 1 选择数据库
flushdb 清空当前数据库
flushall 清空所有数据库
move key 1 移动key
del key 删除
rename oldkey newkey 改名
expire key 10 设置过期时间
persist key 设置持久化
persist key 查询
persist key 判断是否存在
3.redis的安装
源码编译
解压redis-6.2.4压缩包
直接进行make&&make install使用6379端口将if注释掉不然会报错
4.redis主从模式
slaveof 172.25.70.1 6379
min-slaves-to-write <slave 数量>
min-slaves-max-lag <秒数>
Redis 使用异步复制,因此无法确保 slave 是否实际接收到给定的写命令
实验步骤
基本命令开启6379端口将从机配置文件添加主机ip及端口号重启服务即可实现主从注:端口可任意、如6380端口
5.哨兵模式
介绍
主从模式下,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这种方式并不推荐,实际生产中,我们优先考虑哨兵模式。这种模式下,master宕机,哨兵会自动选举master并将其他的slave指向新的master。
在主从模式下,redis同时提供了哨兵命令redis-sentinel,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的redis机器发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
哨兵可以有多个,一般为了便于决策选举,使用奇数个哨兵。哨兵可以和redis机器部署在一起,也可以部署在其他的机器上。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现master宕机哨兵之间会进行决策选举新的master
哨兵模式的作用
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器;
当哨兵监测到master宕机,会自动将slave切换到master,然后通过发布订阅模式通过其他的从服务器,修改配置文件,让它们切换主机;
然而一个哨兵进程对Redis服务器进行监控,也可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。实验步骤
server1是master
slave是server2、3
修改配置文件将master设置为server1将配置好的文件发送给两个slave 查看动态信息
将server1的redis服务关闭
server2、3检测到开始选举新的master 新的master为server2 当server1重新启动时master不在恢复master身份
6.集群模式
实验原理
Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,对数据进行分片,也就是说每台 Redis 节点上存储不同的内容;
这里的6台redis两两之间并不是独立的,每个节点都会通过集群总线(cluster bus),与其他的节点进行通信。通讯时使用特殊的端口号,即对外服务端口号加10000。例如如果某个node的端口号是6379,那么它与其它nodes通信的端口号是16379。nodes之间的通信采用特殊的二进制协议。
对客户端来说,整个cluster被看做是一个整体,客户端可以连接任意一个node进行操作,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node,这有点儿像浏览器页面的302 redirect跳转。
根据官方推荐,集群部署至少要 3 台以上的master节点,最好使用 3 主 3 从六个节点的模式。测试时,也可以在一台机器上部署这六个实例,通过端口区分出来。
实验1
启动集群、默认为6个
六个集群平分16383个哈希槽,3个master、3个slave查看集群 M30001对应S30004 集群信息同发
当关闭任意一个M,对应的S会跳转成M
重新启动,之前的M会变成S
实验2:增加集群数
修改配置文件
将集群个数改为8将新增的加入到集群中新增的M未分配哈希槽
添加30007对应的S
取其他集群中的哈希槽
测试、添加成功