Redis

面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」

拟墨画扇 提交于 2020-11-10 05:37:10
这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制、剪辑、做 PPT、写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值。 1 面试题 Redis 是如何实现高可用的?它的实现方式有哪些? 2 涉及问题 什么是高可用? Redis 中高可用的实现方式有哪些? 各种实现方式的优缺点有哪些? 3 视频 视频内容如下: 4 答案 高可用是指通过设计减少程序不能提供服务的时间叫做高可用。 Redis 实现高可用的方式有四种: 持久化 主从同步(主从复制) Redis Sentinel Redis Cluster 1)持久化 持久化有三种方式: RDB(Redis DataBase)全量复制 AOF(Append Only File)增量复制 混合持久化(支持版本 Redis 4.0+) 持久化让 Redis 的数据不再丢失,当某个节点奔溃时,可以很快的重新启动或重新搭建一个 Redis 服务器端,加载持久化文件即可恢复 Redis 的正常运行,为 Redis 奔溃恢复节省了宝贵的时间。 更多介绍详见视频部分。 2)主从同步 提供的功能是从单机 Redis 变成多机 Redis。 提供两种模式:主从模式和从从模式。 主从模式, 如下图所示 : 从 从模式,如下图所示: 当主节点出现问题

阿里高级面试题 2019

馋奶兔 提交于 2020-11-10 05:35:20
阿里内推Java一面题目 数据库 1. 使用mysql索引都有哪些原则??索引什么数据结构??B+tree 和 B tree 什么区别?? 1、 对于查询频率高的字段创建索引; 2、 对排序、分组、联合查询频率高的字段创建索引; 3、 索引的数目不宜太多 原因:a、每创建一个索引都会占用相应的物理控件;    b、过多的索引会导致insert、update、delete语句的执行效率降低; 4、若在实际中,需要将多个列设置索引时,可以采用多列索引 如:某个表(假设表名为Student),存在多个字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要对StudentNo,StudentName字段进行查询,对Sex字段进行分组,对BirthDate字段进行排序,此时可以创建多列索引 index index_name (StudentNo, StudentName, Sex, BirthDate); #index_name为索引名 在上面的语句中只创建了一个索引,但是对4个字段都赋予了索引的功能。 创建多列索引,需要遵循BTree类型, 即第一列使用时,才启用索引。 在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。 如: select * from Student where

redis集群之哨兵模式

淺唱寂寞╮ 提交于 2020-11-10 03:08:37
redis集群之哨兵模式 1、集群部署 安装配置可参考一下地址: https://www.cnblogs.com/zhoujinyi/p/5569462.html 2、与springboot集成 这里哨兵模式暂时只提供了故障自动转移等,暂时不提供负载均衡功能,自动提供了故障转移和主从复制功能 配置 spring.redis.database=0 spring.redis.password=123456 # pool settings ...池配置 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 #哨兵监听redis server名称 spring.redis.sentinel.master=mymaster #哨兵的配置列表 spring.redis.sentinel.nodes=192.168.12.194:26379,192.168.12.194:36379,192.168.12.194:4637 调用封装 [@Component](https://my.oschina.net/u/3907912) public class RedisComponent { @Autowired /

Spring系列.@EnableRedisHttpSession原理简析

自闭症网瘾萝莉.ら 提交于 2020-11-10 01:54:04
在集群系统中,经常会需要将Session进行共享。不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重新登陆。此时用户会很疑惑,自己明明登陆过了,为什么还要自己重新登陆。 什么是Session 这边再普及下Session的概念:Session是服务器端的一个key-value的数据结构,经常被用户和cookie配合,保持用户的登陆回话。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。 分布式Session的解决方案 使用cookie来完成(很明显这种不安全的操作并不可靠) 使用Nginx中的ip绑定策略,同一个ip只能在指定的同一个机器访问(不支持负载均衡) 利用数据库同步session(效率不高) 使用tomcat内置的session同步(同步可能会产生延迟) 使用token代替session 我们使用spring-session以及集成好的解决方案,存放在Redis中 最后一种方案是本文要介绍的重点。 Spring Session使用方式 添加依赖

基于redis-cluster搭建redis高可用集群

穿精又带淫゛_ 提交于 2020-11-10 01:53:24
本次,我们以6台redis实例搭建3个master和3个slave组成的集群。 第一步, 在/usr/local/redis/目录下创建一个名叫cluster的文件夹 cd /usr/local/redis mkdir cluster 然后在cluster下面创建7001-7006为名字的6个文件夹 mkdir 7001 第二步,在6个文件夹下分别建一个redis.conf文件 vi redis.conf ##端口 port 7001 ##开启集群模式 cluster-enabled yes ##生成集群的配置文件 cluster-config-file nodes.conf ##实例间通信的超时时间 cluster-node-timeout 5000 ##开启AOF持久化,会创建一个appendonly.aof的持久化文件 appendonly yes ##redis后台启动 daemonize yes #bind 0.0.0.0 ##关闭保护模式,允许外部访问 protected-mode no 每一个redis.conf的端口分别为7001-7006 第三步,把redis-server和redis-cli两个脚本复制到7001-7006文件加下面 第四步,分别进入6个文件夹,启动redis实例 ./redis-server ./redis.conf 第五步

