redis数据类型介绍,主从模式、哨兵模式搭建

Redis,NoSql数据库

目录

1、Redis数据类型(重点)
a)String类型
b)Map(hash)类型
c)List类型
d)Set类型
e)SortedSet
2、Redis的持久化方案
a)Rbd方式
b)Aof方式
3、Redis的主从复制(读写分离)


正文

1Redis数据类型

1.1String

1.1.1命令
1.1.1.1赋值

语法:SET key value
127.0.0.1:6379> set test 123
OK

1.1.1.2取值
语法:GET key

127.0.0.1:6379> get test
"123“

1.1.1.3取值并赋值

语法:GETSET key value
127.0.0.1:6379> getset s2 222
“111”
127.0.0.1:6379> get s2
“222”

1.1.1.4设置/获取多个键值
语法:
MSET key value [key value …]
MGET key [key …]

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
“v1”
127.0.0.1:6379> mget k1 k3

  1. “v1”
  2. “v3”

1.1.1.5删除
语法:DEL key

127.0.0.1:6379> del test
(integer) 1

1.1.1.6数值增减
incr 增加一
incrby num 3 加3
decr 减一
decrby num 3 减3

递增数字
当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
语法:INCR key (increment)

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3

增加指定的整数
语法:INCRBY key increment

127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9

递减数值
语法:DECR key

127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8

减少指定的整数
语法:DECRBY key decrement

127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> decrby num 3
(integer) -1

1.1.1.6.1向尾部追加值
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value

127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
“hello world!”

1.1.1.6.2获取字符串长度
STRLEN命令返回键值的长度,如果键不存在则返回0。
语法:STRLEN key

127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5

1.1.2应用
1.1.2.1自增主键
语法:incr 主键名

在这里插入图片描述


1.2Hash 散列类型

1.2.1redis hash介绍
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:

string:
键 值

在这里插入图片描述

1.2.2命令
1.2.2.1赋值

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

一次设置一个字段值
语法:HSET key field value

127.0.0.1:6379> hset user username zhangsan
(integer) 1

一次设置多个字段值
语法:HMSET key field value [field value …]

127.0.0.1:6379> hmset user age 20 username lisi
OK

当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
语法:HSETNX key field value

127.0.0.1:6379> hsetnx user age 30 如果user中没有age字段则设置age值为30,否则不做任何操作
(integer) 0

1.2.2.2取值
一次获取一个字段值
语法:HGET key field

127.0.0.1:6379> hget user username
"zhangsan“

一次获取多个字段值
语法:HMGET key field [field …]

127.0.0.1:6379> hmget user age username

  1. “20”
  2. “lisi”

获取所有字段值
语法:HGETALL key

127.0.0.1:6379> hgetall user

  1. “age”
  2. “20”
  3. “username”
  4. “lisi”

1.2.2.3删除字段
删除一个或多个字段,返回值是被删除的字段个数
语法:HDEL key field [field …]

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1

1.2.2.4增加数字
语法:HINCRBY key field increment

127.0.0.1:6379> hincrby user id 2 将用户的编号加2
(integer) 22
127.0.0.1:6379> hget user age 获取用户的年龄
"22“

1.2.2.5其它命令
1.2.2.5.1判断字段是否存在,true返回1,false返回0
语法:hexists key field

127.0.0.1:6379> hexists user age 查看user中是否有age字段
(integer) 1
127.0.0.1:6379> hexists user name 查看user中是否有name字段
(integer) 0

1.2.2.5.2获取字段名或字段值
语法:
HKEYS key
HVALS key

127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user 键集

  1. “age”
  2. “name”
    127.0.0.1:6379> hvals user 值集
  3. “20”
  4. “lisi”

1.2.2.5.3获取字段数量
语法:HLEN key

127.0.0.1:6379> hlen user
(integer) 2

1.2.3应用
1.2.3.1存储商品信息
商品字段

【商品id、商品名称、商品描述、商品库存、商品好评】

定义商品信息的key

商品1001的信息在 Redis中的key为:[items:1001]

存储商品信息

192.168.101.3:7003> HMSET items:1001 id 1001 name apple price 999.9
OK

获取商品信息

