redis详解

编程入门 行业动态 更新时间:2024-10-13 02:16:23

目录

一、认识redis

1)数据库分类

2)redis应用场景

1.架构演变

2.为什么要用redis做缓存数据库

3)redis优点和缺点

 二、安装

1)windows下安装redis3.0.502

1.下载安装

2.设置redis开机自启动

3.redis服务的管理(关闭和开启)

4.配置环境变量

2)linux下安装redis.3.0.0

第一步:解压

第二步:安装gcc编译器

第三步:编译redis源码并安装

第四步:防火墙开放redis端口

第五步:启动redis

第六步:设置redis开机自启动

第七步:redis服务的管理(关闭和开启)

第八步:解除远程访问限制

三、连接redis

1)使用自带的客户端(redis-cli)

2)使用图形界面客户端(redis desk-top manager)

三、redis常用命令

1)可以先查看参考文档

2)操作数据库

3)检测连接状态

4)查看redis信息

5)修改redis默认端口

6)操作key命令

1.查看当前数据库key个数

2.插入数据

3.操作key

四、redis中value的数据类型

0)常见的value数据类型

1)字符串string

操作命令

get、set【获取、插入、修改】

mget、mset【批量获取、插入】

incr和incrby、decr和decrby【自增、自减】

append【value追加】

strlen【查询value长度】

更多【查看手册】

2)哈希hash

hset和hmset插入、hget和hmget和hgetall【获取、插入】

hdel【删除某一对value中属性对】

hlen【获取value中属性对的个数】

hkeys、hvals【获取value中所有属性对的key或value】

hexists【判断value中属性对是否存在】

更多【查看手册】

3)列表list

lpush、rpush、linsert、lset【插入、修改】

lindex、lrange【获取】

lpop、rpop、lrem【移除】

llen【查询list元素个数】

更多【查看手册】

4)集合set

sadd【插入】

srem、spop【删除】

sismember【判断存在】

sinter、sdiff、sunion【求交、差、并集】

5)有序集合zset(sortedSet)

四、redis的发布订阅

1)定义

2)订阅发布模式分类

1.一个发布者,多个订阅者

2.多个发布者,一个订阅者

3.多个发布者,多个订阅者

五、事务

1)事务机制

2)命令

六、持久化

1)为什么要持久化

2)redis的持久化机制

1.rdb方式(全量备份)

2.aof方式(增量备份)

3.两种方式区别

七、主从复制

1)主从复制相关概念

2)和mysql主从复制的区别

3)开始配置redis主从复制

1.slave端

2.master端

4)redis主从复制时报错及解决办法

八、redis主从复制的容灾

1)手动容灾(即手动故障转移)

1.原理

2.操作步骤

2)自动容灾(哨兵模式)

1.原理

2.部署哨兵


一、认识redis

1)数据库分类

关系型数据库


mysql、oracle、sqlserver

非关系型数据库(nosql)


  • 键值对k-v存储类(用于缓存):redis、memcache
  • 文档类(用于web应用):mongodb
  • 全文检索类(用于搜索引擎):solr、elasticsearch
  • 列存储(用于分布式海量存储):hive、时序数据库TSDB
  • 图形类(用于社交网络):neo4j

2)redis应用场景

1.架构演变

 

 

2.为什么要用redis做缓存数据库

redis读写都使用内存,很快;

mysql、oracle、sqlserver这些关系型数据库读写都使用磁盘,开销大很慢。

3)redis优点和缺点

优点:


增删改字段相对关系型数据库更方便;

使用内存读写,更快;

缺点:


数据之间是无关联,没有约束; 不支持标准的 SQL,也没有nosql标准; 没有索引,只支持简单的事务; 没有丰富的数据类型(数值、日期、字符、二进制,、大文本等)

 二、安装

演示版本下载地址:

redis3.0.502-win-x64和x84-Redis文档类资源-CSDN下载

redis3.0.0-linux-Redis文档类资源-CSDN下载

