Redis

Redis 企业级解决方案(缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控)

戏子无情 提交于 2020-08-12 00:53:31
目录 一、缓存预热 二、缓存雪崩 三、缓存击穿 四、缓存穿透 五、性能指标监控 一、缓存预热 缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓 存的问题!用户直接查询事先被预热的缓存数据! 宕机 :服务器启动后迅速宕机 问题排查: 1. 请求数量较高 2. 主从之间数据吞吐量较大,数据同步操作频度较高 解决方案: 前置准备工作: 1. 日常例行统计数据访问记录,统计访问频度较高的热点数据 2. 利用LRU数据删除策略,构建数据留存队列 例如:storm与kafka配合 准备工作: 1. 将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据 2. 利用分布式多服务器同时进行数据读取,提速数据加载过程 3. 热点数据主从同时预热 实施: 1. 使用脚本程序固定触发数据预热过程 2. 如果条件允许,使用了CDN(内容分发网络),效果会更好 二、缓存雪崩 缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。如能够有效避免过期时间集中,可以有效解决雪崩现象的出现 (约40%),配合其他策略一起使用,并监控服务器的运行数据,根据运行记录做快速调整。 现象:数据库服务器崩溃(1) 1. 系统平稳运行过程中,忽然数据库连接量激增 2. 应用服务器无法及时处理请求 3. 大量408,500错误页面出现 4.

超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!

时光毁灭记忆、已成空白 提交于 2020-08-12 00:52:46
最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。 所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。 先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。 本文所述的方法不一定适合所有人,如有错误敬请谅解。 Java工程师学习指南 入门篇 文中提到我的技术博客专栏 https://github.com/h2pl/Java-Tutorial 【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,如果对你有帮助,给个star告诉我吧,谢谢! 前期准备工作 开发环境搭建 这一步我们往往会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你需要一台电脑,然后安装好JDK和JRE

Redis学习笔记(三)--Key设置过期时间

£可爱£侵袭症+ 提交于 2020-08-12 00:39:38
Redis学习笔记(三)--Key设置过期时间 通过EXPIRE命令进行设置 EXPIRE key seconds 设置key的过期时间,超过时间后,将会自动删除该key。在Redis的术语中一个key的相关超时是不确定的。 超时后只有对key执行DEL命令或者SET命令或者GETSET时才会清除。 这意味着,从概念上讲所有改变key的值的操作都会使他清除。 例如,INCR递增key的值,执行LPUSH操作,或者用HSET改变hash的field所有这些操作都会触发删除动作。 使用PERSIST命令可以清除超时,使其变成一个永久的key。 如果key被RENAME命令修改,相关的超时时间会转移到新key上面。 如果key被RENAME命令修改,比如原来就存在Key_A,然后调用RENAME Key_B Key_A命令,这时不管原来Key_A是永久的还是设置为超时的,都会由Key_B的有效期状态覆盖。 刷新过期时间 对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session。 来源: oschina 链接: https://my.oschina.net/u/2447587/blog/4387378

4年Java程序员十面阿里终拿下offer,评级P6+年薪30-40w无股票

荒凉一梦 提交于 2020-08-12 00:38:21
前言 每个程序员都有一个大厂的梦,而互联网大厂首当其冲自然是阿里巴巴最吃香,今天小编就来分享一个小伙进阿里巴巴的面经! “不想进大厂的程序员不是好程序员”哈哈哈 春节过后,本是金三银四之际,大部分人也都准备好了这在两个月里谋得一份自己心仪的工作,奈何今年的2020有些特殊,肺炎肆虐,对我们的工作和生活都造成了极大的影响。那么,是不是这样,我们就不工作,不学习了呢?实际上,正是因为现在正值传染病毒传播期间,所以我们宅在家里好好学习是再好不过的。对于Java程序员来说,利用这两三个月的时间,好好学习,着手准备起来,等到疫情好转,开始面试时,也不至于胆怯。 本人也是准备了大半年,最终如愿以偿拿到阿里offer! 个人情况 我是一个普通的双非本科生,开发4年多(Java后端),平时学习也比较勤学好问,对待工作也极度认真负责,对自己进入大厂工作还是很有信心的,我的方向是Java,也知道现在Java的竞争比较激烈,大厂比较难进,但我丝毫不胆怯。为此也在半年前就开始筹备了,今年初在一位大佬的内推下加上自己对知识点的复习和努力也如愿以偿的成功拿到阿里的offer! 面试总结 虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面。面试开始会让自我介绍,主要业务架构和技术架构两部分。业务架构一般不会深究,但要面试官听明白

RabbitMQ 消费端限流、TTL、死信队列

