Redis

2020 年上半年互联网公司"死亡"名单!

﹥>﹥吖頭↗ 提交于 2020-11-26 13:46:06
2020 年上半年互联网公司"死亡"名单! 收录于话题 #乘风破浪的职场,人心险恶的江湖! 17个 点击上方“民工哥技术之路”,选择“设为星标” 回复“1024”获取独家整理的学习资料! 2019年年底的疫情,一直持续到2020年,全国的企业受其影响不小,特别是餐饮与旅游业,冲击更是巨大的。 民工哥,也在老家呆到了3月10号,才回霸都正式复工上班,其它时间都是在家远程办公,因环境、地点的限制多多少少都会影响工作效率。 老家邻居一见到我都调侃道:这个假放的够长的吧,着急了吧!!!!你说能不急吗?上有老下有小,中间还有房贷,三座大山压着,对于一个普通人来说,都是很大的压力,那么对于一个企业(无论大小)压力更是巨大的。 如果说2019年是互联网行业的"寒冬",那么2020年对互联网行业来说,算不算是"至暗时刻"呢????或许只有身处互联网行业的人才能懂得。 从IT桔子官方数据显示来看,截止2020年9月3日,今年总关闭/停业/倒闭的企业963家。从列表数据中可以看出,有的企业刚刚创立几个月的时间就走向了关闭、停业,也有长达几年时间的老牌企业。 在这份列表数据中,有很多名气比较大,或者我们都比较熟悉的企业,比如:OFO小黄车、巢客公寓、友客公寓、万达网络、百程旅行、美团云、兄弟连教育、钱牛牛、人人聚财网、美利金融、美利车金融、铜掌柜、爱贝信息、鼎有财、淘集集等。 更完整的数据

Github上开源仿京东商城项目启动配置详解(小白版)

会有一股神秘感。 提交于 2020-11-26 13:09:52
项目源码地址 :https://github.com/GoogleLLP/SuperMarket.git 说明: 以下配置流程仅供参考,欢迎留言沟通,谢谢。 我的环境: 名称 版本 系统 windows 10 工具 idea 2020.1 redis 3.2.100 nginx 1.19.4 mysql 8.0.17 1. 数据库配置 确保有一个能连接可用的 mysql数据库,并在里面新建 supermarket 数据库,用工具连接mysql数据库,运行脚本 supermarket.sql 和 secondskill.sql 脚本初始化数据库。 1.1 获取数据库脚本 1.2 数据库修改三个地方 这三个微服务都依赖数据库。把数据库相关信息修改为自己实际的连接信息。 2. redis配置 下载 redis安装包( 下载安装教程 ),安装运行。修改项目配置文件中的redis相关配置。修改如图: 2.1 redis启动效果图: 3. nginx配置 下载nginx,尝试启动nginx,如果80端口(redis默认端口)被占用,会导致nginx进程启动不了,最好找到占用80端口的进程结束掉( 释放windows 下80端口教程 ),然后启动ngnix(不推荐修改nginx默认端口,后续配置麻烦)( nginx下载安装教程 )。 3.1 修改nginx配置 将nginx

8张图搞懂Redis和MySQL数据一致性问题

