Redis数据库操作---包括搭建集群(下)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: Redis数据库操作---包括搭建集群(下)

13.Redis的配置文件: 在redis艮目录下提供redis.conf配置文件

        可以配置一些redis服务端运行时的一些参数,

        如果不使用配置文件,那么redis会安装默认的参数运行,

       如果使用配置文件,在启动redis服务时,必须指定所使用的配置文件

       a). redis配置文件中关于网络的配置:

           port:指定redis服务所使用的端口,默认使用6379

           bind:配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上的任何一个ip

                   一般情况下,都会配置一个ip,而且通常是一个真实的ip

           -->如果配置了port和bind,则客户端连接redis服务时,必须指定端口和ip

               eg:redis-cli -h 192.168.43.133 -p 6380   【启动】

                       redis-cli -h 192.168.43.133-p 6380 shutdown  【关闭】

           tcp-keepalive:连接保活策略,服务器端多长时间向客户端发送一次ACK请求,判断客户端是否在使用。

                      长时间不使用的客户端会被断开,对在使用的客户端进行连接维护

       b).常规配置:

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

           logfile:    指定日志文件。redis在运行过程中会输出一些日志信息,

               默认情况下,这些信息会输出到控制台,我们可以使用logfile配置日志文件。

           databases:指定redis服务默认创建的数据库实例个数,默认值是16

           

       c).安全配置:

           requirepass:设置访问redis服务时所使用的密码,默认不使用。

                   此参数必须在protected-mode=yes时才起作用。--->启动redis的安全模式

                   一旦设置了密码验证,客户端连接redis服务时,必须使用密码连接:redis-cli -h ip port -a pwd

===========================================================================================

14.redis的持久化:【redis的数据放在内存中的,这样在加快读取速度的同时也对数据的安全性产生了新的问题,即当redis所在

        服务器发生荡机(或者关机),数据库里的所有数据将会全部丢失。为了解决这个问题redis提供了持久化功能--RDB和AOF】

   -->redis提供持久化策略,在适当的时机采用适当的手段把内存中的数据持久化到内存磁盘中,每次redis服务启动时,都把磁盘上的数据再次加载内存中使用。

       a). RDB策略【RDB策略是redis默认的持久化策略,很容易把最后几条数据没有保存】:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作。

               

               save <seconds><changes>:配置持久化策略

               默认的策略:如果要禁用RDB策略,将save全部注释掉

                   1分钟内改变了1万次

                   或者5分钟内该改变了10次

                   或者15分钟内改变了1次

                 

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

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

       b).AOF策略【会使效率大大折扣】:采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的操作。【把写命令记录下来】        

                           ---->效率低下,redis默认不开启

               

                           appendonly:配置是否开启AOF策略

                           appendfilename:配置操作日志文件

       小结:根据数据的特点决定开启哪种持久化策略,一般情况下,开启RDB足够了。

===================================================================================================================

15.redis的事务:

   事务:        把一组数据库命令放在一起执行,保证操作原子性【强调事务的一致性】,要么同时成功,要么同时失败。

   Redis的事务:    允许在把一组redis命令放在一起执行,把命令进行序列化【按照放入的顺序】,然后一起执行,保证部分原子性。

   

   1).multi:用来标记一个事务的开始。

       multi

       set k1 v1

       set k2 v2

       exec

   2).exec:用来执行事务队列中所有的命令

   3).redis的事务只能保证部分原子性:

       a).如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事物的原子性。

           multi

           set k3 v3

           seta kk vv--->命令错误

           set k4 v4

           exec--------->报错,对没有执行

       b).如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其它命令的执行,不能保证事物的原子性。

           multi

           set k3 v3

           incr k1------>不执行,语法没有错误

           set k4 v4

           exec

   4).discard: 清除所有已经压入队列中的命令,并且结束整个事务

           multi

           set k5 v5

           set k6 v6

           discard

   5).watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则,正常执行

           watch key

       【举例:比如一个客户端想decrby  balance 50,要先判断version有没有被改变作为一个判断条件,决定要不要修改balance[并且修改balance的同时也会修改version]

                  在此客户端修改balance时,另一个客户端也想改变balance,也要判断version有没有被修改,假设前一个客户端先修改了balance,并且使version要发生了改变,

                  则发现此时version的值不相同了,则修改失败】---跟乐观锁类似

       "update table set balance=balance-dept,version=version+1

       where id=xxxx and version=100"

       

       set balance 100

       set balance2 1000

       set version 1

       watch version

       multi

       decrby  balance 50

       incrby  balance2 50

       exec

   6).unwatch:放弃是监控所有的键

       unwatch  key

       watch version

       unwatch  key

       multi

       decrby  balance 50

       incrby  balance2 50

       exec