也可以去官方网站下载其他版本:

  • Linux版本下载地址

http://redis.io/

  • windows版本下载地址

win-3.2.100及更早的版本

Tags · microsoftarchive/redis · GitHub


v5.0.14.1及更早的版本

Tags · tporadowski/redis · GitHub

1)windows下安装redis3.0.502

1.下载安装

下载文件解压出来有以下文件

 双击redis-server.exe启动redis服务端,按contrl+c退出

##在windows10下可能会启动报错,解决办法:

进入cmd在当前路径下执行:redis-server.exe redis.conf

双击redis-cli.exe启动redis客户端‘’

2.设置redis开机自启动

(1)注册Redis开机启动服务

通过 CMD 命令行工具进入 Redis 安装目录,执行以下命令:

redis-server.exe --service-install redis.windows.conf --loglevel verbose


##启动报错,需要先修改redis.windows.conf,再启动:

dir "E:\\redis3.0.0"     --dir后面路径为redis安装路径

(2)设置服务开机自启

进入windows服务,找到redis的服务,右键,设置为自动。然后启动。

3.redis服务的管理(关闭和开启)

##注意:要先配置环境变量,否则执行会报错

停止服务: redis-server --service-stop

启动服务: redis-server --service-start

4.配置环境变量

  • 为什么要配置环境变量?

把redis安装目录加入到环境变量后,进入cmd直接输入redis-cli就可以进入客户端,就不用进到安装目录再输入redis-cli了

  • 配置方法:

在path中添加:D:\redis-3.0-0;   //即redis的安装目录

2)linux下安装redis.3.0.0

第一步:解压

解压出来是源码
tar -zxf redis-3.0.0.tar.gz

第二步:安装gcc编译器

因为redis用的c语言编写的,源码安装时,编译需要gcc编译器 redhat类linux安装gcc:
yum install gcc-c++
debian类linux安装gcc:
sudo apt-get update sudo apt-get install gcc

第三步:编译redis源码并安装

cd redis-3.0.0  //进入解压出来的源码所在文件夹 make    //开始源码编译 make install PREFIX=/steven/home/redis  //安装redis(PREFIX后面的路径指安装到哪儿)

如果遇到执行make命令下面的报错:

 解决办法:

将源换成外国系统源卸载gcc,重新安装gcc编译

1.  apt remove gcc  //卸载gcc

2.  cd /etc/apt   --修改sources.list   //换成外国的源http://archive.ubuntu/ubuntu 

3. apt-get update   //更新源

3.  apt install gcc  //重新安装gcc编译器

4.rm -rf redis-3.0.0  //删除原来解压的redis源码包

tar -zxf redis-3.0.0.tar.gz  //重新解压

第四步:防火墙开放redis端口

sudo ufw allow 6379/tcp  //redis端口默认是6379

第五步:启动redis

(1)测试启动关闭服务端

cd bin

./redis-server  //测试启动服务端(默认以前台方式启动)

按ctrl+c退出


shutdown    //关闭服务端

(2)设置默认以守护进程方式启动

redis.conf在源码安装包,拷贝到安装文件夹/home/steven/redis中(和bin并列) ;


vim /home/steven/redis/redis.conf   

修改redis.conf,将daemonize由no改为yes;


sudo ./redis-server ../redis.conf //启动服务端(注意:前面一定要加sudo以管理员权限启动,不然主从复制时会报错)

ps -ef |grep redis  //查看是否启动成功了


停止redis服务端:

kill -9  redis的进程pid

(3)启动客护端

./redis-cli   //测试启动客户端

第六步:设置redis开机自启动

1.拷贝redis_init_script文件

解压的安装包下的有util文件夹,复制里面的redis_init_script到/etc/init.d目录下,然后重命名为redis

sudo cp redis_init_script /etc/init.d/redis

2.编辑

cd /etc/init.d

sudo vim redis


##/home/steven/redis3.0.0为redis安装文件夹路径

EXEC=/home/steven/redis3.0.0/bin/redis-server #改为redis-server文件所在路径

