Redis入门(下):Redis事务和主从复制

开始时间:2022-03-25
课程链接:Redis实战精讲

Redis配置文件

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

Redis 的网络相关配置

  • bind:绑定IP地址,其它机器可以通过此IP访问Redis,默认绑定127.0.0.1,也可以修改为本机的IP地址。
  • port:配置Redis占用的端口,默认是6379。
  • tcp-keepalive:TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。

进入redis.conf文件
在这里插入图片描述
我们的ip是192.168.91.128
因此修改bind后面的默认值
同时修改端口号6380
在这里插入图片描述

[root@localhost redis-5.0.2]# redis-cli -h 192.168.91.128 -p 6380
192.168.91.128:6380> 

[root@localhost redis-5.0.2]# redis-cli -h 192.168.91.128 -p 6380 shutdown

常规配置:
loglevel:配置日志级别,开发阶段配置debug,上线阶段配置notice或者warning.
logfile:指定日志文件。redis在运行过程中,会输出一些日志信息;默认情况下,这些日志信息会输出到控制台;我们可以使用logfile配置日志文件,使redis把日志信息输出到指定文件中。
databases:配置redis服务默认创建的数据库实例个数,默认值是16。

在vim的命令行模式下 输入

:/ 想要搜的文件名

可以实现类似ctrl+F的功能
指定日志文件名字
在这里插入图片描述

安全配置

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

Redis持久化

redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失。为了解决这个问题,redis提供了持久化功能——RDB和AOF(Append Only File)
在适当的时机采用适当手段把内存中的数据持久化到磁盘中,每次redis服务启动时,都可以把磁盘上的数据再次加载内存中使用。

RDB

RDB(Redis DataBase)是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb文件来恢复数据。

原理:Redis会复制一个与当前进程一样的进程。
新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程,来进行持久化。
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
RDB保存的文件是dump.rdb文件 ,位置保存在Redis的启动目录。Redis每次同步数据到磁盘都会生成一个dump.rdb文件,新的dump.rdb会覆盖旧的dump.rdb文件。

配置RDB 持久化策略

       save <seconds> <changes>:配置持久化策略
       dbfilename:配置redis RDB持久化数据存储的文件
       dir:    配置redis RDB持久化文件所在目录
save <seconds> <changes>

配置复合的快照触发条件,即Redis 在seconds秒内key改变changes次,Redis把快照内的数据保存到磁盘中一次。默认的策略是:
1分钟内改变了1万次
或者5分钟内改变了10次
或者15分钟内改变了1次
如果要禁用Redis的持久化功能,则把所有的save配置都注释掉。

但他有不足,就是比如刚触发完了我的一次持久化,我再添加一些数据,很可能三个条件都不满足,那就会造成数据丢失

不过一般redis里面放的都是频繁访问的数据
会存放到mysql里面

AOF

AOF(Append Only File)

采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的指令。记录的是改数据的所有操作,而不是记录数据
如果宕机了,那就重新执行这些操作,
效率低下,redis默认不开启AOF功能。

appendonly:配置是否开启AOF策略
appendfilename:配置操作日志文件

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

Redis事务

事务:把一组数据库命令放在一起执行,保证操作原子性,要么同时成功,要么同时失败。
Redis的事务:允许把一组redis命令放在一起,把命令进行序列化(按照命令队列依次执行),然后一起执行,保证部分原子性。
分为压入报错【原子性】 执行报错【不保证原子性】
multi标记事务开始 exec标记事务结束

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK

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

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set kk vv
QUEUED
127.0.0.1:6379> seta kk2 vv2
(error) ERR unknown command `seta`, with args beginning with: `kk2`, `vv2`, 
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.

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

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec
1) OK
2) (erro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值