==============================================================================================================

16.redis消息的发布与订阅:

   redis客户端可以订阅某个频道,消息的发布者(也是客户端)往频道上发布消息,所有订阅此频道的客户端都能接受到消息。

   1).subscribe:订阅一个或多个频道的消息

       subscribe  ch1 ch2 ch3

   2).pushlish:将消息发布到指定频道

       pushlish ch1  hello

   3).psubscribe:订阅一个或多个频道的消息,频道名支持通配符

       psubscribe news*

===================================================================================

17.redis的主从复制:主多从少,主写从读,读写分离,主写同步复制到从

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

搭建一主二从集群:

1).搭建三台redis服务:使用一台redis模拟三台redis服务

         提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf

       cp redis.conf redis6379.conf

       cp redis.conf redis6380.conf

       cp redis.conf redis6381.conf    

       修改端口号:redis6379.conf-->

               port:6379

                 pidfile /var/run/redis_6379.pid

               logfile "6379.log"

               dbfilename dump6379.rdb

             redis6380.conf-->

               port:6380

                 pidfile /var/run/redis_6380.pid

               logfile "6380.log"

               dbfilename dump6380.rdb

             redis6381.conf-->

               port:6381

                 pidfile /var/run/redis_6381.pi

               logfile "6381.log"    

               dbfilename dump6381.rdb    

   分使用三个redis配置文件,启动三个redis服务:

       redis-server  redis6379.conf &

       redis-server  redis6380.conf &

       redis-server  redis6381.conf &

2).通过redis客户端分别连接三台redis服务:

       redis-cli -h 127.0.0.1 -p 6379

       redis-cli -h 127.0.0.1 -p 6380

       redis-cli -h 127.0.0.1 -p 6381

           

3).查看三台redis服务在集群中的主从角色

       info    relication ---> role:master

       默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。

4).先在6379进行写操作:--->测试三台服务是否独立

       set k1 v1

   三台redis服务互相独立,互不影响。

5).设置主从关系:设从不设主【设置6379为主机】

   在6380上执行:slaveof  127.0.0.1 6379

       在6380上执行:info    relication-->role:slave

        在6381上执行:slaveof  127.0.0.1 6379

       在6381上执行:info    relication-->role:slave

   在6379上执行:info    relication-->查看是否连接

6).全量复制:一旦主从关系确定,会自动把主机上已有的数据同步复制到从库。

   在6380和6381上执行:keys *--->发现都有 k1 v1

7).增量复制:主库写数据会自动同步到从库

   在6379上添加数据:

       set k2 v2

   在6380和6381上执行:keys *--->发现都有 k2 v2

8).主写从读,读写分离:

   在6380和6381上执行:set k3 v3--->报错,从库只能读,不能写

9).主机菪机:从机原地待命(从机可以读)

   关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown

        查看6380和6381服务的从机角色:info    relication

10).主机恢复:一切恢复正常

   重启6379服务:redis-server redis6379.conf &

   客户端6380连接6379:redis-cli -h 127.0.0.1 -p 6379

   客户端6381连接6379:redis-cli -h 127.0.0.1 -p 6379