CLIEXEC=/home/steven/redis3.0.0/bin/redis-cli #改为/redis-cli文件所在路径

PIDFILE=/var/run/redis_${REDISPORT}.pid

CONF="/home/steven/redis3.0.0/redis.conf" #改为/redis.conf文件所在路径

3.然后执行

sudo chmod +x /etc/init.d/redis --取得权限

sudo update-rc.d redis defaults --加载到系统自启动文件

第七步:redis服务的管理(关闭和开启)

启动redis服务:

cd redis安装目录/bin

sudo ./redis-server "../redis.conf" //启动服务端(注意:前面一定要加sudo以管理员权限启动,不然主从复制时会报错;../redis.conf最好用引号引起来,否则有可能编译器识别不了路径)

ps -ef |grep redis  //查看是否启动成功了


停止redis服务:

kill -9  redis的进程pid

第八步:解除远程访问限制

如下修改服务器上redis.conf的配置,外部网络才可以访问得到服务器上的redis:

  • Redis3.2之前的版本:

把bind:127.0.0.1语句注释掉


  • Redis3.2版本及其以后:

redis3.2版本新增protected-mode配置,需要关闭protected-mode模式,方法如下:

把protected-mode值设为no,然后再把bind:127.0.0.1语句注释掉

三、连接redis

1)使用自带的客户端(redis-cli)

../redis-cli -h IP地址 -p 端口    //redis端口默认是6379

2)使用图形界面客户端(redis desk-top manager)

有windows版本,也有Linux版本的。

打开,开始开始连接:

三、redis常用命令

1)可以先查看参考文档

redis命令参考文档:Redis 命令参考 — Redis 命令参考

2)操作数据库

1.默认数据库

redis 默认有 16 个数据库。

默认自动使用 0 号数据库,数据库的名字就叫0,可在 redis.conf 文件配置默认哪个


2.切换当前使用库

select 数据库名 //比如切换到2这个数据库,就select 2


3.清空数据库所有数据

flushall   //所有库

fulshdb  //当前库

3)检测连接状态

ping    //连接服务器状态正常,返回pong

4)查看redis信息

info server  //查看部分 info   //查看全部 config get port  //查看默认端口

5)修改redis默认端口

vim redis.conf

修改:port 6379  --改为其他端口

6)操作key命令

1.查看当前数据库key个数

dbsize  

2.插入数据

set name 张三 set age 18 set sex 男

3.操作key

(1)查询key

keys 键名匹配模式     //例如:keys [小大]列

/**如果数据库中存在大列、小列这2个key,那么可以筛选出:小列、大列,这2个key*/

匹配模式中,通配符以下有这些:

*  :匹配0-多个字符    //例如:keys * ,查询所有的 key

?:匹配单个字符    //例如: keys wo?d , 匹配 word , wood []  :表示选择[]内的字符    //例如: keys wo[or]d , 第三个字符为o或者r。可以匹配 wood, word, 不匹配 wold exists:存在返回1,不存在返回0    //例如: exists age , 如果数据库中不存在age这个key,就返回0
(2)设置key生存时间 expire 键名 秒    //expire age 5,5秒后age及其对应的value会被自动删除。设置成功返回1,失败(比如没有这个键)返回0 ttl 键名  //查看键剩余生存时间 (3)查看key数据类型 type 键名    //不存在该key,返回none (4)删除key del 键名  //不存在该key,返回0 (5)修改key名 rename 键名

四、redis中value的数据类型

0)常见的value数据类型

字符串string、哈希hash、列表list、集合set、有序集合sortedSet

1)字符串string

可以存普通字符串、json对象、二进制数据(图片)   //实际很少直接存普通字符串,一般都存json对象


操作命令


  • get、set【获取、插入、修改】

set name 张三   //存值

set name 李四  //修改值

get name  //获取值(不存在返回nil)

  • mget、mset【批量获取、插入】

mset一次性插入多个key-value


