Redis教程

本文详细介绍了Redis的安装与启动、远程连接配置、基本操作命令,以及五种核心数据类型(字符串、哈希、列表、集合和有序集合)的使用。深入探讨了事务、持久化、主从复制和安全设置,还涉及了Sentinel哨兵的部署与故障转移。
摘要由CSDN通过智能技术生成

Redis

文章目录

1.安装开启关闭

Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库

  1. cd /home/soft/
  2. tar -zxvf redis-stable.tar.gz -C /usr/local/
  3. cd /usr/local/
  4. cd redis-stable/
  5. cd src/
  6. ./redis-server
  7. ./redis-server & 后台启动
  8. ./rdis-cli 进入客户端
  9. ps -ef | grep redis查看redis进程
  10. ./redis-cli shutdown 客户端关闭
  11. ps -ef | grep redis 先查看进程号

​ 再 kill 进程号

2.远程连接

1.修改配置文件

  • 找到配置文件进行备份

    cp redis.conf bak_redis.conf

  • vim redis.conf

  • /bind找到bind 127.0.0.1

  • 点击i,切换为插入模式

  • 添加注释#

  • 将保护模式改为no

  • 点击Esc

  • 输入:wq保存并退出

2.再次打开redis

  • 此时需要指明配置文件的位置
  • cd src先打开src文件夹
  • 再启动服务
  • ./redis-server ../redis.conf &后台启动
  • systemctl status firewalld查看防火墙状态

3.Redis基本操作命令

1.ping返回PONG表示redis服务正常

2.查看当前数据库中key的数目:dbsize

3.redis默认使用16个库

db0-db15

4.切换数据命令:select index

​ 比如select 5

5.删除当前库中的所有数据;flushdb

6.退出客户端:exit或者quit

4.Redis的Key的操作命令

1.keys

  • 语法:key pattern

  • 作用:查找符合模式patternkey,可以为通配符。

    • 通配符:

      • *:表示0-多个字符。
        • ?: 表示单个字符

例如:

2.exists

  • 语法exists key[key...]
  • 作用:判断key是否存
  • 返回值:整数,存在key返回1,其他返回0.使用多个key,返回存在的key数量。

3.expire

  • 语法:expire key seconds
  • 作用:设置key的生存时间,超过时间,key会自动删除。单位是秒。
  • 返回值:设置成功返回数字1,其他情况是0.

4.ttl

  • 语法:ttl key

  • 作用:以秒为单位,返回key的剩余时间,key永不过期

  • 返回值:

    • -1:没有设置key的生存时间,key永不过期
    • -2:key不存在
    • 数字:key的剩余时间,秒为单位。

image-20210108201255285

5.type

  • 语法:type key
  • 作用:查看key所存储值的数据类型
  • 返回值:字符串表示的数据类型
    • none(key不存在)
    • string(字符串)
    • list(列表)
    • set(集合)
    • zset(有序集)
    • hash(哈希表)

image-20210108202932584

6.del

  • 语法:del key[key...]
  • 作用:删除存在的key,不存在的key忽略
  • 返回值:数字,删除的key数量

image-20210108203607180

5.五种数据类型

5.1 字符串类型string

  • 能储存任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M.
5.1.1基本命令
1.set
  • 将字符串值value设置到key中
  • 语法:set key value
2.get
  • 获取key对应的值
  • get key
3.incr
  • 将key中存储的数字值加1,如果key不存在,则key的值先被初始化为0再执行incr操作(只能对数字类型的数据操作)
  • 语法:incr key

image-20210109211201001

4.decr
  • 将key中存储的数字值减1,如果key不存在,则key的值先被初始化为0再执行decr操作(只能对数字类型的数据操作)
  • 语法decr key

image-20210109211307269

5.append
  • 将内容追加到key

  • 语法:append key value

  • 说明:如果key存在,将value追加到key原来旧值的末尾

    ​ 如果key不存在,则将key设置值为value

  • 返回值:追加字符串之后的总长度

    image-20210109212212419

