redis分布式

Redis消息队列和KafKa优劣对比

爷,独闯天下 提交于 2019-12-02 22:38:38
Redis作为消息队列升级为KafKa记录   项目当中运营人员发送指定匹配用户(最高用户量几十万的级别)特定的消息,所以这块是确确实实需要使用专业级别的消息队列中间件的,但是可能由于当时开发的各种历史原因导致使用了Redis的队列结构来作为消息队里lpush,blpop等命令,项目开发进展到现在,用户量不断增大,包括不同的消息继承进来,包括举报反馈,小纸条(用户间消息发送),活动奖励通知,等等一些不同的消息进来以后,Redis可能会变得不那么可靠.   Redis作为消息队列   Redis的pub-sub模式非常像西式快餐一样,快产快消,全都是因为Redis是使用内存来做存取,所有你生产的消息立马会被消费者一次性全部处理掉,并且没有留下任何痕迹, 同时因为内存总是宝贵的,所以内存上会有限制,当生产者以及消费者上来的时候也会对redis的效率,还有Redis在处理发布和消费big size(10K+的文件)的数据的时候会表现出无法忍受的缓慢   如果有以下场景可以考虑使用Redis作为消息队列   如果你的需求是快产快消的即时消费场景,并且生产的消息立即被消费者消费掉   如果速度是你十分看重的,比如慢了一秒好几千万这种   如果允许出现消息丢失的场景   如果你不需要系统保存你发送过的消息,做到来无影去无踪   需要处理的数据量并不是那么巨大 KafKa作为消息队列  

Redis的初识

匿名 (未验证) 提交于 2019-12-02 22:09:29
简介   已经有了Membercache和各种数据库,Redis为什么会产生?Redis纯粹为应用而产生,它是一个高性能的key-value数据库。Redis的出现,很大程序补偿了Memcached这类key-value存储的不足,解决了断电后数据库完全丢失的情况;在部分场合可以对关系数据库起到很好的补偿作用。性能测试结果表示SET操作每秒钟可达110000,GET操作每秒81000次(当然不同的服务器配置性能不同)。   Redis是一种面向"键-值"对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。和Memcache类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,支持各种不同方式的排序。 Redis与Memcache一样,为了保证效率,数据都是缓存在内存中,区别的是Redis会周期性的把更新的数据写入磁盘或者修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。   Redis目前提供四种数据类型:string、list、set、zset   Redis的存储分为内存存储、磁盘存储和log文件三部分

Redis 使用过程中遇到的具体问题

匿名 (未验证) 提交于 2019-12-02 21:53:32
1.缓存雪崩和缓存穿透问题   1.1缓存雪崩     简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。   解决办法: 本地 ehcache 缓存 + hystrix 限流&降级 ,避免 MySQL 崩掉 encache:   Ehcache是纯java的开源缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它主要面向通用缓存、Java EE和轻量级容器,具有内存和磁盘存储、缓存加载器、缓存扩展、缓存异常处理程序。    应用场景:   使用纯java的ehcache作为本地缓存   Reids 作为远程分布式缓存   解决redis缓存压力过大,提高缓存速度,以及缓存性能。 redis和Ehcache缓存的区别   如果是单个应用或者对缓存访问要求很高的应用,用ehcache。   如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。 实际工作中使用Ehcache    我们在项目中使用集中式缓存(Redis或者式Memcached等),通常都是检查缓存中是否存在 期望值的数据,如果存在直接返回,如果不存在就查询数据库然后在将数据库缓存,这个时候如果缓存系统因为某些原因宕机,造成服务无法访问,那么大的量请求直接穿透到数据库,最数据库压力非常大。

Redis哨兵模式 (sentinel) (主从复制,读写分离)

邮差的信 提交于 2019-12-02 21:24:59
Redis的集群方案大致有三种: 1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。 一、sentinel哨兵模式介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。 sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。 其结构如下: <ignore_js_op> Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端

MongoDB 或者 redis 可以替代 memcached 吗?

久未见 提交于 2019-12-02 16:24:40
3个场景完全不同的东西。1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存;2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化;3.mongodb是bson结构、介于rdb和nosql之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储。 (memcached, radis) 和 (mongoDB) 的区别有两维 一是key value store vs. document database 一是内存型vs.硬盘型. 具体能不能替代, 还要看题主的活儿是什么. radis和memcached基本是一回事, 应该可以替代. 如果memcached用的原因就是系统小+懒, 现在系统长大了不好用了要找permanent solution, mongoDB也不一定不是个好东西. 真心请教:从关系型数据库来到NoSQL的第一个问题:如何利用redis做类似在mysql中的级联查询? 1.需求场景:用户表,文章表,赞表,用户写的文章被赞,根据文章被赞的数量降序(如果被赞的数量相同按照文章创建时间升序)排序top100文章 2.三张表的表关系: user(id,username,figure) <---------------------------------------- —————↑——————————————————

redis基础数据结构