mset id 001 name jack age 18   //插入id=001,name=jack,age=18

mget一次性查询多个key对应的value


mget id name age 18   //插入id=001,name=jack,age=18

  • incr和incrby、decr和decrby【自增、自减】

incr每次自增1


如果age不存在,从1开始:

incr age   //age=1

incr age   //age=2


如果age已存在为10:

incr age   //age=11

incrby每次增加指定大小


如果age不存在,从100开始:

incrby age 100  //age=100

incrby age 100  //age=200


如果age已存在为300:

incrby age 100   //age=400

decr每次自减1


如果age不存在,从-1开始:

decr age   //age=-1

decr age   //age=-2


如果age已存在为10:

decr age   //age=9

decrby每次减少指定大小


如果age不存在,从-100开始:

decrby age 100  //age=-100

decrby age 100  //age=-200


如果age已存在为-300:

decrby age 100   //age=-400

  • append【value追加】

在追加拼接到对应的value后


如果name不存在:

append name Bond  //name=Bond


如果name=james:

append name Bond  //name=jamesBond

  • strlen【查询value长度】

查询对应value长度(不存在返回0)


如果name=james:

strlen name  //返回5

  • 更多【查看手册】

2)哈希hash

存一个hash类型的key-vlue对象                //{password-123456、username-zahngsan、name-张三、age-20}


操作命令


  • hset和hmset插入、hget和hmget和hgetall【获取、插入】

hset单条插入:

hset user name 张三  //只能一条一条的插

hset user age 20   //只能一条一条的插

hmset批量插入:

hmset user name 张三 age 20

hget单条查询:

hget user age   //20

hmget批量查询:

hmget user name age   //张三,20

hgetall查询整个value属性对:

hgetall user    

  • hdel【删除某一对value中属性对】

hdel user age   //删除value中的age这个属性对

  • hlen【获取value中属性对的个数】

hlen user     //如果user的value中只有age和name两个属性对,则返回2

  • hkeys、hvals【获取value中所有属性对的key或value】

hkeys user     //返回所有属性对的key:name、age

hvals user     //返回所有属性对的value:张三、20

  • hexists【判断value中属性对是否存在】

hexists user  age  //存在返回1,不存在返回0

  • 更多【查看手册】

3)列表list

存string类型的list对象      //{张三、李四、王五},按插入顺序排序,可重复(list可以插入重复元素)

数据结构是双向链表,查询两端快,中间慢

  • lpush、rpush、linsert、lset【插入、修改】

lpush、rpush按顺序插入:

lpush userNames 张三 李四 王五  //插入顺序是:王五->李四->张三;list中顺序:第一是王五

rpush userNames 张三 李四 王五  //插入顺序是:张三->李四->王五;list中顺序:第一是张三


linsert在某个值前后插入:

linsert userNames before 李四 hahaha  //在李四前插入(有多个李四,则在第一个李四前插入)

linsert userNames before 李四 hahaha  //在李四后插入(有多个李四,则在第一个李四后插入)


lset修改:

lset userNames 0 赵六  //修改list中下标为[0]的元素的值为赵六。第1个值下标为[0]

  • lindex、lrange【获取】

获取单个值:

lindex userNames 0  //获取list中下标为[0]的值。第1个值下标为[0],所以这儿是获取list中第1个值

获取多个值:

lrange userNames 2 5   //获取list中下标为[2]到[5]的所有值。第1个值下标为[0],所以这儿是获取list中第3到第6个值

  • lpop、rpop、lrem【移除】

lpop userNames  //顺序移除一个元素,从第一个开始移除

rpop userNames  //倒序移除一个元素,从最后开始移除


lrem移除重复元素:

lrem userNames 2 张三   //假设list中原有3个张三,会按顺序移除前面2个张三

lrem userNames 0 张三   //删除list中所有的张三

  • llen【查询list元素个数】

llen userNames

  • 更多【查看手册】

4)集合set

存string类型的set对象      //{张三、王五、李四},无序,不可重复(set不可以插入重复元素)


