redis3开始支持cluster集群模式,解决单点的瓶颈问题,本文以3.0.3为例搭建并测试cluster集群
搭建步骤
一.安装ruby
a) wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz
b) tar -xvzf ruby-2.2.3.tar.gz
c) cd ruby-2.2.3
d) ./configure
e) make
d) make install
二.安装rubygems & ruby redis
a) yum install rubygems
b) gem install redis
上述过程中可能由于gem source问题导致下载失败,可以换成国内的
添加源 gem sources -a http://ruby.taobao.org/
删除源 gem sources --remove http://rubygems.org/
查看源 gem sources -l
三.安装redis
a) wget http://download.redis.io/releases/redis-3.0.3.tar.gz
b) tar -xzvf redis-3.0.3.tar.gz
c) cd redis-3.0.3
d) make
e) make install
四.集群配置
集群10.2.102.7, 10.2.102.8,10.2.102.9相互打通,每台机器部署两个redis实例
a) 在每台机器上建立两个目录
mkdir redis-cluster/7000 redis-cluster/70001
b) 在每个目录下创建配置文件redis.conf,配置如下,其中port值和目录名对应
五.启动
a) 进入每台机器的实例目录,执行
redis-server redis.conf
成功后可以在实例目录下的redis.log中看到如下日志
b) 关联实例创建集群
3台机器6个实例,一主一备将slots切分为3份
redis-trib.rb create --replicas 1 10.2.102.7:7000 10.2.102.7:7001 10.2.102.8:7000 10.2.102.8:7001 10.2.102.9:7000 10.2.102.9:7001
输入 yes 接受 主备节点分配
在每个实例目录下可以看见生成了一份nodes.conf,如下
六.测试
可以通过redis-cli脚本,但须要加上-c参数指定cluster模式连接。用junit代码如下,其中RedisClusterClient是基于JedisCluster的封装:
public class RedisClusterCliTest { private final static String key_cnt = "key_cnt"; final static Set<HostAndPort> nodes = new HashSet<HostAndPort>(); static { nodes.add(new HostAndPort("10.2.102.7", 7000)); nodes.add(new HostAndPort("10.2.102.7", 7001)); //nodes.add(new HostAndPort("10.2.102.8", 7000)); //nodes.add(new HostAndPort("10.2.102.8", 7001)); //nodes.add(new HostAndPort("10.2.102.9", 7000)); //nodes.add(new HostAndPort("10.2.102.9", 7001)); } private RedisClusterClient rcc; @Before public void init() { rcc = new RedisClusterClient(nodes); } @After public void destroy() { rcc.close(); } @Test public void test_set() { for (int i = 0; i < 100; ++i) { rcc.setex("key" + i, 60 * 10, String.valueOf(i)); } } @Test public void test_get() { for (int i = 0; i < 100; ++i) { String value = rcc.get("key" + i); System.out.println(value); } } @Test public void test_incr() { System.out.println("Before incr : " + rcc.get(key_cnt)); rcc.incr(key_cnt); System.out.println("After incr : " + rcc.get(key_cnt)); } @Test public void test_incr_multi() { long start = Long.parseLong(rcc.get(key_cnt)); System.out.println("Before incr : " + start + ", " + new Date()); int threadNum = 100; int count = 100; ExecutorService threadPool = Executors.newFixedThreadPool(threadNum, new ThreadFactory(){ AtomicInteger index = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { return new Thread(r, "Thread-incr-" + index.incrementAndGet()); } }); List<Future<Boolean>> result = new ArrayList<Future<Boolean>>(threadNum); for (int i = 0; i < threadNum; ++i) { result.add(threadPool.submit(new IncrThread(rcc, key_cnt + i, count))); } for (Future<Boolean> f : result) { try { if(!f.get()) { System.err.println("Fail ...."); break; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } System.out.println("After incr : " + rcc.get(key_cnt) + ", Except " + (start + count * threadNum) + ", " + new Date()); } @Test public void test_decr() { System.out.println("Before decr : " + rcc.get(key_cnt)); rcc.decr(key_cnt); System.out.println("After decr : " + rcc.get(key_cnt)); } class IncrThread implements Callable<Boolean> { RedisClusterClient rcc; String key; int count; IncrThread(RedisClusterClient rcc, String key, int count) { this.rcc = rcc; this.key = key; this.count = count; } @Override public Boolean call() { for (int i = 0; i < count; ++i) { rcc.incr(key); } return true; } } }
相关推荐
**Redis Cluster 搭建全攻略** Redis 是一个高性能的键值存储系统,而 Redis Cluster 是它的分布式解决方案,提供数据的自动分片、故障转移和高可用性。本指南将详细讲解如何完整地搭建一个 Redis Cluster,同时...
接下来,我们将深入探讨如何搭建一个Redis Cluster以及其关键操作。 首先,为了构建一个Redis Cluster,你需要至少三个物理节点或虚拟机,每个节点运行两个Redis实例,总共六个实例。在本例中,我们有节点192.168....
综上所述,"edu-demo-redis-cluster-测试代码.rar"提供了一个在CentOS系统上搭建Redis集群的实践案例,包括多节点配置和测试代码,这对于学习和理解Redis集群的运作机制非常有帮助。通过实际操作和测试,可以更好地...
以上就是关于【redis-cluster-lib】的相关知识点,包括Redis集群的基本原理、文件列表的功能解析以及集群搭建和管理的要点。通过理解和掌握这些知识,你可以有效地利用Redis集群来提升应用的性能和可靠性。
标题“DB-Redis-Cluster-Lib”暗示了这个压缩包文件与数据库(DB)相关,特别是Redis的一个集群(Cluster)库或配置。Redis是一种高性能的键值存储系统,常用于缓存、数据库和消息中间件等场景。它支持数据结构如...
以上是关于Redis Cluster集群部署的详细步骤和知识点,通过学习和实践,您可以掌握如何搭建和管理自己的Redis分布式环境。请确保在实际环境中根据具体需求调整配置,并做好数据备份,以防万一。
Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,常被用于...而`redis-6.2.12-cluster`则可能是用于搭建和管理Redis集群的关键文件,对于运维人员来说,理解和掌握Redis的使用和集群管理至关重要。
这个项目"spring-boot-demo-cluster-redis-websocket"为开发者提供了一个可扩展和可复用的模板,可以帮助我们快速搭建起基于Spring Boot、Redis和WebSocket的实时通信系统。通过深入理解并实践该项目,我们可以掌握...
Redis 是一个高性能的键值数据库,常用于缓存和数据持久化。它的高效性得益于其内存存储特性,以及丰富的数据结构支持,如字符串、...通过深入学习和实践,可以更好地利用Redis来提升应用程序的性能和数据处理能力。
6. **集群**:探究Redis Cluster,了解其分片、槽分配和故障检测机制,以及如何搭建和管理Redis集群。 7. **性能优化**:讨论内存管理策略,如过期策略、最大内存限制,以及如何调整配置以提升性能。 8. **安全**...
`redis-trib` 是用 Ruby 编写的,因此在搭建 Redis 集群前,需要确保系统中已经安装了 Ruby 和对应的 Redis 非常重要的依赖 `redis-rb-cluster` 库。在 Windows 上,你可以使用 `rubyinstaller-2.3.3-x64` 来安装 ...
在Redis 5.0以上版本中,特别是5.0.2这个Linux版本,引入了一些重要的变化和改进,这对于搭建和管理Redis集群至关重要。 1. **Redis Cluster支持**: Redis 5.0引入了官方的集群解决方案——Redis Cluster,它允许...
"Redis Cluster集群的搭建与实践" Redis Cluster集群是Redis的一个高可用性解决方案,它可以在多个Redis节点之间分配数据和状态,提供高性能和高可用性的数据存储服务。下面是Redis Cluster集群的主要知识点: 1. ...
10. **集群配置**:如果需要在Windows上搭建Redis集群,需要配置多个实例,并使用`redis-trib.rb`(需要Ruby环境)或`redis-cli`的`CLUSTER`子命令来创建和管理集群。 总之,Redis在Windows上的安装和使用虽然相较...
Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在集群环境中,Redis可以提供高可用性和数据分片能力,以处理更大的数据量和并发请求。...继续学习和实践,以便更好地管理你的Redis集群。
Redis 集群是分布式数据存储的一个重要解决方案,它提供了数据分片、容错和扩展性,使得在大型系统中可以高效地管理大量数据。本手册将指导你一步步搭建一个...动手实践是理解技术的最好方式,祝你在搭建过程中有收获!
Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,提供高可用性和可...通过实践这个“rediscluster集群demo”,你将更好地理解如何管理和操作Redis Cluster,以便在未来项目中应用。
9. **Cluster集群**:Redis Cluster是官方提供的分布式解决方案,允许在多个节点之间自动分片数据,实现水平扩展。 解压"Redis-v6.0.20.zip"后,你可以找到包含源代码、编译脚本、配置文件等资源。通过阅读源码,...
在本实战栗子中,我们将深入探讨如何搭建Redis Cluster,学习其基本概念、操作指令以及如何处理常见问题。 首先,我们需要理解Redis Cluster的核心特性。Redis Cluster采用无中心架构,每个节点都是对等的,它们...