redis分布式

net core WebApi——缓存神器Redis

别说谁变了你拦得住时间么 提交于 2019-11-30 23:53:37
原文: net core WebApi——缓存神器Redis 目录 前言 Redis 使用 RedisUtil 测试 小结 前言 中秋过完不知不觉都已经快两周没动这个工程了,最近业务需要总算开始搞后台云服务了,果断直接net core搞起,在做的中间遇到了不少问题,这个后续会一点点列出来包括解决方法,今天就先把之前挖的坑填一个。 Redis 之前在缓存那篇提到过, Cookie , Session , Cache 这几个不同的缓存方式,Cookie是存在客户端浏览器的,Session实质上也是客户端的存储,至于Cache是服务端的,但是如果是分布式的话,这几个方式可能除了Cookie其他两个都要有点儿问题,毕竟一台服务只存储自身一台,如果多台的话,需要涉及到多服务的交互,比如一台服务做了Cache存储,需要给其他服务发送内部信号或是http请求,其他服务根据请求执行对应操作。 当然这是在没有用到 Redis 的前提下,Redis是解决分布式缓存的神器,相当于是自身一台服务器专门处理数据的读写,可以理解为数据服务器(个人感觉。。。),至于自己业务的分布式只是为了业务需要去执行,需要用到数据缓存即可直接调用Redis的读写操作(当然,各个服务的Redis配置要保持一致)。 Redis的安装和配置在 Linux配置部署_新手向(四)——Redis安装与配置 已经说过

15-scrapy-redis两种形式分布式爬虫

倾然丶 夕夏残阳落幕 提交于 2019-11-30 23:46:08
什么叫做分布式爬虫?   分布式爬虫,就是多台机器共用一个scrapy—redis程序高效爬取数据,   为啥要用分布式爬虫?     其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url。(多台机器无法共享同一个调度器)     其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储。(多台机器无法共享同一个管道) scrapy-redis组件分布式爬虫:   scrapy-redis为我们封装好了多台机器共用的管道以及调度器,导入包调用链接即可实现分布式爬虫。  分布式实现的方式:1、基于该组件的RedisSpider类           2、基于该组件的RedisCrawlSpider类 分布式实现流程:上述两种不同方式的分布式实现流程是统一的。   1、下载scrapy-redis组件: pip3 install scrapy-redis   2、导包: from scrapy_redis.spiders import RedisCrawlSpider   3、修改爬虫文件的代码     1)将当前爬虫类的父类修改成RedisCrawlSpider     2)将start_urls删除     3)添加一个新属性redis_key = "ts":可以被共享调度器中的队列名称 # -

redis笔记

时光毁灭记忆、已成空白 提交于 2019-11-30 23:01:22
## 今日内容 1. redis 1. 概念 2. 下载安装 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redis # Redis 1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 1.1.1. NOSQL和关系型数据库比较 优点: 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。 2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。 3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。 4

redis cluster集群

余生颓废 提交于 2019-11-30 22:21:09
前面博客我们已经学习到sentinel问题?为什么还要讲cluster呢? 使用Redis Sentinel 模式架构的缓存体系,在使用的过程中,随着业务的增加不可避免的要对Redis进行扩容,熟知的扩容方式有两种,一种是垂直扩容,一种是水平扩容。垂直扩容表示通过加内存方式来增加整个缓存体系的容量比如将缓存大小由2G调整到4G,这种扩容不需要应用程序支持;水平扩容表示表示通过增加节点的方式来增加整个缓存体系的容量比如本来有1个节点变成2个节点,这种扩容方式需要应用程序支持。垂直扩容看似最便捷的扩容,但是受到机器的限制,一个机器的内存是有限的,所以垂直扩容到一定阶段不可避免的要进行水平扩容,如果预留出很多节点感觉又是对资源的一种浪费因为对业务的发展趋势很快预测。Redis Sentinel 水平扩容一直都是程序猿心中的痛点,因为水平扩容牵涉到数据的迁移。迁移过程一方面要保证自己的业务是可用的,一方面要保证尽量不丢失数据所以数据能不迁移就尽量不迁移。针对这个问题,Redis Cluster就应运而生了,下面简单介绍一下RedisCluster。 Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的