操作命令


sadd【插入】

sadd countrys china sadd countrys usa japan mexico srandmember、smembers、scard获取
随机返回1个元素: srandmember countrys 随机返回多个元素: srandmember countrys 2      //随机返回2个元素 srandmember countrys -2    //负数表示允许返回重复。即第一个数如果随机是china,第二个数也允许随机是china
获取整个set: smembers countrys   
获取元素个数: scard  countrys  

srem、spop【删除】

指定删除: srem countrys china    //删除成功返回1,失败返回0 srem countrys usa japan
随机删除: spop countrys  //随机删除1个元素 spop countrys 2   //随机删除2个元素

sismember【判断存在】

sismember countrys china   //存在返回1,不存在返回0

sinter、sdiff、sunion【求交、差、并集】

setA{张三、lisi、wangwu} setB{lisi、wangwu、赵六}
交集: sinter setA setB   //返回:{lisi、wangwu}
差集: sdiff setA setB    //返回:张三 sdiff setB setA    //返回:赵六
并集: sunion setA setB  //返回:{张三、lisi、wangwu、赵六}

5)有序集合zset(sortedSet)

存string类型的set对象  //{张三、李四、王五},有序,不可重复

数据结构:散列表,因此读取位于中间的数据也很快


操作命令


四、redis的发布订阅

1)定义

订阅发布模式又叫生产者消费者模式。订阅者先订阅,发布者再发布消息,然后订阅者收到消息后执行相应的业务逻辑,比如写、查询数据库。

2)订阅发布模式分类

1.一个发布者,多个订阅者

一对多关系。发布者是一个系统,订阅者彼此也是不同的系统,实现了不同系统之间通信。

流程:发布者是一个数据库连接(打开一个redis客户端),订阅者是另外几个数据库连接(另外打开几个redis客户端)。订阅者先订阅一个频道,发布者redis客户端发消息到该频道,订阅者redis客户端会同时接收到消息

命令实现:

订阅者命令:


订阅给定频道

subscribe chanel001

订阅模式匹配的所有频道

psubscribe 匹配模式     --如:psubscribe chanel*


退订给定频道

unsubscribe chanel001

退订模式匹配的所有频道

punsubscribe 匹配模式   --如:punsubscribe chanel01*

退出(自动退订)

按ctrl+c

发布者命令:


publish chanel001 “你好”   --将你好的消息发送到channel001频道

其他命令:

pubsub chanels   --查看正在被订阅频道(正在被监听)信息

应用场景:通知、公告、即时通信(广播、聊天室、实时提醒)、微信公众号、抢红包、打车和外卖抢单

2.多个发布者,一个订阅者

应用场景:排行榜、投票、计数

3.多个发布者,多个订阅者

主要应用:群聊、聊天

五、事务

1)事务机制

通过乐观锁的方式实现

2)命令

第一步《开启事务》:multfi

第二步《事务监控》:watch

第二步《手动取消事务监控》:unwatch

第三步《提交》:exec

第四步《回滚》:discard

关于watch:

  • 监控的是某条数据的key。开启事务后、提交或回滚时前,value发生了修改(可能是产生了脏读等问题导致),事务自动回滚;
  • 提交或回滚时所有key的监控全部取消;
  • 客户端连接关闭时,该客户端监控全部取消;

六、持久化

1)为什么要持久化

redis数据存储在内存中,如果redis重启和服务器关了或出现故障(宕机),数据会丢失。因此redis需要有机制持久化数据到磁盘,重启后恢复

2)redis的持久化机制

1.rdb方式(全量备份)

redis默认启用了rdb方式

介绍:


redisdatabase的简称,指每过一会儿(时长可以自己配置)就将内存中的数据快照写入磁盘,redis重启后,会将快照文件再读到内存来恢复数据。

快照存储在一个二进制文件中,默认叫dump.rdb。保存数据是在单独的进程中写文件,不影响Redis的正常使用