ぃ、小莉子 提交于 2019-12-02 13:38:54
string string相当于Java的String 常用命令 INCR/DECR INCRBY/DECRBY GET/SET MGET/MSET GETSET APPEND SET 赋值操作 O(1) SET key value [EX seconds] [PX milliseconds] [NX|XX] EX 过期参数单位为秒 PX 过期参数单位为毫秒 NX key不存在时赋值 XX key存在时赋值 对已存在的key执行SET会使原key的ttl失效 使用场景 简单缓存 计数器 分布式锁 内部结构 redis的字符串实现称为SDS(Simple Dynamic String,简单动态字符串) 相比于C字符串的优点:SDS获取字符串长度的时间复杂度为O(1);字符串不会溢出;减少修改字符串长度时的内存分配次数;二进制安全(可以保存各种格式的编码);兼容sting.h … // SDS实现 --sds.h struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; /* buf[]已使用的长度,也就是字符串长度 */ uint8_t alloc; /* buf[]的大小 */ unsigned char flags; /* 标志位,定义sdshdr类型 */ char buf[]; /* 存储字符串的数组 */ };

商城项目技术整理

六月ゝ 毕业季﹏ 提交于 2019-12-02 12:56:29
商城项目技术整理 项目相关问题 为什么要使用分布式项目?有什么缺点? 因为传统模式项目模块之间耦合度太高,其中一个升级其他都要升级,且开发困难,各个团队都要整整合在一起,而分布式项目把模块拆分,使用接口通信,降低模块之间的耦合度,对项目进行了拆分,各个团队负责不同的子项目,需要其余项目的功能时,只需要调用接口就可以。 缺点 :系统之间交互需要使用远程通信,接口开发增加工作量。服务越来越多,需要管理每个服务的地址,调用关系错综复杂,难以理清依赖关系。 项目使用的第三方组件 vsftpd文件上传服务器 为什么要用Vsftp文件服务器? 因为在分布式项目下,项目可能是在多个不同的web服务器下运行,上传的图片如果只在一台服务器下,其他服务器就无法访问了,这样将造成资源的极大浪费。 考虑到项目以后打包上传服务器,随着文件的增多,系统打包变慢,需要采用专门的文件服务器 Redis 为什么要使用Redis,有什么优点? 这个问题在大并发,高负载的网站中必须考虑。Redis数据库中的所有数据都存储在内存中,由于内存的读写速度远快于硬盘,因此Redis在性能上比其他基于硬盘存储的数据库有非常明显的优势。 并发:在大并发的情况下,所有的请求直接访问数据库,数据库出现连接异常。这个时候,就需要使用Redis做一个缓存操作,让请求先访问Redis缓存,而不直接访问数据库。 优点: 1、运行在内存

scrapy-redis组件

徘徊边缘 提交于 2019-12-02 10:58:40
文章出处 https://www.cnblogs.com/wupeiqi/articles/6912807.html scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重规则(被调度器使用) pipeline - 数据持久化 scrapy-redis组件 1. URL去重 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 定义去重规则(被调度器调用并应用) a. 内部会使用以下配置进行连接Redis # REDIS_HOST = 'localhost' # 主机名 # REDIS_PORT = 6379 # 端口 # REDIS_URL = 'redis://user:pass@hostname:9001' # 连接URL(优先于以上配置) # REDIS_PARAMS = {} # Redis连接参数 默认:REDIS_PARAMS = {'socket_timeout': 30,'socket_connect

Redis集群(Cluster)

≯℡__Kan透↙ 提交于 2019-12-02 09:22:45
Redis集群是可以在多个Redis节点之间进行数据共享的架构。Redis集群通过分区容错(Partiton)来提高可用性(Availability),即使集群中有一部分节点失效或者无法进行通信,集群也可以继续处理请求。 Redis集群模式数据共享 Redis集群有以下特点: 将数据切分到多个Redis节点 当集群中部分节点失效或者无法进行通信时,整个集群仍然可以处理请求。 Redis将数据分片,每个Redis集群中包含16384个哈希槽(hash slot),Redis中存储的每个key都属于这些哈希槽中的一个。 Redis集群中的每个Redis节点负责处理一部分哈希槽,通过这种将哈希槽分布到不同Redis节点的做法使得用户可以很容易的向集群中添加或者删除Redis节点。如向Redis集群中加入节点D,只需将节点A、B、C中的部分哈希槽移动到节点D即可。 Redis集群中的一致性问题 在谈Redis集群一致性问题前,先了解CAP定理。 CAP定理指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者不可兼得,只能同时满足其中的两个 。 Redis集群作为一个分布式系统,也存在相应的问题,Redis对可用性和分区容错性有较好的支持。因此Redis集群模式下数据一致性存在一定的问题

redis和memcache的区别

无人久伴 提交于 2019-12-02 08:16:05
https://www.cnblogs.com/djj123/p/10996636.html 1 、 Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 memcache 还可用于缓存其他东西,例如图片、视频等等。 2 、 Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list , set , hash 等数据结构的存储。 3 、虚拟内存 –Redis 当物理内存用完时,可以将一些很久没用到的 value 交换到磁盘 4 、过期策略 –memcache 在 set 时就指定,例如 set key1 0 0 8, 即永不过期。 Redis 可以通过例如 expire 设定,例如 expire name 10 5 、分布式 – 设定 memcache 集群,利用 magent 做一主多从 ;redis 可以做一主多从。都可以一主一从 6 、存储数据安全 –memcache 挂掉后,数据没了; redis 可以定期保存到磁盘(持久化) 7 、灾难恢复 –memcache 挂掉后,数据不可恢复 ; redis 数据丢失后可以通过 aof 恢复 8 、 Redis 支持数据的备份,即 master-slave 模式的数据备份。 来源: https://www.cnblogs.com/jokmangood/p/11737119.html