Redis应用
1.热点数据的缓存: 减少对数据库的访问频率,提供的应用程序的效率。
2.限时业务的运用: 比如短信验证码。
3.计数器相关问题: 比如:点赞 关注数
4.排行榜相关问题: 比如: 销售量 观看量
5.分布式锁: 比如: syn自动锁 和 lock 手动锁
redis持久化理解:其就是将内存中的数据保存在磁盘的过程,作为持久化,更快捷读取数据,为减轻数据库的缓存压力,防止数据的丢失
redis持久化有两种方式:
1.RDB快照模式 【注:RDB快照模式是根据多长时间进行拍照储存,没拍照一次,新的数据将覆盖老的数据】
2.AOF日志追加模式 【注:把每个写命令通过write函数进行追加到日志中】
2.1 RDB快照模式
【注:每个一段时间对redis内存中的数据进行拍照存储。它是redis默认的持久化方式】
【注:优点是数据恢复快】
【注:缺点是可能会出现丢失最后一段时间的数据--数据完整性比较差】
RDB快照模式有两种触发模式:
2.1.1 通过save/bgsave进行手动触发
首先观察:我们进入到redis解压目录中找到dump.rdb文件
【注:我的redis软件放在/usr/local/app 下,你们的进入你们的饿redis下即可】
现在我们手动删除这个文件
rm -rf dump.rdb
删除后,我们连接redis
redis-cli
在这其中,我随便向其中存储了一个set集合类型的元素
这时,我们手动触发RDB快照模式
返回查看redis解压目录中:
又出现了,说明RDB手动触发成功
--------------------------------------------------------------------------------------------------------------------------------
【注:这里只演示save命令,因为bgsave一样,都是手动触发RDB的命令,只是优缺点不同】
save命令:该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave命令:执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
-----------------------------------------------------------------------------------------------------------------------------------------
2.1.2 自动触发模式
【注:其是在一定时间内被执行多少次数后自动触发】
【注:其是通过修改配置文件产生效果,但是底层原理使用的还是bgsave】
【注:只需要将注释解开即可,其中,参数已经被官方所定义好,如需必要不需要改动】
这里只做演示使用。为方便,我们将其改成save 10 3
其意义为在10秒触发3次及以上,触发RDB模式
2.2 AOF持久化
【注:把每个写命令通过write函数追加到日志文件中。当redis启动时会读取日志文件中的命令,并把这些命令由上到下执行一遍】
【注:优点:数据的完整性】
【注:缺点:数据恢复慢】
【注:AOF默认不开启,需要到redis.conf文件中修改配置启动AOF模式】
进入我们的/usr/local/app/redis7 下直接打开redis.conf文件
修改:
# 需要改为yes 开启aof模式 配置文件1387行
appendonly yes
# 默认aof的日志文件名为appendonly.aof 配置文件1414行
appendfilename "appendonly.aof"
# 默认aof文件存放的目录名 配置文件1420行
appenddirname "appendonlydir"
# 触发的机制。always一直触发 everysec:每秒触发 no:如果开启aof那么就不能设置为no 配置文件1445 - 1447行
appendfsync always
#appendfsync everysec
# appendfsync no
【注:修改配置文件后一定要保存,保存后一定要重启redis】
只能先杀掉redis进程在重启以达到重启的目的
pkill -9 redis
redis-server redis-conf
再次进入到redis解压目录中,发现有一个appendonlydir的目录
进入其中找到
打开此文件,发现一片空白
这时我们连接redis,在其中随便存储set集合类型的元素,再次打开此文件发现
AOF触发成功,将数据追加到日志中,以便数据的持久性
【注:AOF只有在写的情况下触发,只有在往其中存储的时候会触发】
集群模式有三种不同的表现形式:
1.主从模式
2.哨兵模式
3.集群分片模式
3.1 主从模式
【注:如果多个客户操作redis,进而导致redis承受到极限宕机,为了避免不必要的损失,首次出现的主从模式】
准备:
【注:需要准备至少三台redis服务器,虚拟机也行,一台为主节点,两台为从节点】
【注:最核心的一句话叫:配从不配主】【注:意为每增加一台redis服务器只需要将此服务器加入到主节点即可】
这里已经准备好了三台服务器用来演示:
首先需要查看这三台redis服务器当前的角色身份
命令
info replication #查看当前redis服务器的角色身份
现在,我以ip为111.173.104.101这台服务器为主redis服务器,另外两台为从redis服务器
在另外两台从redis服务器分别输入
slaveof ip port #配置主从,这里ip需要的是主redis服务器的ip,端口是主redis服务器的端口
配置完后,再次输入info replication命令查看各自角色
发现,主服务中含有两个从服务节点,这时我们随便存入一个set的集合类型的元素数据
在从节点服务器中发现,数据可以共享。
【注:主从服务器中,数据共享】
【注:从服务器中只能读,不能写】
【注:主节点增加一些数据后,数据会同步到从服务器中】
【注:新增一个从节点,那么该从节点是可以把主节点之前的数据同步过来】
【注:当主节点宕机后,从节点不可以上位】
3.2 哨兵模式
【注:
】
准备一台哨兵服务
在redis解压目录中:
发现有这个文件,为哨兵配置文件,启动哨兵将从此开始
打开此文件,我们将进行哨兵配置:
#配置哨兵,监控 哨兵集群的名称 监控主节点的ip 主节点的端口 获取哨兵的票数
sentinel monitor mymaster 192.168.235.135 6379 1 #配置文件中的第93行
启动哨兵
redis-sentinel sentinel.conf
启动成功
这个时候继续查看当前服务器的角色:
【注:哨兵模式是在主Redis服务器中设置】
这时我们手动关闭主节点服务器来模拟服务器宕机的情况
SHUTDOWN #停止redis连接
主节点关闭后,发现哨兵监控立即有了反应
其会在从节点中进行投票,当选票数最多的从节点会被选为主节点代替
【注:当之前宕机的主节点恢复后,并不会恢复主节点的身份,而是变成从节点连接着现推选的主节点】
3.3 集群分片模式
【注:分片集群它是解决我们上面哨兵模式存在的问题。他们只有一个主节点,如果写操作频率过高,那么就会导致主节点宕机问题】
那么,如果客户端向其中写入数据,数据到底会写入到哪个主节点;
【注:其使用了分槽技术。默认集群槽的数量为16384个。而每个槽可以存放若干个数据。如果搭建redis集群模式的化,为主节点平均分片这些槽】
扩展知识:
分槽原理:Redis 集群中内置了 16384 个哈希槽,当向其中写入key 时,Redis会对这个key进行crc16算法计算,算出的结果对16384求余数,这样每个key都会对应分槽之中,对key计算取余的结果会自动分配到对应的槽中
现在我们搭建Redis分片集群:#############################
需准备6台Redis服务器
三主三从(三台作为主节点,三台作为从节点)
为方便,这里就使用一台服务器模拟6台redis服务器【192.168.235.135 7001 7002 7003 7004 7005 7006】
进入到我们的Redis解压目录中,我的是在/usr/local/app/redis7 中
在其中创建一个目录,用于模拟放6台redis服务器的配置文件
进入创建好的目录中,从解压目录中先复制一份redis.conf进cluster_redis目录中,且将其命名为redis7001.conf
打开文件进入修改配置:
1. 修改端口号: port 7001 【关键字port,138行】
2. 修改rdb文件的名称:dbfilename dump7001.rdb 【关键字dump,487行】
3. 必须开启aof模式并修改aof文件的名称:
appendonly yes 【1387行】
appendfilename "appendonly7001.aof" 【1414行】
4. 开启redis集群模式cluster-enabled yes 【1584行】
5. 修改集群文件名 cluster-config-file nodes-7001.conf【1592行】
6. 设置允许任意ip访问。bind * -::*
剩下的五个文件依次修改即可(其实剩下五个文件只需要改端口号就可)
改好后依次启动这些服务
为上面6台redis服务器分配分槽#######################
redis-cli --cluster create --cluster-replicas 1 192.168.235.135:7001 192.168.235.135:7002 192.168.235.135:7003 192.168.235.135:7004 192.168.235.135:7005 192.168.235.135:7006
【注:这里意为:为下面的这些ip分配分槽,每一个主节点跟随一个从节点;刚好三主三从】
回车会问你是否分配,确认分配
出现两个绿色的ok即表示分配成功,配置成功
启动redis客户端:
redis-cli -c -h 192.168.235.135 -p 7001
我这里在这其中存入一个set集合类型的元素
【注:经过crc16算法计算会自动分配到分槽中,并且会自动跳到所对应的分槽】
Redis集群配置成功!!!
以上便是Redis应用中的内容,如有漏缺请在下方留言告知,我会及时补充