192.168.101.3:7003> HGET id
“3”
192.168.101.3:7003> HGETALL items:1001

  1. “id”
  2. “3”
  3. “name”
  4. “apple”
  5. “price”
  6. “999.9”

1.3List

Redis的list是采用来链表(底层设计是类似LinkedList结构)来存储的,所以对于redis的list数据类型的操作,是操作list的两端数据来操作的。

1.3.1命令
1.3.1.1向列表两端增加元素
向列表左边增加元素
语法:LPUSH key value [value …] left

127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3

向列表右边增加元素
语法:RPUSH key value [value …] right

127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

1.3.1.2查看列表
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
语法:LRANGE key start stop

127.0.0.1:6379> lrange list:1 0 2

  1. “2”
  2. “1”
  3. “4”

127.0.0.1:6379> lrange list1 0 -1

1.3.1.3从列表两端弹出元素
LPOP命令从列表左边弹出一个元素,会分两步完成:pop()
第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。

语法:
LPOP key
RPOP key

127.0.0.1:6379> lpop list:1
"3“
127.0.0.1:6379> rpop list:1
"6“

1.3.1.4获取列表中元素的个数
语法:LLEN key

127.0.0.1:6379> llen list:1
(integer) 2

1.3.1.5其它命令
1.3.1.5.1删除列表中指定的值
LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:
当count>0时, LREM会从列表左边开始删除。
当count<0时, LREM会从列表后边开始删除。
当count=0时, LREM删除所有值为value的元素。

语法:LREM key count value

1.3.1.5.2获得/设置指定索引的元素值
获得指定索引的元素值
语法:LINDEX key index

127.0.0.1:6379> lindex list:1 2
“1”

设置指定索引的元素值
语法:LSET key index value (替换)

127.0.0.1:6379> lset list:1 2 2
OK
127.0.0.1:6379> lrange list:1 0 -1

  1. “6”
  2. “5”
  3. “2”
  4. “2”

1.3.1.5.3只保留列表指定片段 (lrange分页,trim:截取某个区间的值)
指定范围和LRANGE一致

语法:LTRIM key start stop

127.0.0.1:6379> lrange l:list 0 -1

  1. “6”
  2. “5”
  3. “0”
  4. “2”
    127.0.0.1:6379> ltrim l:list 0 2
    OK
    127.0.0.1:6379> lrange l:list 0 -1
  5. “6”
  6. “5”
  7. “0”

1.3.1.5.4向列表中插入元素
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

语法:LINSERT key BEFORE|AFTER pivot value

127.0.0.1:6379> lrange list 0 -1

  1. “3”
  2. “2”
  3. “1”
    127.0.0.1:6379> linsert list after 3 4
    (integer) 4
    127.0.0.1:6379> lrange list 0 -1
  4. “3”
  5. “4”
  6. “2”
  7. “1”

1.3.1.5.5将元素从一个列表转移到另一个列表中
语法:RPOPLPUSH source destination

127.0.0.1:6379> rpoplpush list newlist
“1”
127.0.0.1:6379> lrange newlist 0 -1

  1. “1”
    127.0.0.1:6379> lrange list 0 -1
  2. “3”
  3. “4”
  4. “2”

1.3.2应用
1.3.2.1商品评论列表
思路:
在Redis中创建商品评论列表
用户发布商品评论,将评论信息转成json存储到list中。
用户在页面查询评论列表,从redis中取出json数据展示到页面。

定义商品评论列表key:
商品编号为1001的商品评论key【items: comment:1001】

192.168.101.3:7001> LPUSH items:comment:1001 ‘{“id”:1,“name”:“商品不错,很好!!”,“date”:1430295077289}’


1.4Set 集合类型

Set类型:无序(存取无序)、不可重复
list列表类型:存取有序、可重复

1.4.1命令

1.4.1.1增加/删除元素
语法:SADD key member [member …]

127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0

语法:SREM key member [member …]

127.0.0.1:6379> srem set c d
(integer) 1

1.4.1.2获得集合中的所有元素
语法:SMEMBERS key

127.0.0.1:6379> smembers set

  1. “b”
  2. "a”

1.4.1.3判断元素是否在集合中
语法:SISMEMBER key member

127.0.0.1:6379> sismember set a
(integer) 1
127.0.0.1:6379> sismember set h
(integer) 0

