redis相比memcached不仅多了数据持久化的部分,对多种数据结构的支持和主从复制的支持也更好了。

在这个实验中我增加了2个redis slave,即1个master(6379端口),2个slave(6389和6399端口),同样的数据备份3次。

2个slave的配置文件redis_slave1.conf, redis_slave2.conf的部分配置

# redis_slave1.conf
port 6389
slaveof localhost 6379
slave-read-only yes# redis_slave2.conf
port 6399
slaveof localhost 6379
slave-read-only no

事后发现slave-read-only是个很鸡肋的选项,基本不是很有用。

然后用ruby写一段程序写一个字符串进去,当然是写到master的redis上。

 1 # 20140202, redis_test_master.rb
 2
 3 require 'rubygems'
 4 require 'redis'
 5
 6 redis=Redis.new(:host => "localhost", :port => 6379)
 7
 8 puts ">>>>>>>>>>TEST REDIS STRING>>>>>>>>>>"
 9 redis.set:"str1","1234567890"
10 p redis.get:"str1"
11 puts "TEST " + (redis.type:"str1") + " END"
12 # redis.del:"str1"

输出是

>>>>>>>>>>TEST REDIS STRING>>>>>>>>>>
"1234567890"
TEST string END

然后再写一段ruby从slave1上读出来,

 1 # 20140202, redis_test_slave1.rb
 2
 3 require 'rubygems'
 4 require 'redis'
 5
 6 redis=Redis.new(:host => "localhost", :port => 6389)
 7
 8 puts ">>>>>>>>>>TEST REDIS STRING>>>>>>>>>>"
 9 p redis.get:"str1"
10 puts "TEST " + (redis.type:"str1") + " END"

输出和master的那段程序一样,因为slave2上设置了可写,所以可以对slave2进行写操作,

 1 # 20140202, redis_test_slave2.rb
 2
 3 require 'rubygems'
 4 require 'redis'
 5
 6 redis=Redis.new(:host => "localhost", :port => 6399)
 7
 8 puts ">>>>>>>>>>TEST REDIS STRING>>>>>>>>>>"
 9 p redis.get:"str1"
10 redis.set:"str1","12345"
11 p redis.get:"str1"
12 puts "TEST " + (redis.type:"str1") + " END"
13 # redis.del:"str1"

输出是

>>>>>>>>>>TEST REDIS STRING>>>>>>>>>>
"1234567890"
"12345"
TEST string END

如果尝试对没有设置slave可写的redis slave做写的动作,当然会报错,我的程序ruby报错如下

/var/lib/gems/1.9.1/gems/redis-3.0.7/lib/redis/client.rb:97:in `call': READONLY You can't write against a read only slave. (Redis::CommandError)from /var/lib/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:676:in `block in set'from /var/lib/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:37:in `block in synchronize'from /usr/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'from /var/lib/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'from /var/lib/gems/1.9.1/gems/redis-3.0.7/lib/redis.rb:672:in `set'from /home/arnes/project/ruby1/rb4/redis_test_slave2.rb:10:in `<main>'
[Finished in 0.1s with exit code 1]

如果是用redis-cli做这个实验,尝试写redis slave会报错如下

(error) READONLY You can't write against a read only slave.

那是不是只要用redis的话,就尽量打开slave可写选项呢?我认为,这个选项尽量不要打开,事实上,默认的redis.conf也是没有打开这个选项。原因是,即使打开了这个选项,向redis slave中写了数据,写入的数据也不会同步到master。所以,redis支持的是master-slave结构,而不是master-master这种双活结构。当下一次,master上的数据又有所修改之后,这个数据又会同步到slave上,slave上临时写入的数据就会被新的值覆盖。

转载于:https://www.cnblogs.com/valleylord/p/3537232.html

