Radis缓存
为了缓解数据库压力
在目中查询功能是非常频繁的,如果每次查询都调用数据库的话,会给数据库造成很大的压力,因此需要在用户和数据库之间加一层缓存,对于同样的查询,只查询一遍数据库,然后把数据保存到缓存当中,当其他用户再访问同样的页面时便可以直接从缓存中去读取数据,这样查询效率将会提升非常多,同时也会大大减轻数据库的压力。
为何要搭建Redis集群?
Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB。Redis更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。
注意:Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。Redis集群至少需要6台服务器。
伪分布式Redis集群
Redis集群,由于集群的
容错机制是超过半数的节点认为某节点挂掉就确认挂掉,因此我们搭建的集群最好是奇数台(>=3)。又由于为了高可用性,每个节点需要有备份节点,因此我们搭建一个Redis集群至少要有6台虚拟机。
我们的本机又确实跑不了6台虚拟机,但我们还想搭建Redis集群,那怎么办呢?
具体做法是可以使用一台虚拟机运行6个Redis实例,每个Redis实例需要运行在不同的端口,这里我假设为7001-7006这6个端口。
redis-cluster架构图:
![](https://i-blog.csdnimg.cn/blog_migrate/34fe1fa91af7202ac807008d306314ae.jpeg)
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样 每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
redis-cluster容错机制:(实现高可用,容灾)
![](https://i-blog.csdnimg.cn/blog_migrate/34fe1fa91af7202ac807008d306314ae.jpeg)
选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作
如果集群任意master挂掉,且当前master没有slave,集群进入fail状态,即集群的slot映射[0-16383]不完整时进入fail状态,cluster-require-full-coverage参数,默认关闭
打开集群兼容部分失败.如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,
当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
ping 查看端口的健康状态
PONG //正常 无反应 //错误
五种数据类型(Value的数据类型)
String、Hash、List、Set、SortedSet
设置Key得有效时间
expire key 时间 //设置有效时间 或者 重置过期时间
persist key //设置key持久化
tll key //查看有效时间
正数:正在倒计时
-1 :有效,持久化的
-2 :key不存在