Redis

为什么要用RabbitMQ?

心不动则不痛 提交于 2021-02-02 10:59:35
1)其实我一直想让自己框架做到最简化的,最好是一个进程部署到一台物理机器上就完事。 2)而且涉及到的环境要足够的少,比如:能用mysql解决问题,那么redis之类的我就不用考虑了。少点环境少点bug! 3)但是如果考虑到分布式的内容,那么RocketMQ还是要上场的,用于发布和订阅,网关收到消息后,将结果转发给其它的业务服务器, 之前如果用网关直连业务服务器的话,会成:网状结构,不是特别方便管理. 因此我倾向于用MQ去解耦,分发消息。 Redis也是可以做发布订阅,而且更加轻量级,但是:消息只能消费一次,这点不太好,比如:玩家掉线了,需要通知所有的服务,那就不太好处理了。 因此Redis是有应用场景的:缓存、分布式锁、分布式唯一ID生成等。 来源: oschina 链接: https://my.oschina.net/u/4391429/blog/4941064

干货|漫画算法:LRU从实现到应用层层剖析(第一讲)

天涯浪子 提交于 2021-02-02 06:15:35
今天为大家分享很出名的LRU算法,第一讲共包括4节。 LRU概述 LRU使用 LRU实现 Redis近LRU概述 第一部分:LRU概述 LRU是Least Recently Used的缩写,译为最近最少使用。它的理论基础为“ 最近使用的数据会在未来一段时期内仍然被使用,已经很久没有使用的数据大概率在未来很长一段时间仍然不会被使用 ”由于该思想非常契合业务场景 ,并且可以解决很多实际开发中的问题,所以我们经常通过LRU的思想来作缓存,一般也将其称为LRU缓存机制。因为恰好leetcode上有这道题,所以我干脆把题目贴这里。但是对于LRU而言,希望大家不要局限于本题(大家不用担心学不会,我希望能做一个全网最简单的版本,希望可以坚持看下去!)下面,我们一起学习一下。 题目: 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作:获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。 进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作? 示例: LRUCache

收藏,吊打面试官的kafka知识!

此生再无相见时 提交于 2021-02-02 06:09:48
1 什么是kafka Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。 2 为什么要使用 kafka,为什么要使用消息队列 缓冲和削峰: 上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性: 项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。 冗余: 可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。 健壮性: 消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。 异步通信: 很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。 3.Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么 ISR:In-Sync Replicas 副本同步队列 AR:Assigned Replicas 所有副本

python学习之python爬虫原理

ε祈祈猫儿з 提交于 2021-02-02 05:45:32
今天我们要向大家详细解说python爬虫原理,什么是python爬虫,python爬虫工作的基本流程是什么等内容,希望对这正在进行python爬虫学习的同学有所帮助! 前言 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前; 一、爬虫是什么? 如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛, 沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序; 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用; 二、爬虫的基本流程: 用户获取网络数据的方式: 方式1:浏览器提交请求--->下载网页代码--->解析成页面 方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中 爬虫要做的就是方式2; 1、发起请求 使用http库向目标站点发起请求,即发送一个Request Request包含:请求头、请求体等 Request模块缺陷:不能执行JS 和CSS 代码 2、获取响应内容 如果服务器能正常响应,则会得到一个Response

QQ为什么是一只企鹅?官方终于答复了!

对着背影说爱祢 提交于 2021-02-02 04:51:48
点击上方 “ 民工哥技术之路 ” 选择“星标” 每天 10点 为你 分享 不一样的干货 读者福利!多达 2048G 各种资源免费赠送 本文授权转自差评公众号,如需转载请联系授权。 不知道差友们有没有想过, 为啥 QQ 的图标是一只小企鹅呢? 关于这个问题的答案,坊间一直流传着一些不靠谱的传说。 而流传最广的大概就是一个 BBC 拍摄的关于企鹅的纪录片。 纪录片里的企鹅,在南极冰天雪地里用小石头为自己垒窝,可是在南极找到 一块合适的小石头需要小企鹅费劲千辛万苦 。 可是一些不守规矩的小企鹅,盯上了一条 “ 捷径 ” : 把别的企鹅的石头叼到自己窝前。 而腾讯正是靠着一招驰名天下的绝技“ 血轮眼 ”,拿下了互联网的半边天。 当然了,以上这个说法都是坊间流传的无稽之谈,差友们全当看个笑话,不能作数。 这些八卦除了这个最不靠谱以外,另外的传说简直五花八门。 甚至还有强行做了一波阅读理解的: 企鹅生活中地球极端,用企鹅做 LOGO 也蕴含着 QQ 网络可以联络世界两端的寓意。 就在几天前,腾讯 QQ 终于坐不住了。 在他们的官方微信号上,发表了一篇长文来解释这只 20 岁的企鹅的前世今生。 所以今天,世超想和差友们聊聊就是这只 20 岁的胖企鹅这些年里的变化, 这事情还要从 1999 年开始说起, 那时候 QQ 还叫做 OICQ ,是一个非常具有年代感的名字。 那时候腾讯 QQ 用的

redis的缓存穿透,缓存雪崩,持久化方式

