redis通过命令传参以及主从复制

config set appendonly  yes  临时生效

如果想永久生效的话,执行

config rewrite

并不是所有的都支持修改

config set bind ip  修改bind参数会报错

(error) ERR Unsupported CONFIG parameter:bind  只能通过配置文件修改

redis主从复制

特点

1.一台master 可以拥有多个slave (1对多的关系)

2.多个slave 可以连接同一个master 外,还可以连接到其他slave (这样做的原因是如果masterdown 掉之后,

其中的一台slave立马可以充当master的角色,这样整个服务器流程不受影响)

3.主从复制不会阻塞master,在同步数据的同时,master 可以继续处理client 请求

4.提高系统的伸缩性

redis主从复制的过程:

1.slave 与master 建立连接,发送sync同步命令

2.master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新得写命令

并缓存

3.后台完成保存后,将文件发送给slave

4.slave 将文件保存到硬盘上

redis 主从复制配置和使用都非常简单,通过主从复制可以允许多个slave server拥有和mater server相同的数据库副本.下面是redis主从复制的一些特点

a.master可以有多个slave

b.除了多个slave连接到相同的master外,slave也可以连接其他slave形成图状结构

c .主从复制不会阻塞master,也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求

相反slave在初次同步数据时则会阻塞不能处理client的请求

d.主从复制可以用来提高系统的可以伸缩性,我们可以用多个slave 专门用于client的读请求 比如sort操作可以使用slave来处理,也可以用来做简单的数据冗余

e 可以在master 禁用数据持久化,只需注释掉master配置文件中的所有save配置,然后只在slave上配置数据持久化

首先修改主的配置文件

vim   /etc/redis/7000.conf    将bind注释掉

然后启动7000端口的redis服务  redis-server  /etc/redis/7000.conf

vim /etc/redis/7001.conf

将 slaveof改成       slaveof 127.0.0.1 7000  指向主服务器的端口

然后启动 7001 端口的redis服务   redis-server /etc/redis/7001.conf

通过客户端工具

redis-cli -p 7000 info  查看主的状态

# Replication
role:master     master
connected_slaves:1    从机的个数为 1个
slave0:ip=127.0.0.1,port=7001,state=online,offset=155,lag=0     状态为 online
master_repl_offset:155
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:154

redis-cli -p 7001 info  查看从的状态

# Replication
role:slave
master_host:127.0.0.1
master_port:7000
master_link_status:up        状态为 up 
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:225
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

检查是否同步

先连接主服务 ,并设定两个值

[[email protected] redis]# redis-cli -p 7000

127.0.0.1:7000> set s1 zhuchenghan
OK
127.0.0.1:7000> set s2 zhangqidong
OK
127.0.0.1:7000>
127.0.0.1:7000> get s1
"zhuchenghan"
127.0.0.1:7000>
127.0.0.1:7000> get s2
"zhangqidong"
127.0.0.1:7000>
127.0.0.1:7000>
127.0.0.1:7000> mget s1 s2
1) "zhuchenghan"
2) "zhangqidong"

在从服务器上进行验证 并且从服务器只能读

[[email protected] ~]# redis-cli -p 7001
127.0.0.1:7001>
127.0.0.1:7001>
127.0.0.1:7001>
127.0.0.1:7001> get s1
"zhuchenghan"
127.0.0.1:7001>
127.0.0.1:7001> get s2
"zhangqidong"
127.0.0.1:7001>
127.0.0.1:7001> mget s1 s2
1) "zhuchenghan"
2) "zhangqidong"
127.0.0.1:7001>
127.0.0.1:7001> set s1 a
(error) READONLY You can‘t write against a read only slave.  (只读)

在主上修改 key 值  s1

127.0.0.1:7000> set s1 www.baidu.com
OK
127.0.0.1:7000>
127.0.0.1:7000> get s1

在从上验证 s1

127.0.0.1:7001> get s1
"www.baidu.com"