元气小坏坏 提交于 2020-08-12 00:17:43
   消费端限流    1. 为什么要对消费端限流   假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据!   当数据量特别大的时候,我们对生产端限流肯定是不科学的,因为有时候并发量就是特别大,有时候并发量又特别少,我们无法约束生产端,这是用户的行为。所以我们应该对消费端限流,用于保持消费端的稳定,当消息数量激增的时候很有可能造成资源耗尽,以及影响服务的性能,导致系统的卡顿甚至直接崩溃。    2.限流的 api 讲解   RabbitMQ 提供了一种 qos (服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于 consume 或者 channel 设置 Qos 的值)未被确认前,不进行消费新的消息。    /** * Request specific "quality of service" settings. * These settings impose limits on the amount of data the server * will deliver to consumers before requiring acknowledgements. * Thus they provide a

2020Java面试题及答案,刷这些题,准没错!

十年热恋 提交于 2020-08-12 00:10:35
Java基础 1.JDK JRE 2. Java异常了解吗?说说平时遇到的异常?说出6种常见的java异常。写程序遇到过哪些异常 运行时异常有哪些 3. 面向对象 面对对象的几大特性 多态怎么理解 4. 修饰符:public;protect;default;private优先级 5. 对string类的理解。stringbuffer 和 stringbuilder 6. 反射机制介绍一下 7. bio,nio,aio分别介绍一下,nio的实现方式 8. 问了public等变量定义修饰词的时间域 9. 问了反射机制,还有问了动态代理的好处和坏处,好处答不上来 10. 接口和抽象类的区别。 11. 有一个public static final的HashMap,里边对象的属性能不能修改? 12. 为什么java 平台无关性 机器码和字节码区别 JVM加载代码的一个流程 13. java数据类型以及自己的应用 自动拆箱和自动装箱以及自己的应用即什么时候用到的,列举几种情况 14. 什么是值传递和引用传递,区别及应用 15. 重载和重写 16. static方法是否能重写,接口和抽象类的区别 17. 你觉得java是一种什么样的语言以及java特性 18. lamda表达式了解吗?1.8新特性有什么?(面试宝典对接口抽象这个问题是错的,过时了) 19. 内存泄露怎么造成的,怎么排查 20.

Elastic Stack

我们两清 提交于 2020-08-11 23:52:14
Logstash https://www.elastic.co/cn/logstash 集中、转换和存储数据 Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 Logstash is an open source data collection engine with real-time pipelining capabilities. Logstash can dynamically unify data from disparate sources and normalize the data into destinations of your choice. Cleanse and democratize all your data for diverse advanced downstream analytics and visualization use cases. How Logstash Works https://www.elastic.co/guide/en/logstash/current/pipeline.html#pipeline The Logstash event processing pipeline has three stages: inputs → filters

python多种读写excel等数据文件的方式(收藏篇)

无人久伴 提交于 2020-08-11 23:44:40
前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv、txt、json等)、excel文件、数据库文件、api等其他数据文件。下面小编整理下python到底有哪些方式可以读写数据文件。 1. read、readline、readlines read() :一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长 readline() :每次读取一行内容。内存不够时使用,一般不太用 readlines() :一次性读取整个文件内容,并按行返回到list,方便我们遍历 2. 内置模块csv python内置了csv模块用于读写csv文件,csv是一种逗号分隔符文件,是数据科学中最常见的数据存储格式之一。csv模块能轻松完成各种体量数据的读写操作,当然大数据量需要代码层面的优化。 csv模块读取文件: # 读取csv文件 import csv with open('test.csv','r') as myFile: lines=csv.reader(myFile) for line in lines: print (line) csv模块写入文件: import csv with open('test.csv','w+') as myFile: myWriter=csv.writer(myFile) #

redis入门指南(四)—— redis如何节省空间

安稳与你 提交于 2020-08-11 23:05:47
写在前面   学习《redis入门指南》笔记,结合实践,只记录重要,明确,属于新知的相关内容。 节省空间   1、redis对于它所支持的五种数据类型,每种都提供了两种及以上的编码方式去存储(具体对应的编码方式可以百度)。因为基于内存的缘故,所以为了平衡时间与空间的使用效率在元素数量较多或较少时采用不同的策略,当然对于使用者这是透明的。   2、查看redis键值的内部编码方式      OBJECT ENCODING key   3、对于每一个键,都会有一个结构去存储它的数据类型,编码格式,数据地址等信息。 1 typedef struct redisObject 2 { 3 unsigned type: 4 ; // 这种语法叫做位字段 4 unsigned notused: 2 ; 5 unsigned encoding: 4 ; 6 unsigned lru: 22 ; 7 int refcount; 8 void * ptr; 9 }    4、对于 字符串 类型(示意结构如下),键值可以用一个64位整数表示时,就会使用数据指针表示数据内容( REDIS_ENCODING_INT 编码方式),以节省空间;redis3.0引入了 REDIS_ENCODING_EMBSTR 编码方式,在键值长度小于39时,字符串本身就会跟在redisObject结构之后,减少申请释放内存次数

springboot1.5.9升级springboot2.0.5

大兔子大兔子 提交于 2020-08-11 22:17:16
占坑 springboot1.5.9升级springboot2.0.5 此升级只适应于参考(本公司暂时正常运行) 原文链接 官网翻译 spring-cloud 组件 springboot 版本 <version>2.0.5.RELEASE</version> springcloud 版本 <version>Finchley.RELEASE</version> eureka-server 替换 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> eureka-client 替换 2.0.X guava scope 为runtime 项目引用不到 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava<