Redis

超值!分布式系统架构精讲篇:知识图谱+主流技术体系(专题集合资料附赠)

点点圈 提交于 2020-10-12 11:23:29
如果你期待对分布式系统有一个更全面的认识,想要了解各个技术在分布式系统中如何应用、分别解决哪些问题、有怎样优秀的实现,推荐阅读、收藏本篇。 前言 分布式系统涉及到的理论知识及技术点比较多,以致于很多童鞋都说,分布式系统的学习是入门容易、深入难,通过网络搜索到的知识点较为零散,难以系统化学习、融会贯通。本篇Mike将从以下几个方面分享,带着大家先窥探分布式的全貌,希望为大家厘清分布式学习之路的方向与具体路径。 以上专题资料及学习图谱,获取方式:添加下方小助手VX即可 本篇主题 分布式系统的概念 分布式系统的作用 分布式系统的特性 分布式系统主流技术 分布式系统专题合集及知识图谱 分布式系统的概念 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。有一种说法:分布式系统是若干独立计算机的组合共同对用户提供服务,但对于用户来说,这些计算机就像是单个相关系统。 布式系统的作用 分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。 分布式系统的特性 布式系统特性主要有透明性、可扩展性、可用性、可靠性、高性能、一致性等。这几个特性是分布式系统的主要衡量指标,开始分布式系统的学习,从了解分布式系统的特性开始。 1、透明性 分布式的特征之一是向用户隐藏系统的内部组织结构,各种计算机之间的差别

分布式缓存Redis的穿透和雪崩

核能气质少年 提交于 2020-10-12 08:36:52
缓存击穿 先了解一下缓存击穿, 大量的请求都集中请求在一个 key 上 ,一般体现在一个热点数据,例如双十一,秒杀等, 突然一下缓存失效了,所有的请求一瞬间就砸到了MySQL上面。持续的并发就穿破的缓存。总结一下,在某个key过期的瞬间,有大量的并发请求,一般都是热点数据,缓存过期。 解决方案 1、设置热点数据延长过期时间 从缓存层面来说,设置过期时间,就不会产生穿透问题。例如,一般秒杀时间1分钟,缓存可以考虑设置2分钟。 2、加互斥锁 分布式锁:只要加了锁,可以保证每个key,只有一个线程去查询后端的服务。只能够等待。 核心:转移压力,尽量服务不崩。 将数据库承受的压力转义到了分布式锁上面。 缓存穿透 出现大量请求,缓存都没有命中,所有的请求最终还是给了数据库持久层,这就是缓存穿透! 解决方案 : 当请求到数据库查出值的值不为空,将该(key,value)放到redis中 当请求到数据库查出值的值为空,将该(key,value)放到redis中,value为空,并设置过期时间。 Redis雪崩 什么是Redis雪崩 雪崩是基于数据库,所有原来应该到Redis的查询全到DB,并且是同时到达 缓存在同一时间大量的key过期 多个用户同时请求并到达数据,而且这个请求只有一个是有意义的,其他的都是重复无用功 Redis雪崩解决方案 缓存用不过期:这样会导致冰封 过期时间错开

Redis-Java项目应用(Jedis、SpringBoot整合、工具类模板)

