在如今并发的环境下,对大数据量的查询采用缓存是最好不过的了,本文使用redis搭建集群
(个人喜欢redis,对memcache不感冒)
redis是3.0后增加的集群功能,非常强大
集群中应该至少有三个节点,每个节点有一备份节点。这样算下来至少需要6台服务器
考虑到有些朋友的电脑配置不是很高,跑多个虚拟机就会卡,这边放出伪分布式和分布式
(2年前的配置)
前提先装好一个单例情况下的redis(这里就不多说了)
需要6个redis实例
搭建集群的步骤:
在/usr/local下 创建文件夹
![](https://yqfile.alicdn.com/img_269ef887f57abcf090404c3dc560a12e.png?x-oss-process=image/resize,w_1400/format,webp)
这个我是把原来的单例redis改了个名字做的
![](https://yqfile.alicdn.com/img_d5b4135d93606707f937aa0ed91a385c.png?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_d53f1ddb5dd598e515b1a5c89ba48048.png?x-oss-process=image/resize,w_1400/format,webp)
进入redis01/bin
删除dump文件
![](https://yqfile.alicdn.com/img_0e1b5c70518434857c788d091ead10a1.png?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_559902b3c2765c3d6bc3ce1aa59248b7.png?x-oss-process=image/resize,w_1400/format,webp)
修改端口
![](https://yqfile.alicdn.com/img_98bca3e9ffba9a3fe2de5c0ce634c2f5.png?x-oss-process=image/resize,w_1400/format,webp)
打开注释
![](https://yqfile.alicdn.com/img_527e16688579d0bc5e4484b9265984e7.png?x-oss-process=image/resize,w_1400/format,webp)
复制多份
(真实环境下只需要一个就行,然后其余5台机子重复以上操作)
![](https://yqfile.alicdn.com/img_c0872e463d2b6e382c397988da851474.png?x-oss-process=image/resize,w_1400/format,webp)
指定端口从
7001
到
7006
这是真实环境下的
![](https://yqfile.alicdn.com/img_bafb1853222924175805875d4f1cbafc.png?x-oss-process=image/resize,w_1400/format,webp)
占用率
![](https://yqfile.alicdn.com/img_31eade38a3b6cf69736c683293583de0.jpg?x-oss-process=image/resize,w_1400/format,webp)
在
redis
源码文件夹下的
src
目录下。
redis-trib.rb,这个ruby脚本
![](https://yqfile.alicdn.com/img_b85f0750cc2ad37d2146b1733275cf0b.png?x-oss-process=image/resize,w_1400/format,webp)
第四步:把
redis-trib.rb
文件复制到到
redis-cluster
目录下。
(真实环境下,只需要放在你某个节点机子上就行,他会自动遍历到其他的节点上的,我做的时候放在了01上)
![](https://yqfile.alicdn.com/img_8ef1e3c9bc2862482dad594cad5f0371.png?x-oss-process=image/resize,w_1400/format,webp)
执行ruby脚本之前,需要安装ruby环境,不然装不了
yum install ruby
![](https://yqfile.alicdn.com/img_bcf39001dab31cf9faf1cc9ba3560999.png?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_a7125d8d29a9c0af9e5539ea8d23c569.png?x-oss-process=image/resize,w_1400/format,webp)
yum install rubygems
![](https://yqfile.alicdn.com/img_1cc2486e08c7315673361e0e01376488.png?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_2a2e69362f86ae20d207aa1cac2f85d7.png?x-oss-process=image/resize,w_1400/format,webp)
安装redis-trib.rb运行依赖的ruby的包
这个gem可以网上下载,很多
![](https://yqfile.alicdn.com/img_f6213e592de9f1f3ce7667dd06079546.png?x-oss-process=image/resize,w_1400/format,webp)
(真实环境下只需要在其中一台机子上运行就行了)
![](https://yqfile.alicdn.com/img_271df01aefad602b608252909eaf0c61.png?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_f915326632db28a1d22a8583e2314727.png?x-oss-process=image/resize,w_1400/format,webp)
进入各自的redis文件夹,分别启动所有的
redis
实例
![](https://yqfile.alicdn.com/img_4e1a9235eec24591fc449b9f8cb1fd02.png?x-oss-process=image/resize,w_1400/format,webp)
启动成功
![](https://yqfile.alicdn.com/img_636a82b0a150ad11558e0f21fd411b93.png?x-oss-process=image/resize,w_1400/format,webp)
使用
redis-trib.rb
创建集群
不管是不是伪分布式,这只需要启动一次
![](https://yqfile.alicdn.com/img_7a3ad7aced776ba8ea3eff0634d18125.png?x-oss-process=image/resize,w_1400/format,webp)
成功~!
链接第一个节点
![](https://yqfile.alicdn.com/img_2ec3f30abc6afb6a3157ba94a7a17c0a.png?x-oss-process=image/resize,w_1400/format,webp)
下面演示使用jedis来读写缓存
当然加入spring中一定要使用单例
1 @Test 2 public void testCluster() throws Exception { 3 Set<HostAndPort> nodes = new HashSet<>(); 4 nodes.add(new HostAndPort("192.168.1.193", 7001)); 5 nodes.add(new HostAndPort("192.168.1.194", 7002)); 6 nodes.add(new HostAndPort("192.168.1.195", 7003)); 7 nodes.add(new HostAndPort("192.168.1.196", 7004)); 8 nodes.add(new HostAndPort("192.168.1.197", 7005)); 9 nodes.add(new HostAndPort("192.168.1.198", 7006)); 10 JedisCluster jedisCluster = new JedisCluster(nodes); 11 jedisCluster.set("name", "lee"); 12 jedisCluster.set("age", "18"); 13 String name = jedisCluster.get("name"); 14 String value = jedisCluster.get("age"); 15 System.out.println(name); 16 System.out.println(value); 17 jedisCluster.close(); 18 }
运行结果:
可以看到redis客户端上取数据的时候IP是不一样的