Redis学习15:集群-主从复制、哨兵模式、集群

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 高并发、高性能、高可用高可用的介绍:全年的时间-不可服用的时长除以全年时长的比例。业界的目标,五个9,99.999.就是全年宕机低于5.25分钟。

互联网的三高架构


高并发、高性能、高可用


高可用的介绍:全年的时间-不可服用的时长除以全年时长的比例。

业界的目标,五个9,99.999.就是全年宕机低于5.25分钟。

6acdab804c72ba33beebdd043ca5116c_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png


redis服务器是单点的,那么一点出问题就容易完蛋。

为了避免灾难性打击,所以可以建立集群,增加可用性

7ca9a1102651c89383fbe4baf24d87e3_b82325e039264bc0856aed8ddd2c2e0d.png

主从复制介绍

b518b3bd95dc968fa01f2307657ccb84_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

需要解决的问题:如何进行数据同步。


那么核心的主要工作就是:master复制到slave中。


这种形式就叫做主从复制。

3b9e6e0e3d1fd31284f1fb4c6a86d047_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_12,color_FFFFFF,t_70,g_se,x_16.png



高可用集群方案

要是主机出问题了,临时从从机找一个当master,来给其他的slave推数据。

如果master压力很大,也可以找一个slave追加下一级,也来当master。

master和slave是相对的概念。

主从复制的作用

读写分离:master写,slave读。提高读写的负载能力。

负载均衡:基于主从结构,配合读写分离。由slave分担master的负载,并且根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量。

故障恢复:当master出现问题,slave提供服务,实现快速故障恢复。

数据冗余:实现数据备份,是持久化之外的一种数据冗余方式

高可用基石:基于主从复制,建立哨兵模式与集群,实现Redis的高可用方案。

主从复制的工作流程

总述

第一步:slave连master

第二步:master同步数据给slave

第三步:反复同步数据

2256b461ba6bb0bcc6e89b25e6ed8039_f99b80b7b74a446f9cb7fb40e12e6563.png


最起码得由两台计算机用来做两个服务器,有一个主客户端,有一个从客户端。主要来做指令的发送与接收。

5c49ed6fcbcea03f948bf15539e04480_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_11,color_FFFFFF,t_70,g_se,x_16.png


工作流程第一阶段:建立连接阶段


a06d1772e3ef08d60b2d76c5b810b75b_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

e07bcbf31a11fe73e02ef88f6270eac5_355ea9ccb7b34852888e838e016902a1.png


保存slave的端口号是为了对slave进行监视。

同时发送指令那块进行授权可以不做,因为服务器很多是靠内网进行访问连接的。

c80f7dd95c07f0b55bdeb988875989fc_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png


正常的方式是走配置文件的。指定对应的连接信息。

5e327c65ec409e90d8f56c9644426fbf_a2dbdfbdb5cd43468fd35ff60f2148c3.png

5b641e2294156f9708018f33bcf2516f_7ac4192f4ab243689e0ee213070dd89d.png

注意断开肯定是从断开。从发出命令就可以了。

5f882a7c12849f8cd388482c9b55a1fd_8941aa4d32ec44bd8fac3a06af5d7167.png

5f5234be1e5d214db97a215e095066c3_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

工作流程第二阶段:数据同步阶段工作流程


注意master必须执行bgsave,不可以执行save。同时master会创建一个复制缓冲区用来接收其他写进来的数据。

步骤4的请求部分同步数据是把复制缓冲区的信息进行同步。

全量复制:是复制你发指令时候的全部数据。

部分复制:把全量复制过程中的复制缓冲区的指令进行同步。

为什么需要bgrewriteaof,因为很多指令可以进行化简的。

注意数据同步阶段只包括全量复制和部分复制!

第九步发送指令是第三部分的事情了!

5becd27ea087e9e1c6d117d89dfacdb3_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

88889351981c9d1551688beb473af406_ddf03f9839f443b4853d45b95441c9b6.png

0ff7163935fbda03dea47439194d9500_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

数据同步阶段的注意事项:

ec8f28d00046b54209bacc46b7b09ccc_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

3a8f0d0de3602bde850044b85bc54153_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png


主从复制第三阶段:命令传播阶段

93c0a1cd123fcc1f61df303a87f8c3d7_85cb6fdc381d49668de2cfc41ba174ee.png

52ee52ddacedd2c71dfaea1c559b5c40_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_10,color_FFFFFF,t_70,g_se,x_16.png

016a089fc74f759cdabf25447c055c32_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png


slave一定要保存master的id的。

3f8c62ed2ba5a66a08530540101cd73a_80c29218ccd34fc0bbfadb7395226a01.png

f460571ab67849d854a5b5903abd3031_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png


复制缓冲区内部工作原理

AOF协议

2face4b72a171d2fe5c336364ae3de1a_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

杠n和杠r是换行符和回车符

同时做了编号,用来识别做到哪了,识别位置的,也就是偏移量。同时下面的叫做字节值。

94ce1f98ef9871bbde07a39edbab09d6_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

8208350ba5031678309e94984308199d_ea9cecc06cc44205a4eafb84b2d5a34b.png

也就是说如果断网了,可以通过offset来弄。

slave和master都要记住offset。但是记住的东西可以有不同。

a5fc176502e7a266fda300249b9feada_33f8f7fbbc8345e389edc7c6c3ee0a4b.png


这样做的好处是,第二次发送的时候,如果对上的offset不一样,那么就可以重新进行获取。

e9525e2e5735bb56dfab455521916416_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

240078270060115a1b8a06c7fc90851b_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png

数据同步+命令传播阶段工作流程总结