拜拜、爱过 提交于 2020-10-12 03:46:41
文章目录 Jedis 导入依赖 测试 SpringBoot整合 导入依赖 配置连接 测试 序列化 工具类封装 Jedis Jedis 是Redis官方推荐的Java连接开发工具。 导入依赖 < dependency > < groupId > redis.clients </ groupId > < artifactId > jedis </ artifactId > < version > 3.3.0 </ version > </ dependency > 测试 记得先开启Redis服务 测试了下各API调用,和前两篇讲的命令基本一致,不再赘述。 package com . wzl ; import redis . clients . jedis . Jedis ; import redis . clients . jedis . Transaction ; public class Test { public static void main ( String [ ] args ) { //连接Redis Jedis jedis = new Jedis ( "127.0.0.1" , 6379 ) ; System . out . println ( jedis . ping ( ) ) ; //测试String jedis . set ( "s1" , "v1" ) ; /

2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)

北城以北 提交于 2020-10-12 03:44:22
线程池的参数 创建线程的方式 如何暂停线程,有几种方式 线程之间的通讯 线程中什么是原子性、什么是可见性、什么是有序性? Volatile是如何实现可见性的? AQS中共享锁有哪些?独占锁有哪些 synchronized 关键字有几种用法? synchronized 的缺点有哪些? 静态方法和非静态方法锁的对象分别是什么? 对象锁和类锁有什么区别? 什么是哨兵机制? jvm中堆是否存储了所有对象 哪些没有存入里面 堆中的有哪些区域,1.8和之前有什么区别 元空间和永久代有什么区别 创建一个对象一定会存入新生区吗? 哪些情况不会存入新生代, jvm的工作流程 luinx中文件的权限管理 ArrayList和链表的区别 hashmap和hashtable有什么区别 java中异常分为哪几种类? Error 、Runtime Exception 、Exception 分别是什么?他们之间的关系是什么? 你遇到过哪些异常? tcp的三次握手,为什么要三次,俩次不行吗? tcp三次握手中传递的参数有哪些? tcp和udp的区别? 数据库索引为什么查询快? 数据库索引有哪些数据结构? 主键索引和二级索引的区别? 回表是什么? 使用非主键索引查询会不会出现回表? MySQL中你知道有哪些存储引擎? InnoDB跟Myisam的区别? 什么是事务? 事务的四大特性? 哪些存储引擎支持事务?

阿里资深架构师纯手敲Java中高进阶架构师笔记(近千页开源)

亡梦爱人 提交于 2020-10-12 01:45:20
Java作为目前最受欢迎的语言,每年都会有很多转行、跨行等等的人加入到开发大军中来,但是Java开发也是会遇到瓶颈的,当我们遇到瓶颈的时候就会去寻求发展突破,尤其是从Java开发高级工程师向架构师迈进的时候,需要大量的实战经验和知识的积累,而循着前人的脚步去学习就会起到一个事半功倍的效果! 今天就来分享一份由阿里资深架构师纯手敲出来的Java中高级笔记,非常适合想或者正在向架构师方向发展的朋友们! 由于这份学习手册近1000页,目录就有几十页,没办法为大家详尽的展示,所以只能为大家展示部分内容,供大家看看有没有需求,如若需要免费获取方式我放在了文末,自行领取即可! 一、Java (一).基础 1. Java基本功 2. Java面向对象 3. Java核心技术 (二).容器 1. ArrayList 2. LinkedList 3. HashMap (3).并发 1.并发容器 2.线程池 3.乐观锁与悲观锁 4. Atomic 5. AQS (四). JVM 1. Java内存区域 2. JVM垃圾回收 3. JDK监控和故障处理工具 4.类文件结构! 5.类加载过程 6.类加载器 二、 网络 (一).计算机网络知识 1.计算机概述 2.物理层 3.数据链路层 4.网络层 5.运输层 6.应用层 (二). HTTPS中的TLS 1. SSL与TLS 2

如何正确、高效地阅读源代码?

二次信任 提交于 2020-10-11 18:06:08
十一假期抽空看了看 Kafka 源码,顺便总结了一些高效读源码的方法,用一句话概括:用最高效的方式,读最核心的源码。 先说说怎样才算是高效的方式吧,通常来说,阅读大型项目源码的方法有 2 种: 自上而下(Top-Down) :从 main 函数向下深入,直到最底层的代码。好处在于,你可以遍历完整的顶层功能路径,进而了解各个功能的整体流程。 自下而上(Bottom-Up) :与自上而下相反,先搞懂每个组件的代码和实现机制,然后向上延展,并将其组装,有助于你掌握底层的基础组件代码。 这 2 种方法各有千秋,但我发现,两者相结合可以实现 1+1>2 的效果,具体怎么做呢? 首先, 确认最小单位的组件 ——主要看 Kafka 源码中的包结构,比如 controller、log、server 等,这些基本是按组件划分的,优先级顺序是“log-->network-->controller-->server-->coordinator-->……”,因为后面的组件会频繁调用前面的。 在了解单个组件的源码结构后,就可以 切换成自上而下的方式 ,从一个大的功能点入手,逐步深入到各个底层组件的源码。得益于前面的积累,你会对下沉过程中碰到的各层基础代码非常熟悉,成就感很大。 关于如何选择大的功能点 ,可以从 Kafka 的命令行工具开始,搞明白每一步是如何实现的,在向下钻取的过程中不断复习单个组件的原理

这些Java面试题,竟然90%的公司都会问到!

谁说我不能喝 提交于 2020-10-11 09:22:05
前言: 马上就快到金九银十了,这可是程序员们跳槽,升值,涨薪,走上人生顶峰的好时刻,对于这个可能是你人生的重要转折点之一,相信现在就有好多朋友在为这个黄金时段做好准备了,错过了金三银四,可不能错过金九银十呀。 再加上今年多灾多难的一年,相信今年的黄金期肯定会有大爆发。所以在这为大家精心准备了常问的面试题,祝大家一路过关斩将,成功拿到offer。 由于时间原因答案我就不写了,需要答案的可以点击下方群号自行领取。另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,我认为对面试来说是非常有用的,想要资料的话请点 795983544 暗号CSDN。 本套Java面试题大全总共分为以下几块: 基础面试题 IO类 算法类 多线程相关 数据库相关(mysql) mq nosql相关(主要是redis) zookeeper linux相关 设计与思想 一. 基础面试题: 1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet); 2)HashMap的底层实现,之后会问ConcurrentHashMap的底层实现; 3)如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现; 4)HashTable和ConcurrentHashMap的区别; 5