5.1.2常用命令
1.strlen
  • 语法:strlen key
  • 返回key所存储的字符串值的长度
  • 返回值:
    • 如果key存在,返回字符串长度
    • key不存在,返回0

image-20210109213802977

2.getrange
  • 语法:getrange key start end
  • 作用: 获取key中字符串值从start开始到end结束的字符串,包括start和end,负数表示从字符串末尾开始,-1表示最后一个字符
  • 返回值:截取的字符串

image-20210109215420387

3.setrange
  • 语法:setrange key offset value
  • 说明:用value覆盖(替换)key的存储的值从offset开始,不存在的key做空白字符串。
  • 返回值:修改后的字符串的长度

image-20210109220246796

4.mset
  • 语法:mset key value
  • 说明: 同时设置一个或多个key-value 对
  • 返回值:ok

image-20210109220848527

5.mget
  • 语法:mget key[key...]
  • 作用:获取所有(一个或多个)给定key的值
  • 返回值:包含所有key的列表

image-20210109221629491

5.2 哈希类型hash

  • redis hash 是一个string类型的filed和value的映射表,hash特别适合用于存储对象。
5.2.1 基本命令
1.hset
  • 语法:hset hash 表的 key field value

  • 作用:将哈希表key中的域field的值设为value,如果key不存在,则新建hash表,进行赋值,如果有field,则覆盖值。

  • 返回值:

    • 如果field是hash表中心field,且设置值成功,返回1
    • 如果field已经存在,旧值覆盖新值,返回0

    image-20210110202325445

2.hget
  • 语法:hget key field

  • 作用:获取哈希表key中给定域field的值

  • 返回值:field域的值,如果key不存在或者field不存在返回nil

    image-20210110202417280

3.hmset
  • 语法:hmset key field value[field value...]
  • 说明:同时将多个field-value(域-值)设置到哈希表key中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,执行hmset.
  • 返回值:设置成功返回ok,如果失败繁殖一个错误

image-20210110205517886

4.hmget
  • 语法:hmset key field value[field value...]
  • 说明:同时将多个field-value(域-值)设置到哈希表key中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,执行hmset.
  • 返回值:设置成功返回ok,如果失败返回一个错误

image-20210110222039239

5.hgetall
  • 语法:hgetall key
  • 作用:获取哈希表key中所有的域和值
  • 返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash
6.hdel
  • 语法:hdel key field[field...]
  • 作用:删除哈希表key中的一个或多个指定域field,不存在filed直接忽略
  • 返回值:成功删除的field的数量

image-20210110224311359

5.2.2 常用命令
1.hkeys
  • 语法:hkeys key
  • 作用:查看哈希表key中所有的field域
  • 返回值:包含所有的field的别表,key不存在返回空列表

image-20210110225020331

2.hvals
  • 语法:hvals key
  • 作用:返回哈希表中的所有域的值
  • 返回值:包含哈希表所有域值的列表,key不存在返回空列表

image-20210110225311034

3.hexists
  • 语法:hexists key field
  • 作用:查看哈希表key中,给定域field是否存在
  • 返回值:如果field存在,返回1,其他返回0

image-20210110225741523

5.3 列表类型list

  • redis列表是最简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。从左往右开始的命令一般是l开头的;从右往左的命令一般是r开头的。
5.3.1 基本命令
1.Ipush
  • 语法:ipush key value[value...]
  • 作用:将一个或多个值value插入到列表key的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头
  • 返回值:数字,新列表的长度

image-20210111131453250

2.rpush
  • 语法:repush key value[value...]
  • 作用:将一个或多个值value插入到列表key的表尾(最右边),各个value值按从左到右的顺序依次插入到表尾
  • 返回值:数字,新列表的长度

image-20210111132014063