被刻印的时光 ゝ 提交于 2021-02-02 03:59:55
Redis redis是一个可进行持久化的内存数据库,可以支持string,list,hsh,set,zet这五种数据类型。 redis的性能很高(redis的读取速度可以达到11万次每秒,写的速度达到8万次每秒) redis【缓存穿透】 缓存穿透是指去查询一个一定不存在的数据,比如说我一共有100个商品,然后你偏偏去查询第101,102个这些不存在的商品,这个时候我们通常情况下就先回去redis里面去查询,但是redis里面就存在,所以就会去数据库中查询,如果大量的这种请求过来,那么就都落在了数据库上面,而数据库也不存在这样的数据,那么缓存就如同虚设,增加了数据库的压力。 解决方法: 为了解决这个问题,我们可以缓存空值,也就是说即便数据库中查询出来的数据不存在,也会缓存空值在reids的缓存中,这样下一次就可以走我们的缓存而不是数据库啦,但是太多的空值会占用我们的缓存的内存空间,导致内存的浪费,我们就通过给它设置一个过期时间比如3分钟,这样过了3分钟后存入的空值就会清空,释放空间,但是这样又出现另外一个问题,就是说如果有人在三分钟内加了一条数据,这个时候就有了第101条数据啦,但是当我们用户去查的时候,走的缓存而缓存中却还是空值,导致缓存中的数据和数据库中的数据不一致,为了解决这个问题我们可以在后台增加数据的时候,同时主动更新缓存中存在的数据,或者去删除缓存中的数据

Nginx+MVC负载均衡实现Session共享

十年热恋 提交于 2021-02-02 03:59:28
了解了Nginx之后,也对Nginx实践了,但是Nginx的理论,我只能记得一丢丢: Nginx是一款高性能的反向代理服务器,类似的服务器还有Apatch,Tomcat, 目前我只使用过Nginx,自己也实践了一下:这是使用Nginx代理的 网站 有兴趣的可以了解下 ( 但是,求你们别搞它,好嘛???有什么事情咱们留言说,不要对我的服务器过不起,行吧,大哥 ) 网站 Cgrain的网站 据我了解 Nginx 可实现的几大功能 1: 反向代理 2:动静分离 3:负载均衡 1反向代理 我们先说说正向代理:正向代理 指的是通过我们的客户端进行代理 比如说 我们在本地自己设置 我们设置 https://cgrain.top 指向了 Https://cnblogs.com 当我们在浏览器中 输入https://cgrain.top 就会跳转到博客园,这个就叫做正向代理 那这样一说,我们就很好解释反向代理了 通过服务器:将用户输入的网站,通过Nginx 跳转到指定的 地方,比如用户输入https://cgrain.top (这里是443端口,其实我们是使用1000000--> 我虚构的,鬼才告诉你我端口是多少) ,然后Nginx 就监听443, 把这个指定的地址 跳转到 1000000的端口中了,这就是一个反向代理的简单介绍,如果想要了解,我最后贴出地址,你们看好了!!!! 2 动静分离

我司使用了六年的分布式锁

别说谁变了你拦得住时间么 提交于 2021-02-02 03:54:46
导读:不管是在单体应用时代还是分布式应用时代,一些保障我们数据安全的手段从来都未过时,只是底层实现发生了一些变化,今天我就来分享一下我司使用了六年的分布式锁方案,希望对一些同学有一些帮助。 关键词:分布式,并发,原子性 前言 提到数据一致性、操作原子性,诸如此类的一些与并发有关的词汇时不知道你第一时间会联想到什么呢?我相信大多数人可能会想到“锁”,为什么是锁呢,这个我不多说,大家心里应该都明白。在单体应用时代,我们使用jvm提供的锁就可以很好的工作,但是到了分布式应用时代,jvm提供的锁就行不通了,那么势必要借助一些跨jvm的临界资源来支持锁的相关语义,比如redis,zookeeper等。 步入正题 我今天就来分享下我司基于redis来实现的分布式锁,2013年投入使用,也算是久经沙场。但是也存在一些设计上的缺陷,这个我后面也会提到,希望大家秉着互相学习的态度文明交流,别一上来就说这不行那不行,还是那句话“适合自己的才是最好的”。 加锁过程分析 我第一次读代码的时候,有这么几个疑惑: Q1:为什么不使用 SET key value [expiration EX seconds|PX milliseconds] [NX|XX] 这个指令来实现key的自动过期呢,反而放到应用代码判断key是否过期? A1:我们的分布式锁开发的时候SET命令还不支持NX、PX

Linux安装Redis

匆匆过客 提交于 2021-02-02 02:49:45
1、下载Redis http://www.redis.io/download 或直接下载: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz 2、解压到指定目录: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make && make install 3、修改redis.conf daemonize yes //以后台进程方式运行 4、启动 Redis 服务 src/redis-server 或者 src/redis-server redis.conf 5、停止redis服务: src/redis-cli shutdown 6、客户端连接 src/redis-cli 7、客户端连接基本操作 添加: set key value 删除: del key 是否存在: exists key 取出当前匹配的所有key keys * 设置过期时间 expire key 10(单位秒) 移动larry键值对到ad4数据库 move key ad4 移除当前key的过期时间 persist lv 重命名key rename 原名 新名 退出连接 quit 服务器基本信息 info 清空当前数据库 flushdb 清除所有数据库 flushall 来源: oschina 链接

微服务网关实战——Spring Cloud Gateway

自作多情 提交于 2021-02-02 00:36:39
导读 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用。本文对Spring Cloud Gateway常见使用场景进行了梳理,希望对微服务开发人员提供一些帮助。 微服务网关SpringCloudGateway 1.概述 Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。 2.核心概念 网关提供API全托管服务,丰富的API管理功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等贡呢。一般来说网关对外暴露的URL或者接口信息,我们统称为路由信息。如果研发过网关中间件或者使用过Zuul的人,会知道网关的核心是Filter以及Filter Chain(Filter责任链)