1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》

给你一囗甜甜゛ 提交于 2020-10-11 00:29:15
文章目录 声明 1.3 了解Spring MVC 1.4 了解Redis 1.5 Spring、Spring MVC、MyBatis的分工合作 声明 专栏链接: https://chenhx.blog.csdn.net/category_10263372.html 作者:谙忆 1.3 了解Spring MVC Spring MVC是属于表现层的框架,是属于Spring框架Web Flow模块的一部分。 Spring MVC是一个模型-视图-控制(MVC)框架,实现了Model-View-Controller模式,将数据、业务和展示之间进行了分离,这种分离使我们的开发更容易定制。 Spring MVC中模型-视图-控制说明: 模型:模型一般封装数据,通常由基本的Java对象(POJO)组成 视图:主要用来呈现数据模型,通常是生成浏览器可以解析的HTML输出,用户可以浏览查看 控制:也就是控制器,用来处理用户的请求,通过请求构建合适的模型将其传递到视图进行呈现给用户浏览 图1-5 Spring MVC请求流程图 Spring MVC相关流程说明: DispatcherServlet接口,Spring提供的前端控制器,所有的请求都需要它来进行分发给对应的Handler(根据不同请求信息,比如说Url来进行分发)。在前端控制器将请求分发给Controller之前

一篇短文带您了解一下EasyCaching

廉价感情. 提交于 2020-10-10 23:56:41
前言 从2017年11月11号在Github创建 EasyCaching 这个仓库,到现在也已经将近一年半的时间了,基本都是在下班之后和假期在完善这个项目。 由于EasyCaching目前只有英文的 文档 托管在Read the Docs上面,当初选的MkDocs现在还不支持多语言,所以这个中文的要等它支持之后才会有计划。 之前在群里有看到过有人说没找到EasyCaching的相关介绍,这也是为什么要写这篇博客的原因。 下面就先简单介绍一下EasyCaching。 什么是EasyCaching EasyCaching,这个名字就很大程度上解释了它是做什么的,easy和caching放在一起,其最终的目的就是为了让我们大家在操作缓存的时候更加的方便。 它的发展大概经历了这几个比较重要的时间节点: 18年3月,在茶叔的帮助下进入了NCC 19年1月,镇汐大大提了很多改进意见 19年3月,NopCommerce引入EasyCaching (可以看这个 commit记录 ) 19年4月,列入 awesome-dotnet-core (自己提pr过去的,有点小自恋。。) 在EasyCaching出来之前,大部分人应该会对 CacheManager 比较熟悉,因为两者的定位和功能都差不多,所以偶尔会听到有朋友拿这两个去对比。 为了大家可以更好的进行对比

BeetleX之TCP消息通讯Protobuf/TLS

我是研究僧i 提交于 2020-10-10 22:47:01
在网络通讯应用中直接操作数据流是比较繁琐的事情,毕竟在业务层面处理的都是对象化消息;为了让网络数据操作变得更友好直观,一般都会引用序列化组件来处理网络流和对象之前的转换工作;在这里介绍组件如何使能Protobuf进行数据交互通讯。 协议定义 组件使用对象处理就不同之前HelloWorld示例一样简单操作流就可以,在这里需要进一步封装一个简单的应用协议。 |-----------------------------------------------------------------| |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7 | |----------------------------------------------------------------| |Probobuf数据流长度,占4字节 | |----------------------------------------------------------------| |Protobuf数据流 | |----------------------------------------------------------------| 以上是一个简单的应用协议,消息头4字节描述消息的长度