3.lrange
  • 语法:lrange key start stop
  • 作用:获取列表key中指定区间内的元素,0表示列表的第一个元素,以1表示列表的第二个元素;start ,stop是列表的下标值,也可以负数的下标,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。start,stop超出列表的范围不会出现错误。
  • 返回值:指定区间的列表

image-20210111132910378

4.lindex
  • 语法:lindex key index
  • 作用:获取列表key中国下标为指定index的元素,列表元素不删除,只是查询。0表示列表元素的第一个元素,以1表示列表的第二个元素;start,stop是列表的下标值,也可以负数的下标,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
image-20210111134616654
5.llen
  • 语法:llen key
  • 作用:获取列表key的长度
  • 返回值:数值,列表的长度;key不存在返回0

image-20210111134957936

5.3.2 常用命令
1.lrem
  • 语法:lrem key count value
  • 作用:根据参数count的值,移除列表中与参数value相等的元素,count>0,从列表的左侧向右开始移除;count<0从列表的尾部开始移除;count=0移除表中所有的域value相等的值
  • 返回值:数值,移除的元素个数

image-20210111140355617

2.lset
  • 语法:lset key index value
  • 作用:将列表key下标为index的元素的值设置为value
  • 返回值:设置成功返回ok;key不存在或者index超出范围返回错误信息

image-20210111140948169

3.linsert
  • 语法:linsert key BEFORE|ALFTER pivot value
  • 作用:将值value插入到列表key当中位于值pivot之前或之后的位置。key不存在,pivot不在列表中,不执行任何操作
  • 返回值:命令执行成功,返回新列表的长度。没有找到pivot返回-1,key不存在返回0

image-20210111141737218

5.4 集合类型set

  • redis的Set是string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据
5.4.1基本命令
1.sadd
  • 语法:sadd key memeber[member...]
  • 作用:将一个或多个memeber元素加入到集合key当中,已经存在于集合的memeber元素将被忽略,不会再加入
  • 返回值:加入到集合的新元素的个数。不包括被忽略的元素

image-20210111143056384

2.smembers
  • 语法:smembers key
  • 作用:获取集合key中的所有成员元素,不存在的key视为空集合

image-20210111145145240

3.sismember
  • 语法:sismember key memeber
  • 作用:判断member元素是否是集合key的成员
  • 返回值:member是集合成员返回1,其他返回0

image-20210111145524544

4.scard
  • 语法:scard key
  • 作用:获取集合里面的元素个数
  • 返回值:数字,key的元素个数。其他情况返回0。

image-20210111145831956

5.srem
  • 语法:srem key member[member...]
  • 作用:删除集合key中的一个或者多个member元素,不存在的元素被忽略
  • 返回值:数字,成功删除的元素个数,不包括被忽略的元素。

image-20210111150323456

5.4.2常用命令
1.srandmember
  • 语法:srandmember key[count]
  • 作用:只提供key,随机返回集合中的一个元素,元素不删除,依然在集合中;提供了count时,count为整数,返回包含count个数元素的集合,集合元素各不相同。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。
  • 返回值:一个元素;多个元素的集合

image-20210111151126804

2.spop
  • 语法:spop key [count]
  • 作用:随机从集合在中删除一个元素,count是删除的元素个数
  • 返回值:被删除的元素,key不存在或空集返回nil

image-20210111152454399

5.5 有序集合类型zset

  • zset是一个经过排序的set集合。redis有序集和zset和集合set一样也是string类型元素的集合,且不允许重复的成员。不同的是zset的每一个元素都会关联一个分数,redis通过分数来为集合中的成员进行从小到大的排序。
5.5.1基本命令
1.zadd
  • 语法:zadd key score member[score member...]
  • 作用:将一个或多个member元素及其score值加入到有序集合key中,如果member存在集合中,则更新值;score可以是整数或浮点数
  • 返回值:数字,新添加的元素个数

image-20210111153631938