redis主从复制实验,使用ruby相关推荐

  1. redis主从复制故障转移

    Redis主从复制与故障切换 目录 目录1 一.概述1 二. 实验目的2 三.试验环境2 四. 说明2 五. 拓扑2 六. 实施步骤2 6.1.分别安装redis2.8.32 6.2.配置主从同步3 ...

  2. Redis—主从复制

    原文作者:编程迷思 原文地址:深入学习Redis(3):主从复制 一.主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从 ...

  3. Redis主从复制、哨兵模式和分布式集群

    为什么需要集群和高可用 为什么需要主从复制 主要是安全性和可用性的考虑,如果只有一个redis服务,一旦服务宕机,那么所有的客户端无法访问,会对业务造成很大影响,另一个是一旦硬件损坏,单机无法恢复,会 ...

  4. 高可用的Redis主从复制集群,从理论到实践

    作者:Sicimike blog.csdn.net/Baisitao_/article/details/105545410 前言 我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不 ...

  5. Redis主从复制、哨兵、Cluster安装部署

    文章目录 1.主从复制(Replication) 1.1.部署主从复制 1.1.1.环境说明 1.1.2.安装步骤 1.2.配置主从 1.3.主从复制优缺点 2.哨兵(Sentinel) 2.1.部署 ...

  6. Redis主从复制、Redis哨兵模式、Redis集群

    目录 Redis主从复制 主从复制 Redis哨兵模式 哨兵sentinel 哨兵的工作原理 哨兵sentinel-实现高可用 sentinel的坑 修改从节点的选举优先级 sentinel.conf ...

  7. 【Redis学习笔记】13.Redis 主从复制

    Redis 主从复制 1. Redis 主从复制特性 2. Redis 主从复制流程 3. Redis 主从复制操作 3.1. 快速部署Redis实例 3.2. 配置主从复制 3.3. 查看主从复制 ...

  8. Redis 主从复制的原理及演化

    一.什么是主从复制 在数据库语境下,复制( replication)就是将数据从一个数据库复制到另一个数据库中.主从复制,是将数据库分为主节点和从节点,主节点源源不断地将数据复制给从节点,保证主从节点 ...

  9. Redis 主从复制和哨兵模式

    文章目录 主从复制 主从复制概念 部署主从模式 实验环境 实验过程 实验效果 实验结论 哨兵模式 哨兵模式原理 哨兵模式的作用 部署哨兵模式 1:修改配置文件 2:启动哨兵 3:验证哨兵模式 主从复制 ...

最新文章

  1. zsh 每次打开Terminal都需要source bash_profile问题
  2. [Usaco2009 Feb]Revamping Trails 道路升级
  3. Python入门基础知识学什么?
  4. 使用 .toLocaleString() 轻松实现多国语言价格数字格式化
  5. oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6
  6. springJDBC一对多关系,以及Java递归,jsp递归的实现
  7. web前端技术亮点_Web前端开发职业技术要求规划
  8. python开源项目贡献_如何通过为开源项目做贡献来发展自己的职业
  9. 很好的关于机器学习入门讲解(深入浅出)
  10. 计算机视觉及智能影像行业深度研究报告
  11. 【朝花夕拾】【编程基础】一 存储单位
  12. Java 对 Excel 修改
  13. 学生专用计算机abs什么意思,出现abs标志什么意思
  14. 【Python】绘制空气质量日历图
  15. 【软件测试】PDM、PTM、IPD介绍(捣鼓一晚上的血泪知识)
  16. HTML中使背景图片自适应浏览器大小
  17. 无穷项和求极限(夹逼准则)
  18. android程序安装目录在哪里,Android app 安装目录知识
  19. 一个向上帝买了挂的男人
  20. 基于html超市管理系统,基于HTML5的超市综合管理系统的研究与实现

热门文章

  1. 巨杉数据库完成数千万美元C轮融资,嘉实投资领投
  2. Linux优化和目录结构
  3. SpockFS —— 基于 HTTP 的文件系统
  4. 任务的协作的基本实现
  5. W3C宣布成立Web性能工作组
  6. speech codec (G.711, G.723, G.726, G.729, iLBC)
  7. Electron Cash发布功能机BCH钱包,低端市场利好来袭
  8. 我需要运行自己的节点吗?
  9. Android实现模块 api 化
  10. PAT1127 如何根据后序遍历中序遍历建树?