Redis超详细入门手册教程!还不快来看看?4

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis超详细入门手册教程!还不快来看看?

3 Redis的配置文件

3.1  redis.conf存放位置:

       Redis的安装根目录下(/opt/redis-5.0.2),Redis在启动时会加载这个配置文件,在运行时按照配置进行工作。 这个文件有时候我们会拿出来,单独存放在某一个位置,启动的时候必须明确指定使用哪个配置文件,此文件才会生效。

3.2  Redis 的网络相关配置

1、bind:绑定IP地址,其它机器可以通过此IP访问Redis,默认绑定127.0.0.1,也可以修改为本机的IP地址。

2、port:配置Redis占用的端口,默认是6379。

3、tcp-keepalive:TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。

3.3  Redis的常规配置

1、loglevel:日志级别,开发阶段可以设置成debug,生产阶段通常设置为notice或者warning.

2、logfile:指定日志文件名,如果不指定,Redis只进行标准输出。要保证日志文件所在的目录必须存在,文件可以不存在。还要在redis启动时指定所使用的配置文件,否则配置不起作用。

3、databases:配置Redis数据库的个数,默认是16个。

3.4  Redis的安全配置

1、requirepass:配置Redis的访问密码。默认不配置密码,即访问不需要密码验证。此配置项需要在protected-mode=yes时起作用。使用密码登录客户端:redis-cli -h ip -p 6379 -a pwd

3.5  Redis的RDB配置

1、save <seconds> <changes>:配置复合的快照触发条件,即Redis 在seconds秒内key改变changes次,Redis把快照内的数据保存到磁盘中一次。默认的策略是:

1分钟内改变了1万次

或者5分钟内改变了10次

或者15分钟内改变了1次

如果要禁用Redis的持久化功能,则把所有的save配置都注释掉。

2、stop-writes-on-bgsave-error:当bgsave快照操作出错时停止写数据到磁盘,这样能保证内存数据和磁盘数据的一致性,但如果不在乎这种一致性,要在bgsave快照操作出错时继续写操作,这里需要配置为no。

3、rdbcompression:设置对于存储到磁盘中的快照是否进行压缩,设置为yes时,Redis会采用LZF算法进行压缩;如果不想消耗CPU进行压缩的话,可以设置为no,关闭此功能。

4、rdbchecksum:在存储快照以后,还可以让Redis使用CRC64算法来进行数据校验,但这样会消耗一定的性能,如果系统比较在意性能的提升,可以设置为no,关闭此功能。

5、dbfilename:Redis持久化数据生成的文件名,默认是dump.rdb,也可以自己配置。

6、dir:Redis持久化数据生成文件保存的目录,默认是./即redis的启动目录,也可以自己配置。

3.6  Redis AOF配置

1、appendonly:配置是否开启AOF,yes表示开启,no表示关闭。默认是no。

2、appendfilename:AOF保存文件名

3、appendfsync:AOF异步持久化策略

always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差但数据完整性比较好(慢,安全)

everysec:出厂默认推荐,每秒异步记录一次(默认值)

no:不即时同步,由操作系统决定何时同步。

4、no-appendfsync-on-rewrite:重写时是否可以运用appendsync,默认no,可以保证数据的安全性。

5、auto-aof-rewrite-percentage:设置重写的基准百分比

6、auto-aof-rewrite-min-size:设置重写的基准值

4  Redis的事务

4.1  Redis的事务

      Redis的事务允许在一次单独的步骤中执行一组命令,并且能够保证将一个事务中的所有命令序列化,然后按顺序执行;在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。即Redis的事务要能够保证序列化和原子性。

4.2 事务的常用命令

1.multi

语法:multi

功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。

返回值:开启成功返回OK

aa9113dfa34f473281cb801dbb87f350.png

2.exec

语法:exec

功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。

如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;

如果在压队列的过程中正常,在执行队列中某一个命令报错,则只会影响本条命令的执行结果,其它命令正常运行;

当使用WATCH命令时,只有当受监控的键没有被修改时,EXEC命令才会执行事务中的命令;而一旦执行了exec命令,之前加的所有watch监控全部取消。

返回值:这个命令的返回值是一个数组,其中的每个元素分别是原子化事务中的每个命令的返回值。 当使用WATCH命令时,如果事务执行中止,那么EXEC命令就会返回一个Null值。

580f62c5c66d48d0adada1b1301ebdbe.png

3.discard

语法:discard

功能:清除所有先前在一个事务中放入队列的命令,并且结束事务。