2.zrange
  • 语法:zrange key start stop [WITHSCORES]
  • 作用:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序。start和stop都是从0开始。0是第一个元素,1是第二个元素,以此类推。以-1表示最后一个成员,-2表示倒数第二个成员。WITHSCORES选项让score和value一同返回。
  • 返回值:自定区间的成员集合

image-20210111154651160

3.zrevrange
  • 语法:zrevange key start stop [WITHSCORES]
  • 作用:返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。其他同zrange命令。
  • 返回值:自定区间的成员集合

image-20210111155145766

4.zrem
  • 语法:zrem key member [member...]
  • 作用:删除有序集合key中的一个或者多个成员,不存在的成员被忽略
  • 返回值:别成功删除的成员数量,不包括被忽略的成员

image-20210111155538332

5.zcard
  • 语法:zcard key
  • 作用:获取有序集key的元素成员的个数
  • 返回值:key存在返回集合元素的个数,key不存在,返回0
5.5.2常用命令
1.zrangebyscore
  • 语法:zrangebyscore key min max [WITHSCORES][LIMIT offset count]
  • 作用:获取有序集key中,所有score值介于min和max之间(包括min和max)的成员,有序成员是按递增(从小到大)排序。
    • min,max是包括在内,使用符号(表示不包括。min,max可以使用-inf,+inf表示最小和最大
    • limit用来限制返回结果的数量和区间
    • withscore显示score和value
  • 返回值:指定区间的集合数据

image-20210111163634637

image-20210111163731426

image-20210111163909021

2.zrevrangebyscore
  • 语法:zrevrangebyscore key max min [WITHSCORES][LIMIT offset count]
  • 作用:返回有序集key中,score值介于max和min之间(默认包括等于max或者min)的所有的成员。有序集成员按score值递减(从大到小)的次序排列。
3.zcount
  • 语法:zcount key min max
  • 作用:返回有序集key中,score值在min和max之间(默认包括score值等于min或max的成员数量)

6.高级话题

6.1 Redis事务

  • 事务是指一系列的操作步骤,这一系列的操作步骤,要么完全地执行,要么完全的不执行。Redis中的事务(transaction)是一组命令的集合,至少是两个或两个以上的命令,redis事务保证这些命令被执行时中间不会被任何其他操作打断。
6.1.1事务操作的命令
1.multi
  • 语法:multi
  • 作用:标记一个事物的开始。事务内的多条命令会按照先后顺序被放进一个队列当中。
  • 返回值:总是返回ok
2.exec
  • 语法:exec

  • 作用:执行所有事务块内的命令

  • 返回值:事务内的所有执行语句内容,事务被打断(影响)返回nil

3.discard
  • 语法:discard
  • 作用:取消事务,放弃执行事务块内的所有命令
  • 返回值:总是返回ok
4.watch
  • 语法:watch key[key...]
  • 作用:监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动过,那么事务将被打断
  • 返回值:总是返回ok
5.unwatch
  • 语法:unwatch
  • 作用:取消WATCH命令对所有key的监视。如果在执行WATCH命令之后,EXEC命令或DISCARD命令先被执行了的话,那么就不需要再执行UNWATCH了
  • 返回值:总是返回ok
6.1.2事务的实现
1.正常执行事务
  • 事务执行的步骤:首先开启事务,其次向事务队列中加入命令,最后执行事务提交
  • 例子:事务的执行:
    • 1)multi:用multi命令告诉Redis,接下来要执行的命令你先不要执行,而是把它们暂时存起来(开启事务)
    • 2)sadd works john 第一条命令进入等待队列(命令入队)
    • 3)sadd works rose第二条命令进入等待队列(命令入队)
    • 4)exce告知redis执行前面发送的两条命令(提交事务)

image-20210111213858374