纵饮孤独 提交于 2020-11-26 11:27:12
前言 对于Web来说,用户量和访问量增一定程度上推动项目技术和架构的更迭和进步。可能会有以下的一些状况: 页面并发量和访问量并不多,MySQL 足以支撑 自己逻辑业务的发展。那么其实可以不加缓存。最多对静态页面进行缓存即可。 页面的并发量显著增多,数据库有些压力,并且有些数据更新频率较低 反复被查询 或者查询速度 较慢 。那么就可以考虑使用缓存技术优化。对高命中的对象存到key-value形式的Redis中,那么,如果数据被命中,那么可以不经过效率很低的db。从高效的redis中查找到数据。 当然,可能还会遇到其他问题,你还通过静态页面缓存页面、cdn加速、甚至负载均衡这些方法提高系统并发量。这里就不做介绍。 缓存思想无处不在 我们从一个算法问题开始了解缓存的意义。 问题1: 输入一个数n(n<20),求 n! ; 分析1 : 单单考虑算法,不考虑数值越界问题。 当然我们知道 n!=n * (n-1) * (n-2) * ... * 1= n * (n-1)! ; 那么我们可以用一个递归函数解决问题。 static long jiecheng(int n) { if(n==1||n==0)return 1; else { return n*jiecheng(n-1); } } 复制代码 这样每输入求一次需要执行 n 次。 问题2: 输入t组数据(可能成百上千),每组一个xi(xi

2020最全的Java架构面试指南:这个GitHub上的开源项目,助我拿下大厂月薪30K*offer

生来就可爱ヽ(ⅴ<●) 提交于 2020-11-26 11:25:08
前言 学习如逆水行舟,尤其是IT行业有着日新月异的节奏。 而且现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引,毕竟技术岗位非常枯燥,不仅要面对奇奇怪怪的需求,还要不停的充实自己避免被淘汰。所以,我们更要抓紧每一次可以学习和进步的机会。没有撤退可言! 即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷! 今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K! 我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为明年的金三银四做准备! 有需要的朋友 点击此处直达 领取 直击目录 一共有20个知识点专题,分别是: Dubbo面试专题 JVM面试专题 Java并发面试专题 Kafka面试专题 MongDB面试专题 MyBatis面试专题 MySQL面试专题 Netty面试专题 RabbitMQ面试专题 Redis面试专题 Spring Cloud面试专题 SpringBoot面试专题 zookeeper面试专题 常见面试算法题汇总专题 计算机网络基础专题 设计模式专题 内容展示: 由于篇幅原因,有需要的朋友 点击此处免费获取资料 ,希望能给您找工作提供很好的帮助! 来源: oschina 链接: https:/

微服务应该这么搞

久未见 提交于 2020-11-26 09:04:52
微服务越来越火。很多互联网公司,甚至一些传统行业的系统都采用了微服务架构。体会到微服务带来好处的同时,很多公司也明显感受到微服务化带来的一系列让人头疼的问题。本文是笔者对自己多年微服务化经历的总结。 如果你正准备做微服务转型,或者在微服务化过程中遇到了困难,此文很可能会帮到你! 写在前面 正文开始前,为了让各位读友更好的理解本文内容,先花两分钟了解一下微服务的优缺点。 微服务的好处 聊起微服务,很多朋友都了解微服务带来的好处,罗列几点: 模块化,降低耦合 将单体应用按业务模块拆分成多个服务,如果某个功能需要改动,大多数情况,我们只需要弄清楚并改动对应的服务即可。只改动一小部分就能满足要求,降低了其他业务模块受影响的可能性。从而降低了业务模块间的耦合性。 屏蔽与自身业务无关技术细节 例如,很多业务需要查询用户信息,在单体应用的情况下,所有业务场景都通过 DAO 去查询用户信息,随着业务发展,并发量增加,用户信息需要加缓存,这样所有业务场景都需要关注缓存,微服务化之后,缓存由各自服务维护,其他服务调用相关服务即可,不需要关注类似的缓存问题。 数据隔离,避免不同业务模块间的数据耦合 不同的服务对应不同数据库表,服务之间通过服务调用的方式来获取数据。 业务边界清晰,代码边界清晰 单体架构中不同的业务,代码耦合严重,随着业务量增长,业务复杂后,一个小功能点的修改就可能影响到其他业务点

Redis Cluster 3.0搭建与使用

只愿长相守 提交于 2020-11-26 07:14:54
转自: http://www.cnblogs.com/gomysql/p/4395504.html Redis Cluster终于出了Stable,这让人很是激动,等Stable很久了,所以还是先玩玩。 一. 集群简单概念。 Redis 集群是一个可以 在多个 Redis 节点之间进行数据共享 的设施(installation)。 Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。 Redis 集群 通过分区(partition)来提供一定程度的可用性 (availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。 Redis 集群提供了以下两个好处: 将数据自动切分(split)到多个节点的能力。 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。 Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384

Redis Cluster 3.0集群部署与使用

巧了我就是萌 提交于 2020-11-26 05:33:31
redis-cluster集群的概念和工作原理 在说明使用和安装之前,先大概介 绍下,Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施。 通过分区(partition)来提供一定程度的可用性(availability),即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。 架构图 工作原理 1 、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. 2 、节点的fail是通过集群中超过半数的节点检测失效时才生效 3 、客户端与Redis节点直连,不需要中间 Proxy 层,直接连接任意一个Master节点 4 、redis-cluster把所有的物理节点映射到[ 0 -16383 ]slot上,根据公式HASH_SLOT=CRC16(key) mod 16384 ,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作 优点和缺点 1、优点: (1)无需Sentinel哨兵监控,如果Master挂了,Redis Cluster内部自动将Slave切换Master (2)可以进行水平扩容 (3)支持自动化迁移,当出现某个Slave宕机了,那么就只有Master了,这时候的高可用性就无法很好的保证了,万一master也宕机了,咋办呢?针对这种情况,如果说其他Master有多余的Slave

RedLock算法-使用redis实现分布式锁服务

吃可爱长大的小学妹 提交于 2020-11-26 04:52:44
译自 Redis官方文档 在多线程共享临界资源的场景下,分布式锁是一种非常重要的组件。 许多库使用不同的方式使用redis实现一个分布式锁管理。 其中有一部分简单的实现方式可靠性不足,可以通过一些简单的修改提高其可靠性。 这篇文章介绍了一种指导性的redis分布式锁算法RedLock,RedLock比起单实例的实现方式更加安全。 在介绍RedLock算法之前,我们列出了一些已经实现了分布式锁的类库供大家参考。 Redlock-rb (Ruby 实现). Redlock-py (Python 实现) Redlock-php (PHP 实现) PHPRedisMutex (further PHP 实现)?? Redsync.go (Go 实现) Redisson (Java 实现) Redis::DistLock (Perl 实现) Redlock-cpp (C++ 实现) Redlock-cs (C#/.NET 实现) RedLock.net (C#/.NET 实现 ScarletLock (C# .NET 实现) node-redlock (NodeJS 实现) 分布式锁应该具有的特性(Safety & Liveness) 我们将从三个特性的角度出发来设计RedLock模型: 安全性(Safety) :在任意时刻,只有一个客户端可以获得锁( 排他性 )。 避免死锁

OAuth2认证和jwt机制

烈酒焚心 提交于 2020-11-26 04:24:28
一、OAuth2认证 OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌), 使得第三方应用可以使用该token(令牌)在限定时间、限定范围访问指定资源。 OAuth2相关概念: 资源所有者(resources owner):拥有被访问资源的用户 客户端/第三方应用(client):第三方应用,获取资源服务器提供的资源 授权服务器(authorization server):认证服务器,提供授权许可code、令牌token等 资源服务器(resource server):资源服务器,拥有被访问资源的服务器,需要通过token来确定是否有权限访问 OAuth2几种模式: 获取令牌的方式主要有四种,分别是授权码模式、隐式授权码模式(简单模式)、密码模式和客户端模式。 1)授权码模式(authorization code) 这种模式是最安全的OAuth2的授权模式。设计了auth code,通过这个code再获取token,最后通过token获取资源。支持refresh token。 应用场景: 各大应用内的qq,微信,微博登录等。比如某应用内的qq登录,过程如下: a.用户点击qq登录,会先跳转到qq登录页面,这时请求已经跳转到qq服务器了,然后用户输入账号或者扫码登录,这时所有请求都在qq服务器完成。

