redis分布式

redis的介绍

怎甘沉沦 提交于 2019-12-16 20:27:49
一、为什么使用 解决应用服务器的cpu和内存压力 减少io的读操作,减轻io的压力 关系型数据库的扩展性不强,难以改变表结构 二、优点: nosql数据库没有关联关系,数据结构简单,拓展表比较容易 nosql读取速度快,对较大数据处理快 三、适用场景: 数据高并发的读写 海量数据的读写 对扩展性要求高的数据 四、不适场景: 需要事务支持(非关系型数据库) 基于sql结构化查询储存,关系复杂 五、Redis结构: Redis是一个开源的key—value型数据库,支持string、list、set、zset和hash类型数据。对这些数据的操作都是原子性的,redus为了保证效率会定期持久化数据。 六、使用场景: 配合关系型数据库做高速缓存 缓存高频次访问的数据,降低数据库io 分布式架构,做session共享 可以持久化特定数据。 利用zset类型可以存储排行榜 利用list的自然时间排序存储最新n个数据 七、Linux下redis: redis目录:usr/local/bin linux下redis常用命令: redis-benchmark:性能测试工具 redis-server:启动redis服务器 redis-cli:启动redis客户端,操作入口 八、Redis基础知识 端口:6379 默认16个数据库,下标从0开始 单线程:redis是单线程+io多路复用

redis缓存策略

烈酒焚心 提交于 2019-12-16 14:44:56
常用策略有“求留余数法”和“一致性HASH算法” redis存储的是key,value键值对 一、求留余数法 使用HASH表数据长度对HASHCODE求余数,余数作为索引,使用该余数,直接设置或访问缓存。 计算key的HashCode 缺点:增加服务器,由于除数不一样了,之前缓存的数据都没办法访问了,即不支持热部署【扩展】 二、一致性HASH算法 一致性HASH算法通过一个叫做一致性HASH环的数据结构,实现KEY到缓存服务器的HASH映射。 算法过程如下: 先构造一个0到 2 32 的整数环,然后将服务器节点的Hash值,放在该环上(可以理解为将你的ip做hash,将ip的HashCode放在环上)。然后根据需要缓存的数据的Key,计算Key的HashCode,然后在环上,顺时针查找距离这个Key的Hash值最近的缓存服务器的节点,然后将Value,存储到该服务器节点上。 这是当缓存服务器集群需要扩容的时候,只需要将新加入的节点的HashCode,放入一致性Hash环中,由于Key是顺时针查找距离最近的节点,因此,新加入的节点只影响整个环中的一小段。 请参见上图,如果我们新加入的服务器节点Node3,在Node1和Node2之间,如下图: 那么受影响的区域,只是Node2到Node3之间(顺时针)的缓存,此区间的缓存数据,加入节点之前是缓存在Node1上的

NoSQL之Redis

岁酱吖の 提交于 2019-12-16 13:36:01
一、NoSQL NoSQL = Not Only SQL(不仅仅是 SQL) ,也解释为 non-relational(非关系型数据库)。在 NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。 1. MySQL的瓶颈 无法应对每秒上万次的读写请求, 无法处理大量集中的高并发操作。关系型数据的是 IO 密集的应用。 硬盘 IO 也变为性能瓶颈 无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据。 关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大。 2. NoSQL的优势 大数据量,高性能 NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。 关系型数据库(例如 MySQL)使用查询缓存。这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能不高。NoSQL 的缓存性能要高的多。 灵活的数据模型 NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。 尤其在快速变化的市场环境中,用户的需求总是在不断变化的。 高可用 NoSQL 在不太影响性能的情况

redis在PHP中的基本使用案例

人盡茶涼 提交于 2019-12-16 08:09:32
//利用Redis类进行操作 //实例化Redis类 $redis = new Redis(); //选择指定的redis数据库连接,默认端口号为6379 $redis->connect('127.0.0.1', 6379);   //$redis->auth('设置的密码'); //普通set/get操作 $redis->set(‘library’, ‘predis’); $retval = $redis->get(‘library’); echo $retval; //显示 ‘predis’ //setex set一个存储时效 $redis->setex(‘str’, 10, ‘bar’); //表示存储有效期为10秒 //setnx/msetnx相当于add操作,不会覆盖已有值 $redis->setnx(‘foo’,12); //true $redis->setnx(‘foo’,34); //false //getset操作,set的变种,结果返回替换前的值 $redis->getset(‘foo’,56);//返回56 // incrby/incr/decrby/decr 对值的递增和递减 $redis->incr(‘foo’); //foo为57 $redis->incrby(‘foo’,2); //foo为59 //exists检测是否存在某值 $redis-

Zookeeper和Redis中的选举工作

倾然丶 夕夏残阳落幕 提交于 2019-12-15 19:46:52
前言 最近在准备复习了,想着把以前的知识串一串,零零散散的总是很容易忘,知识还是要成体系的,这也是互联网工程师的必备素养吧,要不每天都有新知识,等到35还怎么和年轻人拼,只有沉淀出自己的东西,才能不被淘汰。 现在到处都是分布式、高并发,我们用的很多东西像数据库之类的到了生产环境都会是集群部署,每台机器都是一个节点,很多场景又会分为主从节点,比如主写从读啊之类的,当然,说到这里少不了节点挂了的情况,节点挂了一般问题也不大,现在故障转移各种工作已经做的很到位了,毕竟要保证高可用嘛。今天就来唠一下,节点挂了后一些相关的选举工作,本文主要以 Zookeeper 和 Redis 为例来说明。 Redis选举领头Sentinel Sentinel是Redis实现高可用的保证 。Sentinel系统作用就是监视Redis服务器集群,它可以不停的获得redis集群状态,当一个主节点挂了,故障转移操作会在从节点中选出一个新的主节点,这里故障转移就是由Sentinel来主导完成的。 不要把Sentinel想的太复杂, 它其实就是一个特殊工作模式的Redis服务器 而已,Redis是集群部署的,这里的Sentinel也是要集群部署的,要是非单点部署,你的Sentinel挂了,此时的Redis集群就GG了。 接着上边说,当主服务器节点挂了,Sentinel系统就会选出一个 领头的Sentinel