2.事务执行exec之前,入队命令错误(语法错误;严重错误导致服务器不能正常工作(例如内存不足)),放弃事务
  • 执行事务步骤:
    • MULTI 正常命令
    • SER key value 正常命令
    • INCR命令语法错误
    • EXEC无法执行事务,那么第一条正确的命令也不会执行,所以key的值不会设置成功

image-20210111215645745

3.事务执行exec命令后,执行队列命令,命令执行错误,事务提交
  • 执行步骤:

    • 1)MULTI 正常命令
    • 2)SET username zhangsan正常命令
    • 3)lpop username正常命令,语法没有错误,执行命令时才会有错误
    • 4)EXEC正常执行,发现错误可以在事务提交前放弃事务,执行discard

    image-20210111221510481

4.放弃事务
  • 执行步骤

    • 1)MULTI开启事务
    • 2)SET age 25命令入队
    • 3)SET age 30命令入队
    • 4)DISCARD 放弃事务,则命令队列不会被执行

    image-20210111222520948

5.Redis的watch机制
1. Redis的WATCH机制
  • WATCH机制原理:
    • WATCH机制:使用WATCH监视一个或多个key,跟踪key的value修改情况,如果有key的value值在事务EXEC执行之前被修改了,整个事务被取消。EXEC返回提示信息,表示事务已经失败。
    • WATCH机制使的事务EXEC变的有条件,事务只有在被WATCH的key没有修改的前提下才能执行。不满足条件,事务被取消。使用WATCH监视了一个带过期时间的键,那么及时这个键过期了,事务仍然可以正常执行
    • 大多数情况下,不同的客户端会访问不同的键,相互同时竞争同一key的情况一般都很少,乐观锁能够以很好的性能解决数据冲突的问题
2.WATCH的事例
  • 执行步骤:
    • 首先启动redis-server,在开启两个客户端连接,分别叫A客户端和B客户端
    • 1)在A客户端设置key:str.lp登录人数为10
    • 2)在A客户端监视key:str.lp
      1. 在A客户端开启事务 multi
      1. 在A客户端修改 str.lp的值为11
    • 5) 在B客户端修改str.lp的值为15
    • 6) 在A客户端执行事务exec
      1. 在A客户端查看str.lp值,A客户端执行的事务没有提交,因为WATCH的str.lp的值已经被修改了,所以放弃事务

6.2 持久化

  • 持久化可以理解为存储,就是讲数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。
  • Redis的数据存储在内存中,内存是瞬时的,如果linux宕机或重启,又或者Redis崩溃或重启,所有的内存数据都会丢失,为解决这个问题,Redis提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据
6.2.1 持久化方式
1.RDB方式
  • Redis Database(RDB)就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复是将快照直接再读到内存中。

  • 实现方式:

    • RDB的方式是数据持久化,仅需要在redis.conf文件处配置既可。默认配置是启用的。

    • 在配置文件reids.conf搜索SNAPSHOTTING,查找在注释开始和结束之间的关于RDB的配置说明。配置SNAPSHOTTING地方有三处。

      • ①:配置执行RDB生成快照文件的时间策略。

      • 对Redis进行设置,让它在“N秒内数据集至少有M个key改动”这一条件被满足时,自动保存一次数据集。

      • 配置格式:save <seconds> <changes>

        save 900 1

        save 300 10

        save 60 10000

      • ②:dbfilename:设置RDB的文件名,默认文件名为dump.rdb

      • ③:dir:指定RDB文件的存储位置,默认是 ./ 当前目录

    • 配置步骤:

      • ①:查看:ps -ef | grep redis,如果redis服务启动,先停止。
      • ②:修改redis.conf文件,修改前先备份,执行cp redis.conf bak_redis.conf

优点:由于存储的是数据快照文件,恢复数据很方便,也比较快

缺点:

​ 1.会丢失最后一次快照以后更改的数据。

