redis list应用–大型网站缓冲队列服务器
1. 起因, 随着twitter sina微博,腾讯微博的开放平台相继推出, 大部分和互联网相关的公司又多了一个营销的手段:信息同步。也即是用户把自己的新浪微博账号或者腾讯微博账号和你的网站关联起来了,用户在你的网站产生的 任何信息都可以同步发送到sina微博,qq微博上去(前提是经过用户的允许,这样用户既可以不需要同样的信息复制到多个网站, 又可以相应的推广你的网站的入口曝光率)。目前同步比较好的例子是:微博通,街旁,切客等。
2. 为什么要用缓冲队列服务,我们举个例子。如果你做了一个网站,用户在你的网站上关联了sina微博,QQ微博,开心网,人人网, 豆瓣,twitter, facebook(可能还要在国外设置代理)等等第三方平台,用户产生了一个动作后(比如发了一条心情状态),你的网站要同时同步到这些网站去,每个第三 方平台都要经过多次外网http请求,所有的这些请求加起来是可能是很长的时间(几秒, 甚至几十秒),这对于前段用户肯定肯定是无法忍受的。所以这个时候同步信息的话必须采取异步的方式,也就是用户在你的网站发表一个状态服务端只是把这条状 体对应的信息存储起来, 然后就提示用户发表成功, 具体的信息同步是后端以脚本的方式异步运行的。用户通俗的话来说就是用户先发表后同步,由于校本执行速度很快, 用户几乎感觉不出来同步的时间差。你也许会问我怎么知道哪些信息要同步到第三方平台去呢,这也就是使用redis使用缓冲队列服务器的原因,当用户发表信 息后,我们同事把信息写入缓冲队列服务器,后台脚本会不停的去检查缓冲队列服务器是否有数据,如果有数据则取出发送到第三方开放平台。
3. 系统扩展性
a). 如果脚本处理过慢,可能造成缓冲队列拥堵,我们可能通过扩展后台脚本个数来加快同步到第三方平台的处理速度。
b). 如果需要同步的信息量过大, 造成写入队列的并发数极大,肯能通过扩展队列服务来达到分散减压的目的(基本不会出现)。
5. 效率如何 假设你的网站每天产生100W条信息 需要同步到第三方平台。
redis官方测试数据(SET操作每秒钟 110000 次,GET操作每秒钟 81000 次)。
一个脚本每天的同步量, 86400/2 = 43200, (假设平均每同步一条信息花费时间为2s,) 一个脚本每天大概可以同步4W条数据。
平均每秒同步的数据 100W/86400 < 12个 高峰时期扩大十倍也就是每秒 120条信息。由此可见每天100W 甚至 1000W的信息同步量对redis来说都是没有任何压力的。
我们只需要加快脚本处理的速度即可, 100W数据只需要同事25个脚本负责同步即可,(数据量增加了,扩展起来非常方面)。
总结,此方式已经应用于国内某LBS社区,每天的PV大概300W,产生的信息同步量每天大概2W左右。当前是2个脚本负责同步相关操作,队列里面基本没有任何拥堵信息。
分享到:
相关推荐
Redis服务器是一种高性能的键值对数据存储系统,广泛应用于缓存、消息队列、数据库等多个领域。它以内存中的数据结构存储数据,并可定期或在触发条件时将数据持久化到磁盘,确保数据安全。Redis支持丰富的数据类型,...
Redis是一种开源的、基于键值对的数据存储系统,常用于数据缓存、消息队列以及数据库功能。它的名称是Remote Dictionary Server的缩写。Redis以其高效、高性能和丰富的数据结构而受到广泛欢迎。 1. Redis基本原理 ...
Redis是一款高性能的键值对数据库,它以C语言编写,被广泛应用于缓存、消息队列、实时数据存储等多个场景。这个"redis最新安装包.zip"文件包含了Redis服务器的最新版本,供用户下载安装。在本文中,我们将详细介绍...
在这种模式中,生产者负责生成数据并将其放入一个缓冲区(在这里是Redis),而消费者则从该缓冲区取出数据进行处理。Redis作为一个内存数据库,具有快速读写的能力,因此非常适合用作消息队列的底层存储。 在构建...
在Redis秒杀系统中,为了防止瞬时大量请求导致服务器崩溃,通常会使用队列来缓冲请求。`queue_redis`可能是基于Redis的队列实现,如使用`LPUSH`将请求推入列表,后台工作进程再用`BRPOP`依次处理。这种方式可以控制...
Redis常用于缓存、计数、消息队列、分布式锁、session共享、实时排名等场景,广泛应用于社交网络、推荐系统、物联网(IoT)等领域。 六、Redis与其他数据库比较 相比传统关系型数据库,Redis具有以下优势: 1. **高速...
Redis List的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用这个数据结构。 List类型主要用于队列和栈,先进先出,...
Redis是一款高性能的键值对数据库,常用于数据缓存、消息队列以及分布式计算等多种场景。这份"redis笔记.rar"包含的"redis笔记.pdf"应该是一份详细的学习指南,非常适合初学者了解和掌握Redis的基本概念、操作命令...
- 数据类型:Redis支持丰富的数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。 - 持久化:Redis通过RDB和AOF两种方式进行数据持久化,确保在服务器重启后能恢复数据。 ...
Redis,作为一个高性能的键值数据库,其在IT领域中的应用广泛,尤其在缓存、消息队列、计数系统等方面有着显著的表现。标题中的"redis-28.24.tar.gz"表明这是一个Redis的源码包,版本为2.8.24。接下来我们将深入探讨...
- 客户端连接管理:包括连接池、命令缓冲、命令重试等机制,确保高效稳定地与Redis服务器通信。 5. **性能优化**: - **内存管理**:Redis使用jemalloc内存分配器,有效减少内存碎片。 - **LRU和LFU策略**:通过...
- **Access Control List (ACL)**:提供细粒度的权限管理,控制不同用户对Redis服务器的操作权限。 6. **事务与Lua脚本** - **Transactions**:支持原子性的多条命令执行,保证操作的完整性。 - **Lua脚本**:在...
3. 列表:支持双向链表,常用于实现消息队列,`list.h`和`list.c`提供了相关的实现。 4. 集合:无序不重复元素集合,`set.c`和`set.h`。 5.有序集合:有序的集合,使用跳跃表(skiplist)实现,可以在O(log N)时间内...
4. **方便的异步支持**:对于需要高性能并发访问 Redis 的应用,Python-hotredis 可能也支持异步操作(具体取决于库的最新版本),这使得在高并发环境下能够充分利用多核 CPU 和 I/O 资源。 5. **错误处理**:库中...
1. 数据结构:Redis支持丰富的数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),这些数据结构为不同的应用场景提供了便利。 2. 持久化:为了防止数据丢失,Redis提供了两种...
Redis 的核心数据类型包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构具有不同的操作和用途,如字符串用于简单键值存储,哈希用于存储对象,列表用于消息...
本实例将探讨如何利用`LinkedBlockingQueue`和Redis队列来实现数据写入MySQL的过程,这对于大型系统中的批量数据处理和并发控制具有重要意义。 首先,`LinkedBlockingQueue`是Java并发库`java.util.concurrent`中的...
在这个场景下,Redis作为一个高效的消息队列被广泛应用。 首先,我们需要理解为什么需要消息队列。在高并发的系统中,生产者(如应用程序)可能会快速地生成日志,而消费者(如日志分析服务)可能无法同步地处理...
主从复制是指将一台 Redis 服务器设置为主服务器,其他 Redis 服务器作为从服务器。从服务器会定期从主服务器复制数据,从而实现数据的高可用性和冗余备份。 #### 19. 同步原理 主从同步的过程分为全量同步和增量...