python爬虫--分布式爬虫

耗尽温柔 提交于 2019-12-15 18:51:04
Scrapy-Redis分布式爬虫 介绍 scrapy-redis巧妙的利用redis 实现 request queue和 items queue,利用redis的set实现request的去重,将scrapy从单台机器扩展多台机器,实现较大规模的爬虫集群 scrapy-redis是基于redis的scrapy组件 • 分布式爬虫 多个爬虫实例分享一个redis request队列,非常适合大范围多域名的爬虫集群 • 分布式后处理 爬虫抓取到的items push到一个redis items队列,这就意味着可以开启多个items processes来处理抓取到的数据,比如存储到Mongodb、Mysql • 基于scrapy即插即用组件 Scheduler + Duplication Filter, Item Pipeline, Base Spiders. scrapy-redis架构 • 调度器(Scheduler) scrapy-redis调度器通过redis的set不重复的特性,实现了Duplication Filter去重(DupeFilter set存放爬取过的request)。 Spider新生成的request,将request的指纹到redis的DupeFilter set检查是否重复,并将不重复的request push写入redis的request队列。

cerely-分布式异步任务队列

拥有回忆 提交于 2019-12-15 14:10:09
Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。 在Celery中几个基本的概念,需要先了解下,不然不知道为什么要安装下面的东西。概念:Broker、Backend。 broker broker是一个消息传输的中间件或消息队列,可以理解为一个邮箱。 每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行对于的程序执行。其中Broker的中文意思是 经纪人 ,其实就是一开始说的 消息队列 ,用来发送和接受消息。这个Broker有几个方案可供选择:RabbitMQ (消息队列), Redis (缓存数据库), 数据库 (不推荐),等等 backend 用于存储这些消息以及celery执行的一些消息和结果。 Backend是在Celery的配置中的一个配置项 CELERY_RESULT_BACKEND ,作用是保存结果和状态,如果你需要跟踪任务的状态,那么需要设置这一项,可以是Database backend,也可以是Cache backend,具体可以参考这里: CELERY_RESULT_BACKEND 。 brokers,官方推荐是 rabbitmq 和

Redis基础知识入门

…衆ロ難τιáo~ 提交于 2019-12-15 09:13:49
参考 Redis【入门】就这一篇! Redis概述 平常做Web小项目时都是直接使用mysql等数据库,在磁盘上进行数据的存取,由于一般的系统任务中通常不会存在高并发的情况,所以没什么问题,但是一旦涉及大数据量的需求,比如商品抢购使得主页访问量瞬间极大的时候,如果仅仅使用数据库来保存数据,会因为磁盘读/写速度太慢而造成数据库系统瘫痪。 NoSQL 技术 **MySQL(关系型数据库)**需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当查询量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索。 NoSQL(非关系型的数据库) 存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,不需要像mysql那样需要找到对应的库、表(通常是多个表)以及字段。 NoSQL数据可以存储在内存里,查询速度非常快。 NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库。 NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式 Redis 和 MongoDB 是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作。 Redis值的五种类型 String 整数,浮点数或者字符串 Set 集合 Zset 有序集合 Hash 散列表 List 列表 Redis在Web开发中的应用

reids的哨兵和集群

萝らか妹 提交于 2019-12-15 05:08:26
一.哨兵机制 任务:   有了主从复制的实现以后,如果想对主服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。顾名思义, 哨兵的含义就是监控redis系统的运行状态 。可以启动多个哨兵,去监控redis数据库的运行状态。其主要功能有两点:   a、监控所有节点数据库是否在正常运行。   b、master数据库出现故障时,可以自动通过投票机制,从slave节点中选举新的master,实现将从数据库转换为主数据库的自动切换。   一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健。此时,不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会相互监控。在这里,建议大家哨兵至少部署3个,并且使用奇数个哨兵。   Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: a、 监控 (Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 b、 提醒 (Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 c、 自动故障迁移 (Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作

java分布式(第四章)——Redis

假如想象 提交于 2019-12-14 10:59:49
老套路 1、什么是Redis 2、为什么要用Redis 3、怎么用Redis 4、使用Redis过程中遇到的问题 1、什么是Redis   介绍Redis之前先了解一下Nosql(非关系型数据库)   我们都知道MySql是一种关系型数据库,那什么是非关系型数据库呢?它又是做什么呢?   为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。   Redis是使用c语言开发的一个高性能 键值数据库 。Redis通过 键值类型 存储数据。    Redis使用场景 :缓存(数据查询、短连接、新闻内容、商品内容等等)   (最多使用) 分布式集群架构中的session分离   聊天室的在线好友列表   任务队列   (秒杀、抢购、12306等等) 应用排行榜   网站访问统计   数据过期处理(可以精确到毫秒) 2、为什么要用Redis   为了解决高并发、高可用、高可扩展,大数据存储等一系列问题,MySql不能很好为我们提供服务,引入了Redis。   那么为什么要用Redis呢?   1、速度快:首先Redis由C语言编写,纯内存操作,第二个 核心是基于非阻塞的IO多路复用机制,单线程避免了多线程的频繁上下文切换问题   2、支持多种数据类型,5种数据类型: String、Hash