注意事项:

第一次连的runid和offset都不知道,所以发一个?和-1,告诉master都要。

然后master就会准备这两个东西,告诉slave。

fullresync是全量同步的意思。

2ee74981219344bf6b4b677264bfa306_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


心跳机制

e902848ab15862fbe8c95964417117ba_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

72d6424d562a188410b9566ff664f20e_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png8860e10cf3fc8cd528d50edd746b41d1_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png



master也会反复发ping来看slave是否在线多少。

主从复制的常见问题

53bccef8a1b21a5f8c90449e8285abc3_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


128567e4a830b9d0baa0a07bab863b06_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

d5946cd0f6e87e756f8464d81d0c38cc_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

149ff567bbdc8b6446b7ed9a74455f79_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

7b4502cd9c1e847bd1b7237df4f03b55_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png


哨兵模式

6d5fc7dc47d929820e00a76983de55c8_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

6e8b84ced1a4e5d426ed94e14ffbf279_df2725d03d5f4c18aa7aa3fb02cfb028.png


哨兵的定义:

ebb2846c534a3a94c4041f624879f65e_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


哨兵的作用

da65741e4bf515a77c3a6b1cb22218db_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

cfec94b8645eaaa82226e635673584cd_9cd5ff17ea5c48f688d939bfc48d35f9.png


启用哨兵模式


1cd293973f04a16479268a1400f4dd7f_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_11,color_FFFFFF,t_70,g_se,x_16.png

系统模型如下:

14e303e69a880a3bbc4cdf86abd16754_313ed68d06084348b259692c3f8f5d1e.png

1cb23292dcc001eb1be4adc9009aa302_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_13,color_FFFFFF,t_70,g_se,x_16.png

sentinel.conf就是哨兵的配置文件

77e440438b573644a7e032f456125706_6ddc4e86616b4fd497b9eabb6d2edf9b.png

mymaster是自己定义的名字

2的意思是:如果有2个哨兵认为挂了那么就认为这个master挂了,通常设置的数目是哨兵一半+1

第二行的意思是:当多少秒没进行连接就认为他们是挂了

最后一行是多少秒认为同步超时。

be0a17e2d485628a4b20c0a70ff05a16_48c40f3606f54cbf87d271a9c52d5053.png

把这个文件复制一份进行配置。

哨兵搭建过程略过。。


哨兵工作原理第一阶段:监控阶段

63d3a0d760a01eeea9744fbe9e19e460_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

b81bbde93e5009815e8d159bb6d87226_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png


最开始第一个sentinel对master进行info获取信息,然后第二台sentinel获取信息,这个时候他们获取的信息是不一样的,因为第二台获取的信息中会知道master已经有sentinel连到了,但是第一台sentinel中不会有,所以sentinel之间也会进行连接,互相通信。同时也会互相ping一下。确认连接完好。

6548d759701d3bff2f73c5144134f1d3_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


哨兵工作原理第二阶段:通知阶段

59691cff07c9d9ece0cb8826a5467a55_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


sentinel1进行一个发指令hello确认连接及状态怎么样,然后收到的信息会跟2和3进行信息互通对等。

下一次可能是3或者是2都是不确定的。跟master和slave进行确认。

哨兵模式工作原理第三阶段:故障转移阶段

6ae4a5286d8eae8136afffe643519796_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


当sentinel1发现master连接不上的时候,然后标记这个master一个状态,s—down,然后他同时把这个消息传播到自己的朋友圈(内网),等到同网的其他哨兵收到这个信息,也去对这个master进行连接hello,发现也不行的时候,如果超过半数的人发现连接不上,那么状态就会改成o-down。

这个时候有主观下线、客观下线两个说法。就是超过半数认为挂了,就是客观下线。

017b6760944e4f5521ead748815187c5_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


一旦标记成客观下线,就开始下一个任务。

f8994fe9b6441c215f831d53ce22fc23_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


这里有个投票机制。

7933be5f8a1d0d608cad9d6ffe88c7f8_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

如果第一轮没有选出,那么精选次数+1.

同时被选出的sentinel来开始进行处理事务。

这个哨兵开始在slave中选出一个master。

24f428b35c5f29bd019880a0a3d131d8_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


pass掉回应慢的,然后选一个响应速度快的就可以了。

同时还会选一些与原master连接密切的,连接很多的。把时间远的踢掉。

34ce9d5c7707203176b62f6fece1be34_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

80235ede266c12e6c221416f5a8ee611_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


集群


业务发展中的问题

968f6aa3849b3841e45ada8224929212_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png

6d7b83e7512e15119776f2d5f9ec38d9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

cff140a014b2d352441cc442554989e2_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


集群的数据存储

一个key开始对应多个存储空间了。

通过一些算法设计来进行设计一个key存储在哪个空间。

5c8dcf2bc7dc33dc9ff36c130d58bc9f_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png90eea54b1d63eeefe20869dde0ea1194_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_16,color_FFFFFF,t_70,g_se,x_16.png



如果增加了一个机器增加了存储空间,那么就会把别的槽分一些给这个新的。减去也是一样的。

e65f56c50b14b9741a4d9457a911b9a7_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
24天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
38 5
|
2月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
157 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
1月前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
357 3
|
2月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
156 4
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
42 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
2月前
|
NoSQL Redis
redis学习五、错误总结,redis正常运行时后会出现一些bug 总结。
本文介绍了Redis在正常运行时可能遇到的一个错误,即无法进行磁盘持久化的问题,并提供了通过设置`stop-writes-on-bgsave-error`为`no`来解决这一问题的方案。
127 0
|
8天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
133 85