Redis

redis为何单线程 效率还这么高 为何使用跳表不使用B+树做索引(阿里)

丶灬走出姿态 提交于 2020-11-26 03:56:04
如果想了解 redis 与Memcache的区别参考: Redis和Memcache的区别总结 阿里的面试官问问我为何redis 使用跳表做索引,却不是用B+树做索引 因为B+树的原理是 叶子节点存储数据,非叶子节点存储索引,B+树的每个节点可以存储多个关键字,它将节点大小设置为磁盘页的大小,充分利用了磁盘预读的功能。每次读取磁盘页时就会读取一整个节点,每个叶子节点还有指向前后节点的指针,为的是最大限度的降低磁盘的IO;因为数据在内存中读取耗费的时间是从磁盘的IO读取的百万分之一 而Redis是 内存中读取数据,不涉及IO,因此使用了跳表; 至于redis的跳表原理 参考: 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里) mysql的B+索引原理 参考: 一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试) Kafka索引 参考: kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里) 接下来问题来了:为何 redis使用单线程 读取速度还这么块呢 今天下午,烟哥吃饱了撑着没事干,上班时间到处工(zhuang)作(bi)!只见同事小刘的桌上摆了一本Redis相关的书籍,内心嘿嘿一笑:“终于,又有机会勾搭小刘了!” 于是有了如下对话 "嗯,不要方,跟着我思路来想!"烟哥道。

python用Django+Celery+Redis 监视程序(一)

淺唱寂寞╮ 提交于 2020-11-26 03:50:44
C盘创建一个目录就叫DjangoDemo,然后开始在该目录下操作。 1.新建Django工程与应用 运行pip install django 安装django 这里我们建一个名为 demo 的项目和 home 应用。 django-admin startproject demo 创建 demo 项目 然后进入demo文件夹运行命令,manage.py startapp home 创建home应用。 2.编辑 settings.py 文件 在demo文件夹下的settings.py文件的最后添加如下代码: ###配置Broker BROKER_URL = 'redis://127.0.0.1:6379/0' BROKER_TRANSPORT = 'redis' 3.新建 celery.py 文件 在demo文件夹下创建 celery.py 文件,文件内容如下: from __future__ import absolute_import import os import django from celery import Celery from django.conf import settings # os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “djtest.settings”) # # 设置默认的配置文件的环境变量DJANGO

为什么美国程序员不用加班,而中国程序员就只能996?

与世无争的帅哥 提交于 2020-11-26 03:10:26
梅宁航 发自 凹非寺 量子位 报道 | 公众号 QbitAI 按惯例,先问是不是,再问为什么。 从知乎回答浏览量看,是的。 那么为什么美国程序员就可以到点下班回家,而中国程序员就要每天“主动”、“无偿”加班呢? 仔细看了群众们热情的回答之后,大概可以分为几派: 1、产品经理不够通情达理,导致效率低下 2、表演性加班,太早回家会被认为不努力工作 3、不尊重技术人才,35岁警告⚠️ 4、中国处于后发追赶,不加班是追不上的 一起来看看具体的吐槽内容: 开发和PM的斗争 瑟瑟发抖只敢吐槽,毕竟现实碰一碰风险太大了。 产品经理的回击: 都怪你太闲了👆.jpg 怒火还会从PM烧到煞笔客户上,不是客户压榨,催催催,PM怎么舍得压榨程序员! 也有人认为,现在是痛苦的必经阶段,熬过去了,一切都会好的👌。 静待头发掉光之前遇见合格的老板,合格的PM,合格的客户。 加班文化已然形成? 也有大佬指出,多年996,国内公司已经形成加班的“文化”,谁早下班谁就是不努力。 △ 引用链接见文末 你投错胎了,建议下次重投一遍。 大家都觉得理所当然,也就没人在乎劳动法是咋写的了,加,使劲加。 △ 引用链接见文末 轮子哥指出,这都是因为人太多了。 内卷的必然结果,建议出去当蓝领,修修路,修修水管什么的。 管理层不行 老板们就是这么出来的,“兄弟”们也得跟上节奏,跟不上那就是你人不行。 △ 引用链接见文末

凭什么同窗好友Java开发都是三年,他能进大厂,工资还是我的双倍?