从原理到场景 系统讲解 PHP 缓存技术☆

匆匆过客 提交于 2019-11-30 22:11:41
缓存已经成了项目中是必不可少的一部分,它是提高性能最好的方式,例如减少网络I/O、减少磁盘I/O 等,使项目加载速度变的更快。 缓存可以是CPU缓存、内存缓存、硬盘缓存,不同的缓存查询速度也不一样(CPU缓存 优于 内存缓存 优于 硬盘缓存)。 接下来,给大家逐一进行介绍。 浏览器缓存 浏览器将请求过的页面存储在客户端缓存中,当访问者再次访问这个页面时,浏览器就可以直接从客户端缓存中读取数据,减少了对服务器的访问,加快了网页的加载速度。 强缓存 用户发送的请求,直接从客户端缓存中获取,不请求服务器。 根据 Expires 和 Cache-Control 判断是否命中强缓存。 代码如下: header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600). ' GMT'); header("Cache-Control: max-age=3600"); //有效期3600秒 Cache-Control 还可以设置以下参数: public:可以被所有的用户缓存(终端用户的浏览器/CDN服务器) private:只能被终端用户的浏览器缓存 no-cache:不使用本地缓存 no-store:禁止缓存数据 协商缓存 用户发送的请求,发送给服务器,由服务器判定是否使用客户端缓存。 代码如下: $last_modify = strtotime(

Redis 基础知识

坚强是说给别人听的谎言 提交于 2019-11-30 20:48:58
1.概述 在Java Web开发中,使用数据库来进行数据的存储。 高并发、大数据量 例如:商品抢购的场景、主页访问量瞬间较大的情况,单一使用数据库来保存数据的系统会因为面向磁盘读/写速度比较慢的问题而存在性能弊端,数据库容易宕机。 2.NoSQL技术 —— 基于内存的数据库,并且提供一定的持久化功能 Redis 支持每秒10w的读写操作、集群、分布式、主从同步等配置、支持一定的事务能力(保证了高并发场景下数据的安全和一致性) MongoDB 3.Redis在Java Web中的应用场景 存储缓存用的数据 需要高速读/写的场合使用它快速读/写 读操作的次数远超写操作 限于成本的原因,一般只使用Redis存储一些常用的和主要的数据 需要考虑: 业务数据常用吗?命中率如何? 该业务是读操作多?还是写操作多?写操作多的没必要使用缓存 业务数据大小如何 “关于使用内存存储数据,我知道谷歌好像就是把所有互联网的数据都存储在内存条的,所以才会有如此高质量、高效的搜索,但它毕竟是谷歌……” 高并发: 天猫双11、抢红包、抢演唱会门票等 如果使用数据库来进行处理,轻则造成用户体验极差用户量流失,重则数据库瘫痪,服务宕机。 当一个请求到达服务器时,只是把业务数据在 Redis 上进行读写,而没有对数据库进行任何的操作,这样就能大大提高读写的速度,从而满足高速响应的需求; 但是这些缓存的数据仍然需要

缓存雪崩与缓存穿透

若如初见. 提交于 2019-11-30 19:54:39
缓存雪崩与缓存穿透 今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一、缓存雪崩 1.1 什么是缓存雪崩? 首先我们先来回答一下我们为什么要用缓存(Redis): 1、提高性能能:缓存查询是纯内存访问,而硬盘是磁盘访问,因此缓存查询速度比数据库查询速度快 2、提高并发能力:缓存分组了部分请求,支持更高的并发 现在有个问题, 如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了 。 我们都知道Redis不可能把所有的数据都缓存起来( 内存昂贵且有限 ),所以Redis需要对数据设置过期时间,将已经过期的键值对删除,它采用的是惰性删除+定期删除两种策略对过期键删除。 如果缓存数据 设置的过期时间是相同 的,并且Redis恰好将这部分数据全部删光了。这就会导致在这段时间内,这些缓存 同时失效 ,全部请求到数据库中。 这就是缓存雪崩 : Redis挂掉了,请求全部走数据库。 对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。 缓存雪崩如果发生了,很可能就把我们的数据库 搞垮 ,导致整个服务瘫痪! 1.2 如何解决缓存雪崩? 对于“对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。”这种情况,非常好解决: 解决方法:在缓存的时候给过期时间加上一个 随机值

