redis 学习笔记(3)-master/slave(主/从模式)

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 类似mysql的master-slave模式一样,redis的master-slave可以提升系统的可用性,master节点写入cache后,会自动同步到slave上。 环境: master node: 10.

类似mysql的master-slave模式一样,redis的master-slave可以提升系统的可用性,master节点写入cache后,会自动同步到slave上。

环境:

master node: 10.6.144.155:7030

slave node: 10.6.144.156:7031

 

一、配置

仅需要在slave node上修改配置:

找到slaveof这行,参考下面的修改(填上master node的Ip和端口就完事了)

slaveof 10.6.144.155 7030

另外注意下 slave-read-only yes 这行,这表示slave只读不写,也是推荐设置

 

二、验证

启动master/slave这二台机器上的redis,在master上加一个缓存项

然后在slave上取出该缓存项

取到了,说明master上的cache自动复制到slave节点了

 

三、redisson客户端使用

 1     @Test
 2     public void testRedisson() {
 3         Config config = new Config();
 4 
 5         config.useMasterSlaveConnection().setMasterAddress("10.6.144.155:7030")
 6                 .addSlaveAddress("10.6.144.156:7031");
 7 
 8         Redisson redisson = Redisson.create(config);
 9 
10         String key = "test";
11         
12         RBucket<String> myObj = redisson.getBucket(key);
13         if (myObj!=null){
14             myObj.delete();
15         }
16         
17         myObj.set("hello World");
18         
19         System.out.println(myObj.get());//断点停在这里,然后down掉master,不影响读取
20         
21         myObj.set("new Value");//恢复master,down掉slave,不影响写入
22         
23         System.out.println(myObj.get());//再恢复slave,down掉master,可正常读取
24         
25         myObj.set("can not write to master");//master已down掉,无法写入
26         
27         System.out.println(myObj.get());//恢复master,down掉slave,无法读取
28         
29         
30         redisson.shutdown();
31         
32         
33     }
View Code

注:经实际测试,redisson客户端在set写操作时,连接的是master node,get读操作时连接的是slave,而且遇到操作失败,会同步阻塞后面的处理(一直等待,直到超时)

即:set操作时,至少要有一台可连接的master,get操作时,至少要有一台可连接的slave

 

四、Jedis客户端使用

 1     @Test
 2     public void testJedis() throws InterruptedException {
 3         
 4         Jedis jedisMaster = new Jedis("10.6.144.155", 7030);
 5         
 6         String key = "a";
 7         
 8         String a= jedisMaster.get(key);
 9         if (a!=null){
10             jedisMaster.del(key);
11         }
12         jedisMaster.set(key, "hi!");//向master写入
13         jedisMaster.close();
14         
15 
16         Jedis jedisSlave = new Jedis("10.6.144.156", 7031);// 连接slave
17         
18         jedisSlave.slaveof("10.6.144.155", 7030);// 指定master        
19 
20         System.out.println(jedisSlave.get(key));
21         
22         jedisSlave.slaveofNoOne();//master如果down挂,可以用代码将slave提升为master(即:可写)
23 
24         jedisSlave.set(key, "new");
25 
26         System.out.println(jedisSlave.get(key));
27 
28         jedisSlave.close();
29 
30     }
View Code

 

后记:个人感觉master-slave模式作用有限,因为从二种client的测试结果看,在没有其它监控机制的前提下,无论是master或slave挂掉,都需要手动调整配置或修改代码,才能保证读/写继续正常工作,理想情况是master挂掉,最好slave中能自动(无需人工干预)选出一台充当master继续服务。redis 的cluster功能,目前尚处于beta阶段,估计不久的将来,等cluster功能正式发布后,可以通过custer功能搭建redis集群。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
70 1
|
2月前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
|
3月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
63 0
|
3月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
70 0
|
3月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
29 0
|
3月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
36 0
|
29天前
|
缓存 NoSQL 关系型数据库
Redis学习总结
Redis学习总结
31 1
|
2月前
|
存储 NoSQL 算法
Redis 集群模式搭建
Redis 集群模式搭建
65 5
|
1月前
|
存储 缓存 NoSQL
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
|
1月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决