1.4.2运算命令
1.4.2.1集合的差集运算 A-B
属于A并且不属于B的元素构成的集合。

在这里插入图片描述
语法:SDIFF key [key …]

127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB

  1. “1”
    127.0.0.1:6379> sdiff setB setA
  2. “4”

1.4.2.2集合的交集运算 A ∩ B
属于A且属于B的元素构成的集合。

在这里插入图片描述
语法:SINTER key [key …]

127.0.0.1:6379> sinter setA setB

  1. “2”
  2. “3”

1.4.2.3集合的并集运算 A ∪ B
属于A或者属于B的元素构成的集合

在这里插入图片描述

语法:SUNION key [key …]

127.0.0.1:6379> sunion setA setB

  1. “1”
  2. “2”
  3. “3”
  4. “4”

1.4.3其它命令

1.4.3.1获得集合中元素的个数
语法:SCARD key

127.0.0.1:6379> smembers setA

  1. “1”
  2. “2”
  3. “3”
    127.0.0.1:6379> scard setA
    (integer) 3

1.4.3.2从集合中弹出一个元素
注意:由于集合是无序的,所以SPOP命令会从集合中随机选择一个元素弹出
语法:SPOP key

127.0.0.1:6379> spop setA
"1“

应用:抽奖


1.5Sortedset Sortedset又叫zset

Sortedset可排序的,但是唯一,存取无序。

Sortedset和set的不同之处,是会给set中的元素添加一个分数,然后通过这个分数进行排序。

1.5.1命令

1.5.1.1增加元素
向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

语法:ZADD key score member [score member …]

127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0

1.5.1.2获取元素的分数
语法:ZSCORE key member

127.0.0.1:6379> zscore scoreboard lisi
“97”

1.5.1.3删除元素
移除有序集key中的一个或多个成员,不存在的成员将被忽略。
当key存在但不是有序集类型时,返回一个错误。

语法:ZREM key member [member …]

127.0.0.1:6379> zrem scoreboard lisi
(integer) 1

1.5.1.4获得排名在某个范围的元素列表
获得排名在某个范围的元素列表
按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:ZRANGE key start stop [WITHSCORES]

127.0.0.1:6379> zrange scoreboard 0 2

  1. “zhangsan”
  2. “wangwu”
  3. "lisi“

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:ZREVRANGE key start stop [WITHSCORES]

127.0.0.1:6379> zrevrange scoreboard 0 2

  1. " lisi "
  2. “wangwu”
  3. " zhangsan “

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数

127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES

  1. “zhangsan”
  2. “80”
  3. “wangwu”
  4. “94”

1.5.1.5获取元素的排名 (得到的是下标)
从小到大
语法:ZRANK key member

127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0

从大到小
语法:ZREVRANK key member

127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1

1.5.1.6其它命令
1.5.1.6.1获得指定分数范围的元素
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

limit:分页 与数据库一致

127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES

  1. “wangwu”
  2. “94”
  3. “lisi”
  4. “97”
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
  5. “wangwu”
  6. “lisi”

1.5.1.6.2增加某个元素的分数
返回值是更改后的分数

语法:ZINCRBY key increment member

127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“

1.5.1.6.3获得集合中元素的数量
语法:ZCARD key

127.0.0.1:6379> ZCARD scoreboard
(integer) 3

1.5.1.6.4获得指定分数范围内的元素个数
语法:ZCOUNT key min max

127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1

1.5.1.6.5按照排名范围删除元素
语法:ZREMRANGEBYRANK key start stop 排名

127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1

  1. “lisi”

1.5.1.6.6按照分数范围删除元素
语法:ZREMRANGEBYSCORE key min max 分数

127.0.0.1:6379> zadd scoreboard 84 zhangsan
(integer) 1
127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
(integer) 1

1.5.2应用
1.5.2.1商品销售排行榜
需求:根据商品销售量对商品进行排行显示
思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。

写入商品销售量:
商品编号1001的销量是9,商品编号1002的销量是10

192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002

商品编号1001的销量加1

192.168.101.3:7001> ZINCRBY items:sellsort 1 1001

商品销量前10名:

192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores

Redis:
String
Key value(json)
Hash
Key field value
List
Key ……value
Set
Key ……value
Zset
Key ……score value


2Redis持久化方案

2.1Rdb方式

Redis默认的方式,redis通过快照来将数据持久化到磁盘中。

2.1.1设置持久化快照(备份)的条件
在redis.conf中修改持久化快照的条件(持久化数据的条件),如下:
在这里插入图片描述
在这里插入图片描述
2.1.2持久化文件存储的目录
在redis.conf中可以指定持久化文件存储的目录
在这里插入图片描述
2.1.3Rdb问题
一旦redis非法关闭,那么会丢失最后一次持久化之后的数据。

如果数据不重要,则不必要关心。
如果数据不能允许丢失,那么要使用aof方式。

2.2Aof方式

Redis默认是不使用该方式持久化的。Aof方式的持久化,是操作一次redis数据库,则将操作的记录存储到aof持久化文件中。

第一步:开启aof方式的持久化方案
将redis.conf中的appendonly改为yes,即开启aof方式的持久化方案。
在这里插入图片描述
Aof文件存储的目录和rdb方式的一样。

Aof文件存储的名称
在这里插入图片描述

2.2.1结论

在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载。
Aof:底层频繁的持久化数据,资源占用率高。但是数据不会丢失
Rdb: 满足条件才持久化数据,资源占用率低。但是非法关闭redis,最后一次存储的数据会丢失。


3Redis的主从复制

3.1什么是主从复制

持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:

在这里插入图片描述

说明:
主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
只有一个主redis,可以有多个从redis。
主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求
一个redis可以即是主又是从,如下图:

在这里插入图片描述
3.2主从复制设置
3.2.1主机配置

无需配置

3.2.2从机配置

第一步:复制出一个从机

[root@localhost redis]# cp bin /bin2 –r

第二步:修改从机的redis.conf
语法:Slaveof masterip masterport

slaveof 192.168.82.100 6379

第三步:修改从机的port地址为6380

在redis.conf中修改

第四步:清除从机中的持久化文件

[root@localhost bin2]# rm -rf appendonly.aof dump.rdb

第五步:启动从机

[root@localhost bin2]# ./redis-server redis.conf

第六步:启动6380的客户端

[root@localhost bin2]# ./redis-cli -p 6380

可查看主从配置信息

注意:
主机一旦发生增删改操作,那么从机会将数据从主机同步到从机中
从机不能执行写操作(读写分离)

127.0.0.1:6380> set s2 222
(error) READONLY You can’t write against a read only slave.

3.2.3主从复制原理 (面试)
主从同步?

Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。(配置好主从复制后,启动(重启)从redis)
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
通过info server,info replication命令查看服务运行信息和主从复制信息。

3.2.4复制存在的问题
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

3.2.5面试题分享:
复制架构中出现宕机情况,怎么办?
如果在主从复制架构中出现宕机的情况,需要分情况看:

1、从Redis宕机

a)这个相对而言比较简单,在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;
b)问题? 如果从库在断开期间,主库的变化不大,从库再次启动后,主库依然会将所有的数据做RDB操作吗?还是增量更新?(从库有做持久化的前提下)
i.不会的,因为在Redis2.8版本后就实现了,主从断线后恢复的情况下实现增量复制。

2、主Redis宕机

a)这个相对而言就会复杂一些,需要以下2步才能完成
i.第一步,在从数据库中执行SLAVEOF NO ONE命令,断开主从关系并且提升为主库继续服务;
ii.第二步,将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来;
b)这个手动完成恢复的过程其实是比较麻烦的并且容易出错,有没有好办法解决呢?
当前有的,Redis提供的哨兵(sentinel)的功能。

3.2.6哨兵(sentinel)

3.2.6.1什么是哨兵
顾名思义,哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:

1、监控主数据库和从数据库是否运行正常;
2、主数据出现故障后自动将从数据库转化为主数据库;

3.2.6.2原理

单个哨兵的架构:

在这里插入图片描述
多个哨兵的架构:
在这里插入图片描述
多个哨兵,不仅同时监控主从数据库,而且哨兵之间互为监控。

3.2.6.3环境

当前处于一主多从的环境中: 输入info replication 查看主从配置关系
在这里插入图片描述
3.2.6.4配置哨兵
启动哨兵进程首先需要创建哨兵配置文件:
或者复制:/opt/install/redis-4.0.11/sentinel.conf

