Redis 是单线程的,但是一般的作为缓存使用的话,速度已经足够使用。
官方有一个简单测试:测试完成 50 个并发执行 100000 个请求,设置和获取的值是一个 256 字节字符串。结果:读的速度 110000次/s,写的速度81000次/s。
不过对于访问量特别大的服务来说,还是稍有不足。这时就需要考虑搭建集群。
Redis 主要提供三种集群策略
在主从复制中,数据库分为俩类,主数据库(master)和从数据库(slave)。
主从复制特点:
工作机制
主从配置
Redis 默认是主数据,所以 Master 无需配置,只需要修改 Slave 的配置即可。
设置需要连接的 Master 的ip端口
如果 Master 设置了密码。需要配置:
连接成功进入命令行后,可以通过以下命令行查看连接该数据库的其他库信息:
该模式是从 Redis 的 2.6 版本开始提供的,但是当时这个版本的模式是不稳定的,直到 Redis 的 2.8 版本以后,这个哨兵模式才稳定下来,无论是主从模式,还是哨兵模式,这两个模式都有一个问题,不能水平扩容,并且这两个模式的高可用特性都会受到Master主节点内存的限制。
哨兵的作用
监控 Redis 系统的运行状况,功能如下
工作机制
哨兵配置
哨兵配置的配置文件为sentinel.conf,设置主机名称,地址,端口,以及选举票数即恢复时最少需要几个哨兵节点同意。只要配置需要监控的master就可以了,哨兵会监控连接该master的slave。
启动哨兵节点
可以在任何一台服务器上查看指定哨兵节点信息:
控制台输出哨兵信息
3.0 版本之前的 Redis 是不支持集群的,那个时候,Redis 如果想要集群的话,就需要一个中间件,然后这个中间件负责将需要存入 Redis 中的数据的 key 通过一套算法计算得出一个值。然后根据这个值找到对应的 Redis 节点,将这些数据存在这个 Redis 的节点中。在取值的时候,同样先将 key 进行计算,得到对应的值,然后就去找对应的 Redis 节点,从对应的节点中取出对应的值。
这样做有很多不好的地方,比如说计算都需要在系统中去进行,会增加系统的负担。还有就是这种集群模式下,某个节点挂掉,其他的节点无法知道。而且也不容易对每个节点进行负载均衡。
从 Redis 3.0版本开始支持 redis-cluster 集群。redis-cluster 采用无中心结构,每一个节点都保存有这个集群所有主节点以及从节点的信息,及集群状态,每个节点都和其他节点连接。所以 redis-cluster 是一种服务端分片技术。
一、twemproxy 中间件
twemproxy 又称 nutcracker,起源于推特系统中 redis、memcached 集群的轻量级代理。
Redis 代理中间件 twemproxy 是一种利用中间件做分片的技术。twemproxy 处于客户端和服务器的中间,将客户端发来的请求,进行一定的处理后(sharding),再转发给后端真正的 redis 服务器。也就是说,客户端不直接访问redis服务器,而是通过t wemproxy 代理中间件间接访问。降低了客户端直连后端服务器的连接数量,并且支持服务器集群水平扩展。
twemproxy 中间件的内部处理是无状态的,它本身可以很轻松地集群,这样可以避免单点压力或故障。
twemproxy 是一个单点,很容易对其造成很大的压力,所以通常会结合 keepalived 来实现 twemproy 的高可用。这时,通常只有一台 twemproxy 在工作,另外一台处于备机,当一台挂掉以后,vip 自动漂移,备机接替工作。关于 keepalived 的用法可自行网上查阅资料。
二、codis 中间件
codis 是一个分布式的 Redis 解决方案,由豌豆荚开源,对于上层的应用来说,连接 codis proxy 和连接原生的 redis server 没什么明显的区别,上层应用可以像使用单机的 redis 一样使用,codis底 层会处理请求的转发,不停机的数据迁移等工作,所有后边的事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的 redis 服务。
客户端分片
分区的逻辑在客户端实现,由客户端自己选择请求到哪个节点。方案可参考一致性哈希,这种方案通常适用于用户对客户端的行为有完全控制能力的场景。
三、Jedis sharding集群
Redis Sharding 可以说是在 Redis cluster 出来之前业界普遍的采用方式,其主要思想是采用 hash 算法将存储数据的 key 进行 hash 散列,这样特定的 key 会被定为到特定的节点上。
庆幸的是,Java Redis 客户端驱动 Jedis 已支持 Redis Sharding 功能,即 ShardedJedis 以及结合缓存池的 ShardedJedisPool。
Jedis 的 Redis Sharding 实现具有如下特点:
Original: https://www.cnblogs.com/zhuminghui/p/16491004.html
Author: ”竹先森゜
Title: Redis 三种集群策略
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528968/
转载文章受原作者版权保护。转载请注明原作者出处!