Redis

阿里为什么弃用hibernate ?看完Mybatis技术原理实战我终于明白

有些话、适合烂在心里 提交于 2020-08-13 18:40:42
推荐观看: 阿里P8架构师谈:工作1-5年的Java工程师,怎样提高核心竞争力 阿里架构师直言:“没有实战都是纸上谈兵”!Redis实战PDF分享 奋发图强半年多,终于四面阿里如愿拿到心仪offer定级P7 hibernate和mybatis是当前流行的ORM框架。hibernate对数据库结构提供了较为完整的封装。mybatis主要着力点在于java对象与SQL之间的映射关系。 MyBatis和hibernate孰优孰劣?一直都饱受争议,这不,前几天群里关于这个话题,又吵起来了。 众多过来人总结出来的经验就是:hibernate确实厉害,但MyBatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。可以进行更为细致的SQL优化,可以减少查询字段。 为什么阿里巴巴的持久层抛弃hibernate,采用MyBatis框架? 之前和阿里的一个面试官交流中,他讲到对于性能要求高,需求变化多的互联网项目来说,sql直接优化上,mybatis要比hibernate方便很多,用在sql优化上的开发时间太长,阿里巴巴的持久层抛弃Hibernate,采用了MyBatis框架。 于是趁热打铁,研究了一下MyBatis。MyBatis框架的核心功能其实并不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展

注意闪避!15年IT老兵亲身经历的N个线上故障

寵の児 提交于 2020-08-13 17:06:08
​作者介绍 二马读书 , 曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历。 很多人在面试时,会被问到这样的问题:遇到过什么系统故障?怎么解决的?下面是笔者根据自己15年互联网研发经历总结的多个线上故障真实案例。 本文图不多,但内容很干!理解为主,学以致用! 故障一:JVM频繁FULL GC快速排查 在分享此案例前,先聊聊哪些场景会导致频繁Full GC: 内存泄漏(代码有问题,对象引用没及时释放,导致对象不能及时回收)。 死循环。 大对象。 尤其是大对象,80%以上的情况就是他。 那么大对象从哪里来的呢? 数据库(包括MySQL和MongoDB等NoSQL数据库),结果集太大。 第三方接口传输的大对象。 消息队列,消息太大。 根据多年一线互联网经验,绝大部分情况是数据库大结果集导致。 好,现在我们开始介绍这次线上故障: 在没有任何发布的情况下,POP服务( 接入 第三方商家的服务)突然开始疯狂Full GC,观察堆内存监控没内存泄漏,回滚到前一版本,问题仍然存在,尴尬了!!! 按照常规做法,一般先用jmap导出堆内存快照(jmap -dump:format=b,file=文件名 [pid]),然后用mat等工具分析出什么对象占用了大量空间,再查看相关引用找到问题代码。这种方式定位问题周期会比较长,如果是关键服务,长时间不能定位解决问题,影响太大。

redis 4.x 5.x centos7 安装

戏子无情 提交于 2020-08-13 16:38:08
一、前言 1、本教程主要内容 Redis安装与测试 Redis远程访问配置 Redis开机启动配置 2、本教程环境信息 CentOS 7 Redis 4.0.2 二、安装步骤 1、Redis安装 安装基础依赖 #安装基础依赖包 sudo yum install -y gcc gcc-c++ make jemalloc-devel epel-release 下载Redis( https://redis.io/download ) #从官网获取最新版本的下载链接,然后通过wget命令下载 wget http://download.redis.io/releases/redis-4.0.2.tar.gz 解压到指定目录 #创建目录 sudo mkdir /usr/redis #解压 sudo tar -zvxf redis-4.0.2.tar.gz -C /usr/redis 编译&安装 #进入目录 cd /usr/redis/redis-4.0.2 #编译&安装 sudo make & make install 2、Redis启动与测试 启动redis-server #进入src目录 cd /usr/redis/redis-4.0.2/src #启动服务端 sudo ./redis-server 启动redis客户端测试 #进入src目录 cd /usr/redis/redis-4.0

Redis可以用作消息队列吗?