vi sentinel.conf
输入内容:

sentinel monitor 票数

sentinel monitor myMaster 10.9.41.134 6379 1
sentinel auth-pass myMaster 123456

说明:
myMaster:监控主数据的名称,自定义即可。
127.0.0.1:监控的主数据库的IP
6379:监控的主数据库的端口
1:最低通过票数
auth-pass:主redis的密码

启动哨兵进程:
redis-sentinel ./sentinel.conf

哨兵无需配置slave,只需要指定master,哨兵会自动发现slave

3.2.6.5从数据库宕机

kill掉从redis进程后,30秒后哨兵的控制台输出:

2989:X 05 Jun 20:09:33.509 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379

说明已经监控到slave宕机了,那么,如果我们将6380端口的redis实例启动后,会自动加入到主从复制吗?

2989:X 05 Jun 20:13:22.716 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379
2989:X 05 Jun 20:13:22.788 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379

可以看出,slave从新加入到了主从复制中。-sdown:说明是恢复服务。

3.2.6.6主库宕机
哨兵控制台打印出如下信息:

2989:X 05 Jun 20:16:50.300 # +sdown master ttMaster 127.0.0.1 6379 说明master服务已经宕机
2989:X 05 Jun 20:16:50.300 # +odown master ttMaster 127.0.0.1 6379 #quorum 1/1
2989:X 05 Jun 20:16:50.300 # +new-epoch 1
2989:X 05 Jun 20:16:50.300 # +try-failover master ttMaster 127.0.0.1 6379 开始恢复故障
2989:X 05 Jun 20:16:50.304 # +vote-for-leader 9059917216012421e8e89a4aa02f15b75346d2b7 1 投票选举哨兵leader,现在就一个哨兵所以leader就自己
2989:X 05 Jun 20:16:50.304 # +elected-leader master ttMaster 127.0.0.1 6379 选中leader
2989:X 05 Jun 20:16:50.304 # +failover-state-select-slave master ttMaster 127.0.0.1 6379 选中其中的一个slave当做master
2989:X 05 Jun 20:16:50.357 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ ttMaster 127.0.0.1 6379 选中6381
2989:X 05 Jun 20:16:50.357 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ ttMaster 127.0.0.1 6379 发送slaveof no one命令
2989:X 05 Jun 20:16:50.420 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ ttMaster 127.0.0.1 6379 等待升级master
2989:X 05 Jun 20:16:50.515 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ ttMaster 127.0.0.1 6379 升级6381为master
2989:X 05 Jun 20:16:50.515 # +failover-state-reconf-slaves master ttMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:50.566 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:51.333 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:52.382 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:52.438 # +failover-end master ttMaster 127.0.0.1 6379 故障恢复完成
2989:X 05 Jun 20:16:52.438 # +switch-master ttMaster 127.0.0.1 6379 127.0.0.1 6381 主数据库从6379转变为6381
2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ ttMaster 127.0.0.1 6381 添加6380为6381的从库
2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ ttMaster 127.0.0.1 6381 添加6379为6381的从库
2989:X 05 Jun 20:17:22.463 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ ttMaster 127.0.0.1 6381 发现6379已经宕机,等待6379的恢复

在这里插入图片描述

可以看出,目前,6381为master,拥有一个slave为6380.
接下来,我们恢复6379查看状态:

2989:X 05 Jun 20:35:32.172 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ ttMaster 127.0.0.1 6381 6379已经恢复服务
2989:X 05 Jun 20:35:42.137 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ ttMaster 127.0.0.1 6381 将6379设置为6381的slave
在这里插入图片描述

3.2.6.7使用命令设置密码

除了在配置文件redis.conf中配置验证密码以外,也可以在已经启动的redis服务器通过命令行设置密码,但这种方式是临时的,当服务器重启了密码必须重设。命令行设置密码方式如下:
config set requirepass yourPassword 设置密码
设置主redis密码
config set masterauth masterpassword

有时候我们不知道当前redis服务器是否有设置验证密码,或者忘记了密码是什么,我们可以通过命令行输入命令查看密码,命令如下:

config get requirepass


附加:

redis使用过程中可能会出现的问题:
数据穿透
数据穿刺
数据倾斜
数据雪崩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值