こ雲淡風輕ζ 提交于 2020-11-25 14:50:28
刚毕业的前三年,你会觉得自己是在学习,于是无牵无挂。但三年以后, 如果年龄和能力不匹配,你能进入 BAT、TMD 这样的大厂的机会实在渺茫。 最近入职的几个 Java 新人,都是刚毕业没几年,但技术水平完全不输工作了 7、8 年的人,薪资轻松“倒挂”老开发。 年轻人学习能力强,精力充沛,也能在公司比较稳定地干下去,公司愿意多给一些钱。 一批又一批名校学生毕业,一代又一代程序员在冒头。根据拉勾网的数据统计, 目前 90 后已经成为程序员主力,30 岁以上的程序员已经不到两成。 处处皆危机,时刻作准备 其实 35 岁危机,不是你一个人的危机,而是一代人的危机。 这个危机也许不只是 35 岁,比如企业裁员、比如疫情、比如房贷、车贷、子女贷、父母贷。 任何一次危机,都会成为压倒你的最后一根稻草。 但凡事预则立,不预则废。时刻做好准备,迎接挑战的人,是永远不会等到危机来临前,才开始行动的。只有持续学习,精进技术,才有勇气迎战危机并战胜它。 所以,趁着自己年轻,抓紧提升技术能力。当你的技术能力 > 你的年龄,你会发现这个世界是如此美好,薪资是如此着迷,生活将充满希望。 如何让自己的技术能力 > 年龄呢?作为一个年薪50万+的Java程序员应该要掌握的技术是哪些?—对标阿里P7 转发+关注我获取一套完整的架构进阶视频资料 学习文档 Java架构师筑基必备技能 并发编程 JVM性能调优

统一接入层架构的演进

左心房为你撑大大i 提交于 2020-11-25 14:38:56
本文系云原生应用最佳实践杭州站活动演讲稿整理。杭州站活动邀请了 Apache APISIX 项目 VP 温铭、又拍云平台开发部高级工程师莫红波、蚂蚁金服技术专家王发康、有赞中间件开发工程师张超,分享云原生落地应用的经验心得,以下是张超《有赞统一接入层架构演进》分享内容。 张超,有赞中间件团队开发工程师,网关、Service Mesh 领域的专家,热衷技术,对 Golang、Nginx、Ruby 语言等有深入的研究。 大家好,我是来自有赞的张超,有赞中间件团队的开发工程师。今天给大家带来有赞接入层架构演进的分享。 先简单给大家介绍下有赞接入层,内部名为 YZ7,从概念来讲它与网关比较接近,是基于 OpenResty 和 Nginx 来实现的,主要是有标准 C 模块,自研发的 Nginx C 模块,以及基于 lua 实现的模块。它作为有赞业务流量的公网入口,提供 Traffic Shaping,包括限流、安全相关的像 WAF、请求路由等功能,请求路由包含标准的蓝绿发布、灰色发布功能,负载均衡等方面的功能。今天的分享,主要是从下面从三个方面来深入解析: 旧版接入层架构痛点 新架构设计分析 新架构设计总结 旧版接入层架构痛点 首先从旧版接入层架构的相关痛点出发,开始新架构的设计分析。 上图是旧版接入层架构的纵向切面,方案是早几年之前的。当时流行用 redis 做配置同步

SpringSession实战项目(基于SpringBoot项目)【附源码】

佐手、 提交于 2020-11-25 13:51:23
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨怀瑾握瑜 来源链接: https://www.cnblogs.com/lxyit/p/9720159.html spring-boot 整合 spring-session 的自动配置可谓是开箱即用,极其简洁和方便。这篇文章即介绍 spring-boot 整合 spring-session,这里只介绍基于 RedisSession 的实战。 考虑到 RedisSession 模块与 spring-session v2.0.6 版本的差异很小,且能够与 spring-boot v2.0.0 兼容,所以实战篇是基于 spring-boot v2.0.0 基础上配置 spring-session。 配置 spring-session 引入 spring-session 的 pom 配置,由于 spring-boot 包含 spring-session 的 starter 模块,所以 pom 中依赖: <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <

弄懂这些redis分布式锁知识点,明天就去跟老板谈涨薪!(建议收藏)

