Redis学习笔记2

本文详细介绍了Redis的发布订阅、数据持久化机制(RDB快照和AOF日志)、事务处理以及安全性设置,包括IP限制和密码认证。在数据持久化部分,解释了RDB和AOF的优缺点及配置方法。对于Redis的安全性,提到了通过限制IP和设置密码增强服务器保护。此外,还阐述了如何进行主从复制以实现读写分离,包括主从服务器的配置与验证。
摘要由CSDN通过智能技术生成

5 发布与订阅

Redis发布订阅(publish/subscribe)是一种消息通信模式,发送者(publish)发送消息,订阅者(subscribe)订阅后接受频道消息。
总的来说,该项功能估计不会长久使用,随着版本迭代,会被替换了,缺点:

  • 没有 Ack 机制,也不保证数据的连续: PubSub 的生产者传递过来一个消息,Redis 会直接找到相应的消费者传递过去。如果没有一个消费者,那么消息会被直接丢弃。如果开始有三个消费者,其中一个突然挂掉了,过了一会儿等它再重连时,那么重连期间的消息对于这个消费者来说就彻底丢失了。
  • 不持久化消息: 如果 Redis 停机重启,PubSub 的消息是不会持久化的,毕竟 Redis 宕机就相当于一个消费者都没有,所有的消息都会被直接丢弃。
#订阅频道
subscribe 频道1[,频道2]
#支持通配符
psubscribe 名称*
#发布频道
publish 频道  发送消息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6 数据持久化

数据持久化就是在服务重启或服务器重启后数据不丢失。实现持久化,就需要把数据存储到磁盘中。
Redis的持久化有2种方式

  • 快照(rdb)默认就开启
  • aof日志方式(需要手动开启)
    两种的持久化的机制不相同,rdb在某一个时间点把内存中的数据整体保存下来。aof是把用户操作的命令全部记录下来。记录全部命令会对性能有一定的损耗,所以默认redis就没有开启,有条件化建议开启。

6.1 rdb快照

相关配置选项 vim /usr/local/redis/redis.conf

#    秒    命令次数
save 900 1        # 900秒内,有1条写入,则产生快照 
save 300 10       # 300秒内有10次写入,则产生快照
save 60 10000     # 60秒内有10000次写入,则产生快照

dbfilename dump.rdb  //导出来的rdb的默认文件名
dir ./  // 持久化文件存放路径

创建一个数据快照存储目录

6.2 aof日志持久化

相关配置 vim /usr/local/redis/redis.conf

appendonly no # 是否打开 aof日志功能 no不打开 yes打开
#appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec  # 推荐方案,每秒写1次
#appendfsync no        # 写入工作交给操作系统,数据同步性没有保证,同步频率低,速度快

在这里插入图片描述
在这里插入图片描述
进入到redis命令客户端中,执行几次set操作,就可以在指定的日志目录中查看到对应的日志文件
在这里插入图片描述

7 Redis中的事务

Redis支持简单的事务,事务就是:当同一个操作需要多条命令执行,一条执行有误,其它操作将回滚到之前的状态。Redis是以单进程形式执行的,所以从本质上就保证了事务的隔离性(与MySQL的区别)
例如:银行转账工作,从一个账号扣款并在另一个账户增款,要么都执行,要么都不执行。

#执行的步骤:
#开始事务
#命令入队
#执行事务

#Redis事务实现
watch key1 key2  # 监听key的变化
multi  事务开始
	普通命令(string list hash set zset中的命令)
exec  # 执行 / discard   # 取消   exec和discard两个只能执行一个
#unwatch  # 解除监听
#回滚命令 discard

在这里插入图片描述
如果执行的命令没有错,只是业务有问题则不会自动回滚,会执行可以操作的队列中的命令
在这里插入图片描述
如果命令有错,则会自动回滚
在这里插入图片描述
事务执行操作
在这里插入图片描述
key的监听 watch 监听key是否有改变,如果有改变,则执行的事务将会不会成功执行。只有监听的在事务没有执行成功前没有改变,事务才能完成执行。
在这里插入图片描述
在其他数据库,关于事务的一些其他解读

  • 第1级别:Read Uncommitted(读取未提交内容)
    所有事务都可以看到其他未提交事务的执行结果,本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少,该级别引发的问题是——脏读(Dirty Read):读取到了未提交的数据
  • 第2级别:Read Committed(读取提交内容)
    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)
    它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变
    这种隔离级别出现的问题是——不可重复读(Nonrepeatable Read):不可重复读意味着我们在同一个事务中执行完全相同的select语句时可能看到不一样的结果。导致这种情况的原因可能有:有一个交叉的事务有新的commit,导致了数据的改变;一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit
  • 第3级别:Repeatable Read(可重读)
    这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行
    此级别可能出现的问题——幻读(Phantom Read):当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行
    InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决幻读问题;InnoDB还通过间隙锁解决幻读问题

8 Redis密码安全

8.1 ip限制

vim /usr/local/redis/etc/redis.conf文件来通过配置文件限制ip访问,多个ip用空格隔开
在这里插入图片描述

8.2 密码

在这里插入图片描述
重启redis服务
登录测试验证密码是否生效
在这里插入图片描述

9 Redis的主从设置

当数据量变得庞大的时候,读写分离还是很有必要的。redis提供了主从复制的机制,从服务器可以复制主服务器的数据信息,就可以实现读写分离,从而降低单台服务器的压力。

9.1 主服务器配置

开启rdb和aof日志记录,还有密码认证登录

9.2 从服务器配置

因为是使用从端口,所以复制一个redis.conf文件,并命名为redis6380.conf
修改redis6380.conf文件中的相关记录配置
修改端口号
在这里插入图片描述
修改一下pid文件
在这里插入图片描述
修改rdb文件
在这里插入图片描述
设置从服务器中连接主服务器的IP和端口号
在这里插入图片描述
设置主服务器连接时的口令
在这里插入图片描述
关闭aof日志记录
在这里插入图片描述

9.3 测试主从是否完成

在这里插入图片描述
写在最后
上述博客单纯用于记录个人学习,方便日后复习使用,同时让自己养成写博客习惯,内容质量可能不是很高,希望对小白入门有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值