​ 2.由于需要经常操作磁盘,RDB会分出一个子进程。如果你的redis数据库很大的话,子进程占用比较多的时间,并且可能会影响Redis暂停服务一段时间(millisecond级别),如果你的数据库超级大并且你的服务器CPU比较弱,有可能会达到一秒。

2.AOF方式
  • Append-only File(AOF),Redis每次接受到一条改变数据的命令时,它将把该命令写到一个AOF文件中(只记录写操作,读操作不记录),当重启Redis时,它通过执行AOF文件中所有的命令来恢复数据。

  • 如何实现
    AOF方式的数据持久化,仅需在redis.conf文件中配置即可

    • 配置项

      1. appendonly:默认是no,改成yes即开启了aof持久化

      2. appendfilename:指定AOF文件名,默认文件名为appendonly.aof

      3. dir:指定RDB和AOF文件存放的目录,默认是 ./

      4. appendfsync:配置项aof文件写命令数据的策略:

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

        always:每次执行写入都会执行同步,慢一些但是比较安全。

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

      5. auto-aof-rewrite-min-size:允许重写的最小AOF文件大小,默认是64M。当aof文件大于64M时,开始整理aof文件,去掉无用的操作命令。缩小aof文件。

    image-20210112231418075

执行完数据的修改操作后,可以看到生成的aof文件

image-20210112231533690

6.3.主从复制

  • 通过持久化功能,Redis保证了及时在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,也会导致数据丢失。
  • 为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,及时有一台服务器出现故障其他服务器依然可以继续提供服务
6.3.1 主从复制—读写分离

Redis

master为主服务器,可以读可以写,主要负责写;slave为从服务器,只能进行读

1.Redis主从复制的实现

方式1:修改配置文件,启动时,服务器读取配置文件,并自动生成指定服务的从服务器,从而构成主从复制的关系

方式2: ./redis-server --slaveof <master-ip> <master-port>在启动redis时指定当前服务器成为某个主从Redis服务的从Slave

例如:想要搭建如下的主从服务器结构

image-20210113150645685

  • 先将redis服务器关闭,然后为三个服务器创建各自的配置文件

2021-01-13_150132

  • 对三个配置文件分别进行编辑

  • 主redis的配置,redis6380.conf

include /usr/local/redis-stable/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb
  • 修改从服务器6382Slave的配置文件 redis6382.conf

    include /usr/local/redis-stable/redis.conf
    daemonize yes
    port 6382
    pidfile /var/run/redis_6382.pid
    logfile 6382.log
    dbfilename dump6382.rdb
    slaveof 127.0.0.1 6380
    
  • 修改从服务器6384Slave的配置文件 redis6384.conf

    include /usr/local/redis-stable/redis.conf
    daemonize yes
    port 6384
    pidfile /var/run/redis_6384.pid
    logfile 6384.log
    dbfilename dump6384.rdb
    slaveof 127.0.0.1 6380
    
  • 修改完成后,启动服务器,此时需要将三个都进行启动

2021-01-13_150205

  • 可通过命令查看信息

2021-01-13_150405

  • 在第二个终端中打开第二个6382服务

    image-20210113151940190

  • 打开第三个终端,打开6384服务

    image-20210113152151966

  • 此时可以在主服务其中进行读写操作,从服务器信息是同步的

主服务器image-20210113152653358

6382image-20210113152723566

6384image-20210113152748316

2.容灾处理

当Master服务出现故障,需手动将slave中的一个提升为master,剩下的slave挂至新的master上(冷处理:机器挂掉了,再处理)

命令:

①:slaveof no one将一台slave服务器提升为Master(提升某slave为master)

②:slaveof 127.0.0.1 6384(将slave挂至新的master上)

  • 将Master:6380停止

image-20210113211634536

  • 选择一个Salve升到Master,将其他的Slave挂在到新提升的Master

image-20210113211806238

  • 将其他Salve挂到新的Master

image-20210113212015190

  • 原来的服务器重新添加到主从结构(假设原来的6380服务器已经修好)