11).从机宕机:主机少一个从机、其它从机不变

   关闭6380服务:redis-cli -h 127.0.0.1 -p 6380 shutdown

   查看6379服务的从机角色:info    relication

   查看6380和6381服务的从机角色:info    relication

12).从机恢复:需要重新设置主从关系

   重启6380服务:redis-server redis6380.conf &

   客户端6380连接6379:redis-cli -h 127.0.0.1 -p 6379

   在6380上执行:slaveof  127.0.0.1 6379

13).从机上位:

   a).主机宕机:从机原地待命(从机可以读)

       关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown

       查看6380和6381服务的从机角色:info    relication

   b).从机断开原来的主从关系:

       在6380上执行:slaveof no one

       查看6380服务的从机角色:info    relication

   c).重新设置主从关系:

       在6381上执行:slaveof  127.0.0.1 6380

       在6380上执行:info    relication-->role:slave

       在6381上执行:info    relication-->role:slave

   d).之前的主机恢复:变成孤家寡人,没有从机了

       重启6379服务:redis-server redis6379.conf &

       客户端连接6379:redis-cli -h 127.0.0.1 -p 6379

   e).天堂变地狱

       在6379上执行:slaveof  127.0.0.1 6381 --->6381从属于6380,6379从属于6381

       在6381上执行:info replication-->即是主机又是从机,只要是从机都不能写数据

   小结:一台主机可以配置多台从机,一台从机也可以配置多台从机,从而形成一个庞大的集群

             减轻了一台主机的压力,但是增加了服务间的延迟时间。

=============================================================================

18.redis哨兵模式:从机宕机,从机上位的自动版

   1).搭建三台redis服务:使用一台redis模拟三台redis服务

       搭建一主二从的集群框架(17里的前5步)

   2).提供一个哨兵的配置文件:【默认提供了sentinel.conf-->里面有很多我们用不到的参数】

        在redis安装目录下创建配置文件: redis_sentinel.conf

       添加:sentinel monitor dc-redis 127.0.0.1 6379 1

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

                   -->一般性能好的,票数多

   3).启动哨兵服务:

       redis-sentinel redis_sentinel.conf[这里用的是相对路径,可以设置为绝对路径]

   4).主机宕机:

       关闭6380服务:redis-cli -h 127.0.0.1 -p 6380 shutdown

   5).之前的主机恢复:

       重启6379服务:redis-server redis6379.conf &

       客户端连接6379:redis-cli -h 127.0.0.1 -p 6379

         ---->6379从属于新的主机

相关实践学习
基于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
相关文章
|
5月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
4月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
141 0
|
3月前
|
存储 缓存 关系型数据库
阿里云数据库 SelectDB 多计算集群核心设计要点揭秘与场景应用
在云原生存算分离架构下,多计算集群的实现从技术方案上看似乎并不存在过多难题。但从产品的角度而言,具备成熟易用的多计算集群能力且能运用于用户实际业务场景中,还有较多核心要点需要深度设计
阿里云数据库 SelectDB 多计算集群核心设计要点揭秘与场景应用
|
4月前
|
存储 缓存 负载均衡
带你认识DM 共享存储数据库集群
带你认识DM 共享存储数据库集群
88 3
|
4月前
|
关系型数据库 MySQL Serverless
在部署云数据库PolarDB MySQL版 Serverless集群的过程中问题点
在部署PolarDB MySQL Serverless过程中,常见问题包括配置误解、网络配置错误、资源未及时释放及压测不熟练。建议深入理解配置项,确保合理设置伸缩策略;明确业务需求,使PolarDB与现有服务同处一地域与VPC;利用提醒功能管理资源生命周期;按官方指南执行压测。新用户面临的学习曲线、资源管理自动化不足及成本控制难题,可通过增强文档友好性、引入智能成本管理与用户界面优化来改善。
66 1
|
5月前
|
存储 NoSQL 算法
Redis 集群模式搭建
Redis 集群模式搭建
96 5
|
5月前
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
5月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
4月前
|
运维 监控 数据库
在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
【8月更文挑战第14天】在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
88 0