缓存算法(FIFO 、LRU、LFU三种算法的区别)

不打扰是莪最后的温柔 提交于 2020-11-26 03:56:18
缓存算法(FIFO 、LRU、LFU三种算法的区别) FIFO算法 # FIFO 算法是一种比较容易实现的算法。它的思想是先进先出(FIFO,队列),这是最简单、最公平的一种思想,即 如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小。空间满的时候,最先进入的数据会被最早置换(淘汰)掉 。 FIFO 算法的描述:设计一种缓存结构,该结构在构造时确定大小,假设大小为 K,并有两个功能: set(key,value):将记录(key,value)插入该结构。当缓存满时,将最先进入缓存的数据置换掉。 get(key):返回key对应的value值。 实现:维护一个FIFO队列,按照时间顺序将各数据(已分配页面)链接起来组成队列,并将置换指针指向队列的队首。再进行置换时,只需把置换指针所指的数据(页面)顺次换出,并把新加入的数据插到队尾即可。 缺点:判断一个页面置换算法优劣的指标就是缺页率,而FIFO算法的一个显著的缺点是,在某些特定的时刻,缺页率反而会随着分配页面的增加而增加,这称为 Belady现象 。产生Belady现象现象的原因是,FIFO置换算法与进程访问内存的动态特征是不相容的,被置换的内存页面往往是被频繁访问的,或者没有给进程分配足够的页面,因此FIFO算法会使一些页面频繁地被替换和重新申请内存,从而导致缺页率增加。因此, 现在不再使用FIFO算法 。