说明主从同步 没问题

可以再添加一条 把 其变更 主-从--从

此时我们如果将主 7000端口的服务给停掉,这时候  从 7001 就down掉了

我们如果修改7001 的/etc/redis/7001.conf 的配置文件 将slaveof 给删除或注释掉以后

再重新启动 7001 此时 7001 的状态就为 master 了

时间: 2024-10-12 17:36:52

redis通过命令传参以及主从复制的相关文章

Redis 笔记与总结5 Redis 常用命令之 键值命令 和 服务器命令 && 高级应用之 安全性 和 主从复制

Redis 提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在 Linux 终端使用. 1. 键值相关命令: 2. 服务器相关命令 键值相关命令 ① keys 命令 返回满足给定 pattern 的所有 key. [例] 127.0.0.1:6379> keys * 1) "time" 2) "list4" 3) "list1" 4) "email" 5) "age" 6) "

shell基础:使用read、命令行脚本传参实现输入2个整数并计算

shell基础练习题:使用read交互输入,命令行脚本传参2种方式,实现输入2个整数数字,并计算加减乘除.考察shell基础知识包括:变量定义.read.if判断语句.正则表达式等知识: 第一种方式:read交互输入参数 思路为:判断输入的第2个变量是否为空,为空则提示输入2个数字:不为空则判断输入的是否为整数,用到expr,作用为让2个变量进行相加,如果结果为0说明输入2个为数字,如结果非0则说明输入非整数,提示输入的不是非整数: #!/bin/bash read -p "pls input 

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入库,需要带main()主函数: 情况2:向程序传参数,并且程序没有使用第三方jar包 这种情形下打包和情况1是一样的 情况3:程序使用了第三方jar包 这种情况下的打包要复杂一些,需要把第三方jar包一起导出,可以使用eclipse的插件fat jar,很简便,但是fat jar只支持eclipse

expect脚本远程登录、远程执行命令和脚本传参简单用法

expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expect: expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet. expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间. 远程登录lin

redis常用命令及高级特性

11.redis常用命令 keys * 返回所有的键 keys my* 模糊匹配 exists key 确认key是否存在 del key expire key time对现有的键设置过期时间[秒为单位] ttl key 查看过期时间,-1代表已过期 move 将当期数据库中的key移到其它数据库当中 select database_name 选择数据库 move key database_name persist key 取消过期时间,此时ttl key返回-1并不代表过期 randomkey

PHP redis使用命令

很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持redis 2.0.4) Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)注: 在redis.conf中也有时间,默认为300 p

学习记录02 --- redis数据库的安装,以及主从复制和哨兵模式开启

emmmmmm,这个其实是28号老师布置下来的任务,但博客今天才开,思来想去还是把昨天的给补上吧,按住顺序来吧! 1.redis的安装 redis数据库的安装并不难,首先安装好依赖,因为redis是C语言编写,需要安装gcc来编译 yum install gcc-c++ -y(安装gcc) 执行上面的命令就安装完了gcc,接下来我们需要一个目录,用来安装redis 我是安装在/usr/local/redis里面的,所以直接执行下面的代码就可以创建一个目录 mkdir /usr/local/red

【MYSQL】在脚本中使用变量-执行脚本时传参

在shell脚本里可以定义变量,并在执行脚本时任意传参. #!/bin/bashdb_name=$1 #将第一个值赋给db_name变量sql_name=$2 #将第二个值赋给sql_name变量mysql -uroot -p123456 -h192.168.227.129 $db_name < $sql_name 在执行shell脚本时,在执行命令后面直接传参即可 ./sqlrecovery jinqy jinqy.sql

关于url传参中文乱码问题

之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/contest/get_teams_by_type_with_page?typeName=新材料 当在windows 跑 myeclipse的命令台  能正确打印出typeName的参数,而且持久层并没有问题. 当在 linux 跑catalina模式  打印出乱码,持久层也是乱码. 百度了好几个好几