匆匆过客 提交于 2020-08-13 16:37:56
消息队列 所谓的"消息队列"就是:在消息的传输过程中保存消息的容器。上次有朋友面试,面试官就问,redis可以用作消息队列吗?当时一懵。每当想到消息队列:我们都会想到 RabbitMQ , ActiveMQ ,RocketMQ,等等一些专业的消息中间件。但是如果我们做的事情比较简单业务逻辑不是很复杂,只需要有一个消息队列,使用专业的消息中间件是非常麻烦的,因此我们可以使用Redis做消息队列。 如果对消息的可靠性没有较高的要求的话,那么就可以使用Redis去实现。 Redis做消息队列,可以使用List这个数据类型。List里面有两个命令, lpush/rpush 操作来实现 入队 ,然后使用 lpop/rpop 实现 出列 。 在客户端中,我们会 维护一个死循环来不停的从队列中pop读取数据 ,如果队列中有消息,则直接读取,如果没有,就会陷入死循环,直到下一次有消息进入。这种死循环会造成大量的资源浪费,这个时候我们可以使用, blpop/brpop 去处理,相当于lpop的阻塞,当没有消息到来的时候就会休眠,直到消息来临,才唤醒,pop去读取数据。 在java中可以使用while循环去实现 。 延迟消息队列 延迟消息队列,可以用zset实现,里面有 score 分数浮动数值,数据 可以根据 core 排序,zset可用于高效的检索,我们可以将时间作为score

大数据就业前景如何?现在学习大数据已经晚了吗?

て烟熏妆下的殇ゞ 提交于 2020-08-13 16:30:14
  大数据就业 前景如何?现在学习大数据已经晚了吗?作为初入社会的大学生,或者想改变环境转行的同学,看到大数据技术开发者的高薪资都想进入这个行业,但是现在大数据技术依然想之前那样火爆吗?是不是学习了大数据技术就可以获得高薪呢?   大数据从最开始的概念兴起,到现在各大互联网公司逐步推广使用。已经逐渐成熟,目前营销、电商、教育领域等等对大数据的应用已经初见效果。大数据也从最开始的概念过渡到实际应用领域。对技术人员的招聘也更加趋于理性。所以并非大数据技术不再火爆,而是企业对于大数据从业人员的要求提高了。   根据招聘网站显示,目前大数据工作招聘需求,薪资普遍稳定在15-30K之间。其中目前刚入行的大数据工程师平均薪资在1万左右,而随着工作时间的增加,3~5年经验的大数据工程师的薪资待遇将达到3万元左右。   据相关机构统计,未来的3~5内大数据人才的缺口将达到150万,而且随着大数据的发展,人才缺口将不断扩大,所以大数据不管是目前还是未来长期都将是紧缺人才,受到各大互联网企业的关注。   如果你想投入大数据的怀抱,但却苦于不知如何下手。而当你准备学习大数据技术时,你可以了解一下博斌去计算大数据课程,主要是针对有一定编程开发经验的学员研发的课程。从大数据基础增强开始,内容精准聚焦大数据开发过程中必备的离线数据分析、实时数据分析和内存数据计算等重要内容;涵盖了大数据体系中几乎所有的核心技术

云原生中间件领先实践,轻舟中间件三大案例分析

有些话、适合烂在心里 提交于 2020-08-13 16:27:44
相较传统中间件,云原生中间件更能为企业解决SLA 保障难、运维难、成本高等一系列问题。然而, 中间件技术栈复杂 , 对专业程度要求高 , 如果 缺少生产环境的大规模实践 , 往往难以落地 。 作为云原生中间件的长期实践者, 轻舟中间件 经过可靠性、可扩展性、性能及稳定性测试,已历经网易严选、网易云音乐、网易传媒等 众多大规模 、 高性能业务的 生产环境实战验证。 电商:高 SLA 保障业务连续性 网易严选采用 轻舟中间件 Kafka、RocketMQ ,实现容器化分布式消息中间件,支持从环境搭建、软件安装、服务管理/配置、应用部署/配置/升级,以及监控、告警、故障恢复等端到端的自动化,为 SLA 提供了更可靠的保障。 另外,网易严选也引入了轻舟中间件 RDS MySQL,为其提供 MySQL 组复制(MGR)集群的多数据中心高可用、自动的故障检测修复以及全方位的告警监控,最大限度保障服务可用性。 音乐:节约资源成本30%以上 网易云音乐引入 轻舟中间件 Redis,以容器技术为核心,避免虚拟化开销,通过精细化编排,实现高效率、高密度混合部署、租户隔离,提高资源利用率,节约资源成本 30% 以上。并且针对极致性能场景,从计算、网络到服务层进行了全方位的优化。 传媒:轻松运维,业务不间断 网易传媒借助 轻舟中间件 Kafka、Elasticsearch

最真实的一次spring面试,问完我哭了!