白昼怎懂夜的黑 提交于 2020-11-25 13:47:48
1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。 本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。 开始之前,记得点赞收藏加关注哦 ,需要下载PDF版本和获取更多知识点、面试题的朋友可以点一点下方链接免费领取 链接: 点这里!!! 799215493 暗号:CSDN 2 分布式锁 2.1 什么是分布式锁? 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。 2.2 分布式锁需要具备哪些条件 互斥性:在任意一个时刻,只有一个客户端持有锁。 无死锁:即便持有锁的客户端崩溃或者其他意外事件,锁仍然可以被获取。 容错:只要大部分Redis节点都活着,客户端就可以获取和释放锁 2.3 分布式锁的实现有哪些? 数据库 Memcached(add命令) Redis(setnx命令) Zookeeper(临时节点) 等等 3 单机Redis的分布式锁 3.1 准备工作 3.1.1 定义常量类 public class LockConstants { public static final

Spring Cloud分布式微服务实战(养成应对复杂业务的综合技术能力)

坚强是说给别人听的谎言 提交于 2020-11-25 09:47:42
Spring Cloud分布式微服务实战(养成应对复杂业务的综合技术能力) Spring Cloud分布式微服务实战(养成应对复杂业务的综合技术能力),2020年最新课程 这是一门培养应对复杂业务的综合技术能力的实战课程,本课采用前后端分离开发模式,严格遵守企业级架构和规范,带你开发门户平台+媒体中心+运营中心三大业务的企业级自媒体平台。 一个项目贯穿后端主流核心技术栈,一步步带你落地硬核技术;10个阶段,稳扎稳打,逐步迭代,亲历企业开发全流程 让你全面掌握主流后端技术栈:Spring Cloud+MongoDB+Redis+RabbitMQ等,同时获得微服务、分布式、项目和微架构综合实战经验。 来源: oschina 链接: https://my.oschina.net/u/4380905/blog/4743006

Alibaba2016校招实习面经(拿到offer)

◇◆丶佛笑我妖孽 提交于 2020-11-25 08:01:16
作者: 骚年编程去 ,发表于2015年4月 转载自:http://blog.csdn.net/a837199685 一面 IO模型有哪些?(linux下的io模型,当时没答上,后来下去查了一下,阻塞,非阻塞,io复用,驱动,同步,异步等) 进程线程的区别 不同操作系统实现进程怎么样(ps:我还真不知道,以后要好好看看OS了) gc算法,回收器有哪些(这个答得不错,标记-整理,标记-清理,复制,分代,cms收集器的并行这些说了一下) ACID。事务隔离机制(一致性,原子性,隔离性,持久性,读未提交,读提交,可重复读,序列化) syn在方法上和代码块有什么不同(作用域,和锁对象) memcached和其他nosql的区别(拿memcached和redis做了一下比较) 解释mvc threadlocal解释(结合源码的threadmap讲了一下) volatile的作用(内存可见性,内存屏障,重排序,happens-before) 堆和栈的区别和联系(自由发挥啊) tcp和udp的不同之处(面向链接,是否可靠等) tcp如何保证可靠的(超时重传,ack确认,滑动窗口,连接管理,差错控制等) 数组和链表的区别(先说说数据结构上的区别,然后结合java的两个类的源码做了一些分析) 排序算法应用场景(。。。。。这个比较简单) lucene全文检索原理(分词过滤,filter等,) 二面

spring cloud gateway

荒凉一梦 提交于 2020-11-25 07:13:59
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。 网关作为流量的,在微服务系统中有着非常作用。 网关常见的功能有:   1、路由转发、   2、权限校验、   3、限流控制、   4、日志监控   5、协议转换   6、网关层缓存 总结:   网关的本质,就是它可以实现功能的集合。 概览图:    关键的类:   1、RouteLocator 路由的转发。   2、predicate 请求与路由进行匹配       3、filter 过滤与修改     3.1、GatewayFilter : 需要通过spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上或通过spring.cloud.default-filters配置在全局,作用在所有路由上。       3.2、GlobalFilter : 全局过滤器,不需要在配置文件中配置,作用在所有的路由上,最终通过GatewayFilterAdapter包装成GatewayFilterChain可识别的过滤器,它为请求业务以及路由的URI转换为真实业务服务的请求地址的核心过滤器,不需要配置,系统初始化时加载,并作用在每个路由上。        4、自定义过滤器,需要实现以下两个接口 :GatewayFilter, Ordered   5