如果使用了WATCH命令,那么DISCARD命令就会将当前连接监控的所有键取消监控。

返回值:清除成功,返回OK。

a2ba4ccf113241789fce163f9260d5b2.png

4.watch

语法:watch key [key …]

功能:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的。如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。

返回值:监控成功,返回OK。

4e42eb2afebc4978843182fd996ee45c.png

5. unwatch

语法:unwatch

功能:清除所有先前为一个事务监控的键。

         如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。

返回值:清除成功,返回OK。

d9b15d1e5f714486a6fb30259d60f8e9.png

4.3 Redis事务小结

1、单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键。

2、不保证事务的原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。

5. Redis消息的发布与订阅(了解)

5.1 Redis发布订阅

     Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

5.2  Redis发布订阅示意图

63d663cc1cd14ac9b35e742b30e1d47f.png

5.3  Redis发布订阅的常用命令

5.3.1 subscribe

语法:subscribe channel [channel…]

功能:订阅一个或多个频道的信息

返回值:订阅的消息

76e0558cce3f4da296bd158db76bd2d1.png

5.3.2 publish

语法:publish chanel message

功能:将信息发送到指定的频道。

返回值:数字。接收到消息订阅者的数量。

792dbd9f7b4046e89b663b871c396b21.png

5.3.3 psubscribe

语法:psubscribe pattern [pattern]

功能:订阅一个或多个符合给定模式的频道。模式以 * 作为通配符,例如:news.* 匹配所有以 news. 开头的频道。

返回值:订阅的信息。

2815e6668d9f4fa8a733e61a728ed526.png

6:Redis的主从复制

      主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。

6.1  一主二从(原理)

1、配从(库)不配主(库)

2、配从(库): slaveof 主库IP 主库端口

3、主写从读、读写分离

4、从连前后同

5、主断从待命、从断重新连

6.2  一主二从搭建

1、一台服务器模拟三台主机:

第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf

第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名

               如:

port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb

第三步:分别打开三个窗口模拟三台服务器,开启redis服务。

b4004c7be330464591e9e5f139eda4c3.png

2、查询主从信息:info replication

d6c8f64c7d0747279b5cf2b426ccb0ed.png

3、写操作6379:

f0ed13e590e64046bf52ecc69a87f4ea.png

4、设置主从关系:

在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379

0a42b2c295ef4753bdc986566329fc4c.png

c0b05ca2fa3e4e3caac7d3119169b06f.png

另一种1bdc8e4405fe40f9b0dcecd2af654396.png方式,就是修改6380和6381的配置文件,在最后加上:

注意:如果主redis设置了密码,从库的redis.conf中还需要设置masterauth为主redis的密码。

5、全量复制:在6380和6381分别执行命令get k1

792ddaee75994a478460190923c06cab.png

6、增量复制:6379执行命令:set k2 v2。然后6380端口和6381端口,分别执行命令:get k2

2263a9cc7d4d44f098787ef021bde1b4.png

7、主写从读、读写分离:在6380和6381上执行写操作set k3 v3

27da4f63503c496b9a826a1f1862a9f3.png

8、主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息

f2a4ce3778204348b23bef6fd98a3967.png

从机原地待命。

9、主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4

83de2ab373654d6389f8b967fd841a61.png

主机重启后,一切正常。

10、从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息

b10075e009d54aa5a1eb0c8196598cd5.png

11、从机宕机后恢复:重启6380,并查看6380、6379和6381的redis信息

83a26fa91ee7477d88ddc9da2f622a86.png

注意:从机跟master断开联系,必须重新连接,除非写进配置文件。

12、从机恢复连主机前,主机写操作:6379执行写命令set k5 v5,6380和6381分别执行命令get k5

cb8413bca5024b6ba0994ea7e45d4f33.png

13、从机恢复连接主机,6380执行命令:slaveof 127.0.0.1 6379,并且执行命令:get k5

c6a5d2831b4542be88a064be43f2f562.png

14、从机上位:

第一步:主机宕机,6379执行命令:shutdown

cf15c0c1877d4a2895430c5860785696.png

第二步:6380断开主从关系,执行命令:SLAVEOF no one

f77456429ae94db889b3a1835b754bdd.png

第三步:重新搭建主从,6381执行命令:info replication,SLAVEOF 127.0.0.1 6380

9444a22f19f54fa890e0a6538190af1a.png

第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication

af80e79eb4964dfbb27125d9b81ec62c.png

在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。

15、天堂变地狱:6379执行命令saveof 127.0.0.1 6381,并在6379和6381执行info replication