穿精又带淫゛_ 提交于 2020-08-13 16:18:11
面试官: 看你简历上写了读过Spring源码,是吗? 我: 是的 面试官: 读过哪些部分的? 我: 读过Spring的启动过程源码,比如扫描包、执行Bean工厂后置处理器、Bean的生成过程等(自信满满) 面试官: 读得还挺多,那你可以说说一个Bean是怎么生成的吗? 我: Bean的生成过程就是Bean的生命周期,包括Bean的实例化、属性注入、初始化等等(险过....) 面试官: 嗯,那可以再详细一点说说实例化吗?比如,如果一个类有多个构造方法,Spring该选择哪个构造方法来进行实例化呢? 我: 这个...,我就不会了 面试官: 好,那关于属性注入你了解多少,比如@Autowire注解的工作原理,这个注解加在属性上和加在方法上,在底层原理上有什么区别? 我: 我不知道,只知道byname和bytype 面试官: 好,那Spring我们就先到这,我来问问你Mysql,Mysql中有哪些存储引擎? 我: 我就知道Innodb和MyISAM, 有其他的,但是记不起来了 面试官: 那Innodb和MyISAM的区别是什么? 我: Innodb支持事务 面试官: 还有吗? 我: 我只了解过这一点,其他的...不知道了 面试官: 他们在索引的底层实现上有区别吗? 我: 噢...好像是有,但是我不记得了 面试官: 那Innodb中的索引底层是如何实现的? 我: B+树 面试官: 那为什么B

mica 2.0.1 发布新增最好用的 ip2region boot stater

巧了我就是萌 提交于 2020-08-13 15:21:13
mica(云母) mica 由如梦技术内部的 lutool(撸秃)演变而来。lutool 诞生于 2017 年,受 jhipster 启发逐步形成一个微服务的核心集。 因 lutool 名称与功能不太符合,故在2019年开源时将其改名为 mica(云母),寓意为云服务的基石。 mica 2.x核心依赖 mica 基于 java 8,没有历史包袱,支持传统 Servlet 和 Reactive(webflux)。采用 mica-auto 自动生成 spring.factories 和 spring-devtools.properties 配置,仅依赖 Spring boot、Spring cloud 全家桶,无第三方依赖。市面上鲜有的微服务核心组件。 依赖 版本 Spring Boot 2.2.x mica 2.0.1 更新说明 :sparkles: 开源 mica-ip2region 组件。 :zap: mica-core 优化 R.isNotSuccess 改为 isFail。 :bug: mica-redis jackson class info。 :bug: mica-redis jackson findAndRegisterModules。 :wrench: travis 替换为 Github actions,用于构建和 Snapshot 版本自动发布。 :arrow_up

Redis --Java客户端 Jedis

依然范特西╮ 提交于 2020-08-13 14:18:49
Redis --Java客户端 Jedis 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 Jedis: 一款java操作redis数据库的工具. 菜鸟教程文档地址 使用步骤 导入jedis包 使用 package com.jedis.test; import org.junit.Test; import redis.clients.jedis.Jedis; /** * @author guizimo * @date 2020/7/15 4:42 下午 */ public class JedisTest { @Test public void test(){ //1. 获取连接 Jedis jedis = new Jedis("127.0.0.1",6379); //2. 操作 jedis.set("name","zhangsan"); //3. 关闭连接 jedis.close(); } } 测试 感谢 菜鸟教程 万能的网络 以及勤劳的自己 来源: oschina 链接: https://my.oschina.net/guizimo/blog/4383737

Redis的发布和订阅

时光怂恿深爱的人放手 提交于 2020-08-13 14:16:20
Redis的发布和订阅功能分为 频道订阅 和 模式订阅 两种。每当有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。 频道订阅 当一个客户端执行 SUBSCRIBE 命令订阅某个或某些频道时,这个客户端与被订阅频道之间就建立起了一种订阅关系。 订阅 每当客户端执行 SUBSCRIBE 命令时,服务器都会将客户端与被订阅的频道在 pubsub_channels 字典中进行关联。根据频道是否已经其他订阅者,关联操作分两种情况: 如果频道已经有其他订阅者,那么它在 pubsub_channels 字典中必然有相应的订阅者链表,程序唯一要做的就是将客户端添加到订阅者链表的末尾 如果频道还未有任何订阅者,程序首先在 pubsub_channels 字典中为频道创建一个键,并将这个键的值设置为空链表,然后再将客户端添加到链表 退订 每当客户端执行 UNSUBSCRIBE 命令时,服务器将从 pubsub_channels 中解除订阅关联: 程序根据被退订频道的名字在 pubsub_channels 字典中找到频道对应的订阅者链表,然后从链表中删除退订客户端信息 如果删除退订客户端之后,频道的订阅者链表变成空链表,程序将从 pubsub_channels 字典中删除频道对应的键 模式订阅 服务器将所有模式的订阅关系都保存在服务器状态的 pubsub_patterns