互联网公司分布式集群架构图入门解析(简单通俗易懂,超详细)

穿精又带淫゛_ 提交于 2019-11-30 19:42:50
一、小型公司网络架构 狗子是某大学计算机专业本科应届毕业生,由于自己的技术不错,再加上互联网产业的巨大利润的驱使,狗子决定走上创业这条路,于是,狗子联合了同学二黑,鸡子,狗蛋等人花费了几个月的时间写出了一套网站,是关于足球资讯的pc端网站加上手机APP客户端。现在产品测试成功了,准备发布了,狗子想到了两个问题: 1.网站需要服务器 狗子之前所有的代码测试都是在本地服务器或者局域网上进行的,现在需要把产品发布到外网上,让所有的人都能访问,因此再用自己的电脑当服务器显然很不现实,于是,狗子去买了一台服务器,在上面装了jdk,tomcat,mysql等必备环境,把网站搭了起来,又经过了很多测试,运行毫无问题了,通过网站的ip可以访问并且实现功能了,而且app的后台也在服务器上测试成功了,目前公司的架构如图所示: 那么问题又来了: 2.网站需要域名 显然,如果让各地的用户需要记住你服务器的ip地址才能访问你的网站的话,那是会被用户拿刀追着砍的。因此,狗子需要一个便于记住的域名,以后在浏览器输入这个域名就能够访问这个网站,所以,狗子拿着申请下来的各种资质,找到了域名贩卖商,一般是腾讯阿里巴巴这种代理贩卖商,花了一笔钱,从它们的手上购买了域名,彻底实现了网站通过域名就能访问的功能。这里需要讲解一下通过域名访问的原理: 域名访问原理 通过ip访问相当于用户直接访问输入的ip所指向的服务器

redis

那年仲夏 提交于 2019-11-30 18:41:47
Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存? 原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 个人观点: Cache Aside Pattern 在更新了数据库 再删除缓存的过程中还是有一段时间的不一致, 如果严格要求一致,可以先将数据设置为不可用,请求过来block住,然后再操作完后设置为可用。 并且缓存没有再读数据库可以设置只能一个读数据库,其他的block,防止请求压垮数据库。所以可以再有一个中间层来控制一下。 目前还没有找到合适的现有控件,后续发现补充 redis特点: 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型,支持string,list,set,sorted set,hash 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写

从原理到场景 系统讲解 PHP 缓存技术(全)

夙愿已清 提交于 2019-11-30 15:07:06
概述 缓存已经成了项目中是必不可少的一部分,它是提高性能最好的方式,例如减少网络I/O、减少磁盘I/O 等,使项目加载速度变的更快。 缓存可以是CPU缓存、内存缓存、硬盘缓存,不同的缓存查询速度也不一样(CPU缓存 优于 内存缓存 优于 硬盘缓存)。 接下来,给大家逐一进行介绍。 浏览器缓存 浏览器将请求过的页面存储在客户端缓存中,当访问者再次访问这个页面时,浏览器就可以直接从客户端缓存中读取数据,减少了对服务器的访问,加快了网页的加载速度。 强缓存 用户发送的请求,直接从客户端缓存中获取,不请求服务器。 根据 Expires 和 Cache-Control 判断是否命中强缓存。 代码如下: header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600). ' GMT'); header("Cache-Control: max-age=3600"); //有效期3600秒 Cache-Control 还可以设置以下参数: public:可以被所有的用户缓存(终端用户的浏览器/CDN服务器) private:只能被终端用户的浏览器缓存 no-cache:不使用本地缓存 no-store:禁止缓存数据 协商缓存 用户发送的请求,发送给服务器,由服务器判定是否使用客户端缓存。 代码如下: $last_modify =