image-20210113212552016

  • 查看新的Master信息

image-20210113213319821

6.3.2 高可用Sentinel哨兵
  • Sentinel哨兵可以用来监控多个Redis服务实例的运行情况。Redis Sentinel 是一个运行在特殊模式下的Redis服务器。Redis Sentinel是在多个Sentinel进程环境下互相协作工作的。哨兵数量必须为多个,而且必须为奇数

  • image-20210113223354690

    Sentinel系统有三个主要任务

    • 监控:Sentinel不断的检查主服务和从服务器是否按照预期正常工作。
    • 提醒:被监控的Redis问题出现时,Sentinel会通知管理员或其他应用程序。
    • 自动故障转移:监控的主Redis不能正常工作,Sentinel会开始进行故障迁移操作。将一个从服务器升级到新的主服务器。让其他从服务器挂到新的主服务器。同时向客户端提供新的主服务器地址。
1.Sentinel配置
  • 复制三分sentinel.conf文件

image-20210113224152788

  • 修改哨兵的配置文件

    • 1.修改哨兵的运行端口号

      image-20210113224717699

    • 2.修改主服务器端口号为6384,并且投票数为2,因为有三个哨兵

    image-20210113225009442

    • 3.同样的方式修改其他两个哨兵的配置文件

    6382哨兵的文件配置:

    image-20210113225401468

    image-20210113225441177

    6384哨兵的配置:

    port 26384
    以及
    sentinel monitor mymaster 127.0.0.1 6384 2
    
2.启动哨兵
  • 在三个不同的新的终端分别执行三条语句,打开三个哨兵

    ./redis-sentinel ../sentinel26380.conf    第一个哨兵
    ./redis-sentinel ../sentinel26382.conf 	  第二个哨兵
    ./redis-sentinel ../sentinel26384.conf	  第三个哨兵 
    
3.关闭主服务器,制造故障
  • 此时可以接收到哨兵传来的信息
12197:X 13 Jan 2021 23:11:47.643 # +switch-master mymaster 127.0.0.1 6384 127.0.0.1 6380
12197:X 13 Jan 2021 23:11:47.643 * +slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380
12197:X 13 Jan 2021 23:11:47.643 * +slave slave 127.0.0.1:6384 127.0.0.1 6384 @ mymaster 127.0.0.1 6380
12197:X 13 Jan 2021 23:12:17.647 # +sdown slave 127.0.0.1:6384 127.0.0.1 6384 @ mymaster 127.0.0.1 6380
  • 此时6380服务器成为了主服务器

image-20210113231542571

4.重新启动6384服务器
  • 假如此时主服务器修好了,重新启动6384

image-20210113232207244

  • 此时哨兵将收到信息
 +sdown slave 127.0.0.1:6384 127.0.0.1 6384 @ mymaster 127.0.0.1 6380

将6384重新挂载到6380上。

此时的6384状态为

image-20210113232504591

6.4安全设置

6.4.1 设置密码
  • 设置Redis的访问密码,修改redis.conf中requirepass密码。
  1. 开启访问密码设置

修改redis.conf,使用vim命令。找到requirepass行去掉注释,requirepass空格后就是密码

image-20210114144519491

保存退出。

2.再次打开redis时,需要密码

./redis-cli -a 123456

或者 image-20210114145032183

6.4.2 绑定ip
  • 修改redis.conf文件,把#bind 127.0.0.1前面的注释#去掉,然后把127.0.0.1改成允许访问你redis服务器的ip地址,表示只允许该ip进行访问。多个ip使用空格分隔。
6.4.3 修改默认端口号
  • 修改redis的端口,在redif.conf文件中修改port6379将其修改为自己指定的端口(可随意),端口1024是保留给操作系统使用的。用户可以使用的范围是1024-65535
  • 使用./redis-cli -p 新设置端口来指定端口号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值