如何配置RDB方式持久化:


在redis.conf中配置,配置snapshotting模块:

  • save 100 3   --在100秒之内至少有3个key-value发生了修改(指增删改,查询不算),就持久化一次
  • dbfilename 123.rdb   --设置RDB的文件名为123.rdb,默认文件名为dump.rdb
  • dir /opt/redis   --指足RDB文件的存储位置为/opt/redis,默认是./(即redis当前安装位置)
  • 还有其他配置,可以百度上查

优点和缺点:


优点:占用空间小,恢复快

RDB恢复数据时比AOF速度快,RDB技术适合做备份;

缺点:

1.可能存在数据丢失。修改操作还未达到生成快照的条件,redis重启,最新的修改会丢失;

2.持久化时会专门分出一个子进程来。如果redis数据库很大,子进程会占用时间较长,可能会影响redis暂停服务一段时间(millisecond级别),最长1秒。

2.aof方式(增量备份)

介绍:


记录执行的命令

append onlyFlie的简称,Redis每次执行修改(指增删改,查询不算)命令,就把该命令写到一个AOF日志文件中,Redis重启时,执行AOF文件中所有的命令来恢复致据。

如何配置aof方式持久化:


在redis.conf中配置:

  • appendonly yes   --默认是no,改成yes即开启了aof持久化
  • appendfilename "xxx.aof"   --指定AoF文件名,默认为appendonly.aof
  • dir /opt/redis  --指足RDB和aof文件的存储位置为/opt/redis,默认是./(即redis当前安装位置)
  • appendfsync everysec

/**

appendfsync参数配置写命令到aof文件的策略:

no:不主动进行同步操作,而是完全交由操作系统来做(即 *每30秒一次)。快但不安全;

always:每次执行写入都会执行同步。慢但安全;

everysec:每秒执行一次同步操作。平衡,介于速度和安全之间。为默认项。

*/

优点和缺点:


优点:数据完整,不存在丢失;

缺点:占用空间大,恢复慢

占用aof文件会越来越大。主要是过期记录也会保存到aof文件中,比如set age 18然后又set age 30,第一条修改为18的记录就是过期记录。必须手动在重构AOF文件,才能让文件变小

3.两种方式区别

rdb存储的是数据本身(快照的形式),aof存储的是修改数据的命令;

rdb占用空间小恢复快,aof占用空间大,恢复慢

七、主从复制

1)主从复制相关概念

详见我的另外一篇文章:mysql主从复制实现读写分离_帅气的杰哥哥的博客-CSDN博客

2)和mysql主从复制的区别

1.redis主从搭建更简单,不需要在master上改配置,只改slave配置;

2.mysql是salve写数据就同步失效,redis是slave写数据会报错

3)开始配置redis主从复制

1.slave端

vim redis.conf

然后添加:salveof 主服务器ip地址 端口   //如:salveof 192.168.2.254 6379


查看slave主从信息

客户端登进slave的redis数据库输入:info replication

2.master端

查看master主从信息

客户端登进mater的redis数据库输入:info replication

4)redis主从复制时报错及解决办法

错误信息:

Error reply to PING from master: '-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.'  --被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息

产生原因1:

linux下启动redis服务端时,没有管理员权限,写入数据失败

解决办法:

启动reids服务端前加sudo,以管理员权限运行:

sudo ./redis-server ../redis.conf 

产生原因2:

强制关闭Redis快照导致不能持久化

解决办法:

修改redis.conf,将stop-writes-on-bgsave-error设置为no

然后重启redis

八、redis主从复制的容灾

1)手动容灾(即手动故障转移)

1.原理

一主多从的情况下,如果master出现故障,自动将一台slave提升为master,然后其他slave挂载成为新master的slave

2.操作步骤

(1)停掉原master服务端;

(2)候选master的slave输入:

slave none   //执行完就会提升成为新的mater

(3)其他的slave输入:

slaveof 新mater的ip地址 新mater的端口号  //如:slaveof 192.168.2.253 6381,挂载成为新mater的slave