2020-11-09:谈谈布隆过滤器和布谷鸟过滤器的相同点和不同点?

与世无争的帅哥 提交于 2020-11-10 01:40:21
福哥答案2020-11-09: 相同点: 都是过滤器。 不同点: 算法:布隆过滤器多个hash函数。布谷鸟过滤器用布谷鸟哈希算法。 能否删除:布隆过滤器无法删除元素。布谷鸟过滤器可以删除元素,有误删可能。 空间是否2的指数:布隆过滤器不需要2的指数。布谷鸟过滤器必须是2的指数。 空间利用率:相同误判下,布谷鸟空间节省40%多。 查询性能:布隆过滤器查询性能弱,原因是使用了多个hash函数,内存跨度大,缓存行命中率低。布谷鸟过滤器访问内存次数低,效率相对高。 哈希相关:布隆过滤器的多个函数函数之间没关系。布谷鸟过滤器的两个哈希函数可互相推导,两者有关系,用到了【空间是2的指数】和【按位与】。 重复插入相同元素:布隆过滤器天然自带重复过滤。布谷鸟过滤器会发生挤兑循环问题。 Redis布隆Bloom过滤器 布隆过滤器过时了,未来属于布谷鸟过滤器? 【Redis 第七篇】面试加分项:缓存穿透,布隆过滤器-计数过滤器-布谷鸟过滤器(好文005) 来源: oschina 链接: https://my.oschina.net/u/4553401/blog/4710341

大数据技术之_31_Java 面试题_01_JavaSE 面试题 + SSM 面试题 + Java 高级面试题 + Java 项目面试题

好久不见. 提交于 2020-11-09 22:00:11
第1章 JavaSE 面试题 1、自增变量 2、编程题:写一个 Singleton 示例 3、类初始化和实例初始化 4、方法的参数传递机制 5、递归与迭代 6、成员变量与局部变量 第2章 SSM 面试题 1、Spring Bean 的作用域之间有什么区别? 2、Spring 支持的常用数据库事务传播属性和事务隔离级别 3、SpringMVC 中如何解决 POST 请求中文乱码问题 4、SpringMVC 中如何解决 GET 请求中文乱码问题 5、简单的谈一下 SpringMVC 的工作流程 6、MyBatis 中当实体类中的属性名和数据库表中的字段名不一样怎么办? 第3章 Java 高级面试题 1、Linux 常用服务类相关命令 2、git 分支相关命令和实际应用 3、redis 持久化 4、Mysql 什么时候建索引 5、JVM 垃圾回收机制 第5章 Java 项目面试题 1、redis 在项目中的使用场景 2、Elasticsearch 与 solr 的区别 3、单点登录实现过程 4、购物车实现过程 5、消息队列在项目中的使用 第1章 JavaSE 面试题 1、自增变量 public static void main (String[] args) { int i = 1 ; i = i++; // i=1 int j = i++; // j=1 i=2 int k = i +

Redis Cluster搭建高可用Redis服务器集群

混江龙づ霸主 提交于 2020-11-09 20:30:43
一、Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节点,当遇到单机内存、并发等瓶颈时,可以采用分布式方案要解决问题。 二、集群原理 Redis Cluster架构图 Redis Cluster集群采用了P2P的模式,完全去中心化,Redis把所有的Key分成了16384个slot,每个Redis实例负责其中一部分slot,集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新,Redis客户端可以在任意一个Redis实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。 其结构特点: 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 节点的fail是通过集群中超过半数的节点检测失效时才生效。 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。 redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster负责维护node<->slot<->value。 Redis集群预分好16384个桶,当需要在Redis集群中放置一个key

一款基于.NET Core的认证授权解决方案-葫芦藤1.0开源啦

左心房为你撑大大i 提交于 2020-11-09 17:11:52
背景 18年公司准备在技术上进行转型,而公司技术团队是互相独立的,新技术的推动阻力很大。我们需要找到一个切入点。公司的项目很多,而各个系统之间又不互通,导致每套系统都有一套登录体系,给员工和客户都带来极大的不便。那么从登录切入进去无疑最合适,对于各个团队的技术改造成本也不大。所以我们团队第一个项目就是搭建一套统一登录认证授权系统,那么葫芦藤项目应运而生。 技术方案 后端框架:.NET Core3.1(后期会推出 .NET 5版本) 前端框架:React 数据库:mysql(可根据实际情况,自由切换) 中间件:redis 详细功能 认证授权服务 基于IdentityServer4实现的协议,支持网站、本地应用、移动端、web服务等应用的认证授权逻辑。 单点登录登出 支持各种类型应用上的单点登录登出。开箱即用的基础用户管理模块,包括:注册、登录、手机验证码、忘记密码等。为了安全考虑,集成了腾讯图形验证码。 第三方登录(微信、钉钉) 完善的第三方登录支持。支持首次登录时绑定已存在用户或注册新用户后,自动绑定。 如何快速使用 1.下载代码 clone代码到本地。根目录结构如下: 其中,backend存放的是后端代码,frontend存放的是前端代码。 进入backend目录,使用Visual Studio打开解决方案。目录结构如下: 2.生成数据库 首先在Fulu.Passport