4eecb936961b42c185abcec9153b7fdb.png

一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。

7:复制原理

7.1 全量复制

      slave启动成功连接到master后会发送一个sync命令;Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。只要是重新连接master,一次完全同步(全量复制)将被自动执行。

7.2  增量复制

Master将新的所有收集到的修改命令依次传给slave,完成同步。

8:哨兵模式

8.1  哨兵模式原理

       从机上位的自动版。Redis提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵通过发送命令,来监控主从服务器的运行状态,如果检测到master故障了根据投票数自动将某一个slave转换master,然后通过消息订阅模式通知其它slave,让它们切换主机。然而,一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多哨兵进行监控。

8.2  哨兵模式搭建

1—7步跟1.17.2.2一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。

8、创建redis_sentinel.conf文件,并编辑里边的内容:

sentinel monitor dc-redis 127.0.0.1 6379 1

,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。

9、新开窗口,启动哨兵:redis-sentinel /opt/redis-5.0.2/redis_sentinel.conf

e43d2c4c9c134618976fd850d46456ef.png

10、主机宕机:

b183e964bf1f492487246505774e8073.png

11、等待从机投票,在sentinel窗口中查看打印信息

e4da637bc6d9479bb9d8916367aea43f.png

12、查看6380和6381的redis信息

4fa43910f50443e8a8a1138d1d0b9836.png

13、原主机恢复,启动6379:

7cecc5b2b8b04f139c9754bcf426a122.png

8.3  哨兵模式搭建(配置文件模式)

1—7步跟1.17.2.2一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。

8、复制三份redis_ sentinel.conf文件为redis_sentinel26379.conf、redis_sentinel26380.conf、redis_sentinel 26381.conf,并修改内容:

端口分别修改为26379、26380、26381

哨兵监控策略都修改为:

sentinel monitor mymaster 192.168.235.128 6379 2,表示:指定监控主机的ip地址,port端口,得票数多于2时表示需要切换主从关系。

如果设置密码了,都还需要设置密码:

sentinel auth-pass mymaster 123456

9、新开三个窗口,启动哨兵:./redis-sentinel ../myconfs/sentinel26379.conf

687fe9189d5e4030aac3550cb125340c.png

10、主机宕机:

f2f9523c1a804881ae28b04b0d58c4a8.png

11、等待从机投票,在sentinel窗口中查看打印信息。

8ef7311b6bc74a27a9f166f3cc9ab621.png

12、查看6380和6381的redis信息:

10fc3455637d471fab7eff6bb66b67b8.png

13、原主机恢复

4df3e032ef3f4711893a2a2a3167b799.png




相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
存储 缓存 NoSQL
Redis核心入门知识简记
Redis核心入门知识简记
26 0
|
1天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis入门
本文介绍了Redis常用命令,以及SpringBoot集成Spring Data Redis和Spring Cache。Spring Data Redis 提供了对 Redis 的操作方法,而 Spring Cache 则提供了基于注解的缓存功能,可以方便地将方法的返回值缓存到 Redis 中,以提高性能和减少对数据源的访问次数。这样的集成可以帮助开发者更便捷地利用 Redis 来管理应用程序的数据和缓存。
16 4
|
7天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis内存淘汰(内存过期)策略
Redis入门到通关之Redis内存淘汰(内存过期)策略
23 3
|
7天前
|
存储 NoSQL Linux
Redis入门到通关之多路复用详解
Redis入门到通关之多路复用详解
14 1
|
7天前
|
存储 NoSQL Linux
Redis入门到通关之Redis5种网络模型详解
Redis入门到通关之Redis5种网络模型详解
23 1
|
7天前
|
NoSQL Ubuntu 关系型数据库
Redis入门到通关之Redis网络模型-用户空间和内核态空间
Redis入门到通关之Redis网络模型-用户空间和内核态空间
13 1
|
7天前
|
存储 NoSQL 算法
Redis入门到通关之Redis数据结构-Hash篇
Redis入门到通关之Redis数据结构-Hash篇
17 1
|
7天前
|
存储 NoSQL Redis
Redis入门到通关之Redis数据结构-Set篇
Redis入门到通关之Redis数据结构-Set篇
15 1
|
7天前
|
存储 NoSQL Redis
Redis入门到通关之Redis数据结构-ZSet篇
Redis入门到通关之Redis数据结构-ZSet篇
13 1
|
7天前
|
存储 NoSQL Redis
Redis入门到通关之Redis数据结构-List篇
Redis入门到通关之Redis数据结构-List篇
24 1