(4)停掉的原来的master如果重启了服务,也可以通过以下命令挂载到新的master下面成为slave。输入:

slaveof 新mater的ip地址 新mater的端口号  //如:slaveof 192.168.2.253 6381

2)自动容灾(哨兵模式)

1.原理

在master服务器或slave服务器上配置哨兵(sentinel),哨兵会对master进行实时监控,出现故障通知管理员或程序,然后自动容灾。

一般需要配置多个哨兵(只配一个哨兵的话万一这个哨兵出问题了就麻烦了),当master出现故障,哨兵之间会互相传递信息,投票从slave中选出候选master

2.部署哨兵

(1)windows下

  • 编辑哨兵的配置文件sentinel.conf

创建一个叫sentinel.conf的文件,把下面的内容保存进去,放到redis安装目录下:


# 当前Sentinel服务运行的端口,默认是26379
port 26379

# Sentinel去监视一个名为mymaster(这个名字是哨兵用来标识master的昵称,可以随便取.。默认是mymaster,嫌麻烦就不改)的主redis实例,
# 这个主实例的IP地址为本机地址127.0.0.1(但是这儿还是要输入本机的ip地址);端口号为master端口,默认为6379;2表示投票数
# 而将这个主实例判断为失效至少需要2个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
# 如果提供外网访问,实例的IP地址为服务器地址10.0.128.144。

sentinel monitor mymaster 10.0.128.144 6379 2

# down-after-milliseconds指定了Sentinel认为Redis实例已经失效所需的毫秒数。
# 当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。
# 只有一个Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线。
# 这时自动故障迁移才会执行

sentinel down-after-milliseconds mymaster 5000

# parallel-syncs指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,
# 在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

sentinel parallel-syncs mymaster 1

# 如果在failover-timeout该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 15000

  • 启动哨兵

cmd进入redis安装目录下,输入:

redis-server.exe sentinel.conf --sentinel

  • 把哨兵设为开机自启动

暂未找到办法

  • 配置多个哨兵

要配置n个哨兵,就复制n份sentinel.conf到安装目录,然后改名字要保证每个sentinel.conf名字不一样。然后再编辑和启动哨兵并设为开机自启动。

(2)linux下

  • 编辑哨兵的配置文件sentinel.conf

解压的安装压缩包中有sentinel.conf,复制到安装目录,然后vim sentinel.conf,只需要修改下面这一句:


# Sentinel去监视一个名为mymaster(这个名字是哨兵用来标识master的昵称,可以随便取.。默认是mymaster,嫌麻烦就不改)的主redis实例,
# 这个主实例的IP地址为本机地址127.0.0.1(但是这儿还是要输入本机的ip地址);端口号为master端口,默认为6379;2表示投票数
# 而将这个主实例判断为失效至少需要2个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
# 如果提供外网访问,实例的IP地址为服务器地址10.0.128.144

sentinel monitor mymaster 10.0.128.144 6379 2

  • 启动哨兵

cd bin进入redis安装目录下,输入:

./redis-sentinel ../sentinel.conf

  • 把哨兵设为开机自启动

1.将sentinel.conf文件复制到redis安装目录/home/steven/redis3.0.0下;


2.解压的安装包下的有util文件夹,复制里面的redis_init_script到/etc/init.d目录下,然后重命名为redis-sentinel;


3.修改redis-sentinel文件,修改以下内容即可:

REDISPORT=26379     --哨兵的端口号

EXEC=/home/steven/redis/bin/redis-sentinel

CLIEXEC=/home/steven/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid

CONF="/home/steven/redis/redis3.0.0/redis-sentinel.conf"

  • 配置多个哨兵

要配置n个哨兵,就复制n份sentinel.conf到安装目录,然后改名字要保证每个sentinel.conf名字不一样。然后再编辑和启动哨兵并设为开机自启动。

更多推荐

redis详解

本文发布于:2023-06-13 09:24:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1372739.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:详解   redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!