Redis在大数据业务中的应用
- 格式:pdf
- 大小:870.46 KB
- 文档页数:25
redis的应用场景Redis是一个高性能的键值对存储系统,因为它拥有非常高的性能和可靠性,因此在许多不同的应用场景中都得到了广泛的应用。
下面是一些Redis应用场景的具体介绍。
1. 缓存服务Redis最常用的场景就是缓存服务,在Web应用中,通常需要频繁地读取数据库内容,而从数据库中读取数据较慢,因此,将数据缓存到Redis中可以大大提高数据的读取速度。
Redis的缓存服务不仅快速,而且可靠,可以有效避免出现大量的请求导致服务器宕机或响应延迟的情况。
2. 计数器Redis的计数器功能非常实用,它可以用来实现概率算法,比如统计用户的访问次数或者某个广告的点击次数等,统计方式可以根据实际业务需求来自定义。
3. 分布式锁Redis还可以用来实现分布式锁,通常的分布式锁实现方式是在数据库中的记录上加锁,但是这种方式会让请求变慢,因此使用Redis存储分布式锁会更快。
4. 数据存储Redis还可以用来存储数据,它支持多种数据类型,比如字符串、哈希表、列表、集合、有序集合等。
因为Redis的性能非常高,因此它可以用来保存应用程序中的一些常用的数据,也可以用来存储进程间的数据等。
5. 消息队列Redis还可以用来实现消息队列,比如在异步任务的处理中,可以将任务数据先放入Redis中,供后续的处理程序异步获取,以避免出现任务堆积等问题。
6. 实时系统在某些实时系统中,如广告系统,Redis的实时性十分重要,它可以快速地存储和查询实时数据,如点击次数、曝光次数等,从而使实时系统的效率和准确性得到更好的保障。
7. 应用状态存储Redis还可以用于存储应用状态,比如在线用户状态、用户购物车状态等,这些状态存在于应用程序内存中,可以随时被访问。
综上所述,Redis拥有非常强的性能和可靠性,能够满足各种不同应用场景的需求,基于Redis处理的应用程序通常具有速度快、可靠性高、性能稳定等优点,因此Redis广泛应用于缓存服务、分布式锁、数据存储、消息队列、实时系统、状态存储等多个领域。
Redis缓存在物联网监控中的应用场景随着物联网技术的快速发展,越来越多的设备和传感器被应用于各个行业的监控系统中。
在大规模监控系统中,实时数据的处理和存储是至关重要的。
由于物联网监控系统通常需要处理大量的实时数据,传统的数据库系统可能无法满足高并发读写和快速响应的需求。
而这时,Redis缓存就展现出其在物联网监控中的广泛应用。
一、实时数据存储与查询物联网监控系统需要实时地采集传感器数据并进行存储和查询。
Redis的内存数据库特性使其能够快速地存储和检索大量实时数据。
传感器数据可以直接存储在Redis中,并通过使用Redis的高效读写操作,快速查询和过滤所需的数据。
二、数据分发与消息队列在物联网监控系统中,设备通常会产生大量的数据,需要将这些数据快速地分发给后端处理系统或其他设备。
Redis提供了可靠的消息队列功能,可以轻松实现数据的分发。
将数据存储到Redis的列表结构中,后端系统通过读取这些列表,实现实时的数据处理和转发。
三、缓存热点数据物联网监控系统中,经常会遇到一些访问频率较高的数据,例如设备状态、警报信息等。
通过将这些热点数据缓存到Redis中,可以大幅度提高系统的性能和响应速度。
Redis的高速缓存特性保证了这些数据的快速读取,并且能够通过设置过期时间自动更新。
四、分布式锁与同步在大规模物联网监控系统中,可能会有多个设备同时对某一资源进行访问。
为了保证数据的一致性和避免冲突,需要使用分布式锁来控制对资源的访问。
Redis提供了分布式锁的实现机制,可以有效地避免并发访问带来的问题,确保系统的稳定性和正确性。
五、实时统计与分析物联网监控系统需要对大量的实时数据进行统计和分析,以便及时发现异常和预警。
Redis的计数器和有序集合等数据结构可以方便地实现实时的数据统计和排名。
通过将数据存储在Redis中,并使用Redis提供的丰富的数据操作命令,可以快速地进行实时的数据分析和决策。
综上所述,Redis缓存在物联网监控中具有广泛的应用场景。
Redis缓存解决访问频繁的数据计算问题随着互联网的快速发展,大数据时代已经来临。
许多应用程序面临着访问频繁的数据计算问题。
在这种情况下,使用缓存技术可以有效提升系统性能。
Redis作为一种高性能的键值存储系统,被广泛应用于解决访问频繁的数据计算问题。
本文将重点讨论如何使用Redis缓存来解决这类问题。
一、Redis缓存的基本原理Redis是一种内存数据库,它将数据存储在内存中,以实现高速的读写性能。
常见的应用场景之一就是将热点数据缓存到Redis中,以减轻数据库的访问压力。
当需要访问数据时,应用程序首先尝试从Redis缓存中获取,如果缓存中有对应的数据,则直接返回给应用程序;如果缓存中没有对应的数据,则从后端数据库中获取,同时将数据存储到Redis缓存中,以供以后使用。
二、Redis缓存的优势1. 高速读写:Redis将数据存储在内存中,避免了磁盘IO的开销,因此具有极快的读写性能。
这对于需要频繁读写的数据计算问题非常重要。
2. 数据持久化:Redis支持数据持久化,可以在服务器重启后将数据恢复到内存中。
这样即便服务器发生故障,也能保证数据的完整性。
3. 支持多种数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,使得开发人员可以根据不同的业务场景选择合适的数据结构。
三、Redis缓存的使用方法1. 确定缓存键名:在使用Redis缓存时,需要为每个缓存对象设置唯一的键名。
一般可使用业务相关的ID作为键名,如用户ID、商品ID等。
2. 设置缓存超时时间:在将数据存储到Redis缓存中时,需要设置一个适当的超时时间。
超时时间的设置应根据数据变化的频率和对数据的实时性要求来进行调整。
3. 编写缓存逻辑:在访问数据之前,首先查询Redis缓存,如果缓存中有对应的数据,则直接使用缓存中的数据;如果缓存中没有对应的数据,则从数据库中获取数据,并将数据存储到Redis缓存中。
四、Redis缓存的适用场景1. 热点数据缓存:将访问频繁的热点数据存储到Redis缓存中,可以大大提升系统的性能。
redis 的应用场景Redis是一种高性能的键值存储系统,被广泛应用于各个领域。
本文将介绍Redis的应用场景,探讨其在不同场景下的优势和特点。
一、缓存系统Redis最常见的应用场景就是作为缓存系统。
由于其高速的读写性能和丰富的数据结构支持,Redis可以将热点数据存储在内存中,快速响应用户的查询请求,减轻后端数据库的压力。
在大型网站中,常常使用Redis作为缓存系统,将经常查询的数据存储在Redis中,加速网页的加载速度,提升用户体验。
二、消息队列Redis还可以作为消息队列系统使用。
其发布订阅机制和原子性操作的特性,使得Redis可以快速地实现消息的发布和订阅。
在分布式系统中,可以利用Redis的消息队列功能实现不同服务之间的解耦,提高系统的可扩展性和性能。
三、计数器由于Redis具有原子性操作的特性,因此非常适合用来实现计数器。
例如,网站的访问量统计、点赞数统计等都可以使用Redis的计数器功能来实现。
通过Redis的INCR命令,可以快速地对某个键的值进行原子性的自增操作,保证计数的准确性。
四、排行榜Redis的有序集合数据结构非常适合用来实现排行榜功能。
通过将用户的得分作为有序集合的分值,用户的ID作为有序集合的成员,可以快速地获取用户的排名和排行榜的前几名。
这在游戏、社交网络等场景中非常常见。
五、分布式锁在分布式系统中,经常需要使用分布式锁来保证多个节点之间的数据一致性。
Redis可以利用其原子性操作和过期时间的特性来实现分布式锁。
通过SETNX命令设置一个键值对,如果设置成功,则获取到锁,执行业务逻辑;如果设置失败,则表示锁已被其他节点获取,需要等待或进行其他处理。
六、会话管理在Web应用中,为了实现用户登录状态的管理,通常需要使用会话管理机制。
Redis可以将用户的登录信息存储在内存中,实现快速的会话管理。
通过将用户ID作为键,用户信息作为值,可以快速地获取用户的登录状态和相关信息。
大数据的存储方法随着信息技术的快速发展,大数据正成为各个行业中不可忽视的重要资源。
大数据的存储方法也因此变得愈发重要。
在处理大数据时,合理的存储方法能够提高数据的可靠性、安全性和高效性,为数据分析和挖掘提供有力支持。
本文将介绍几种常见的大数据存储方法。
1. 关系型数据库存储方法关系型数据库是一种结构化的数据存储方式,采用表格的形式来组织数据。
在大数据环境下,关系型数据库仍然具有一定的应用场景。
例如,可以使用MySQL、Oracle等关系型数据库来存储结构化数据,如用户信息、订单信息等。
关系型数据库具有数据一致性和事务支持的特点,适用于需要频繁更新和查询的场景。
2. NoSQL数据库存储方法NoSQL数据库是一种非关系型数据库,它以键值对、文档、列族、图等方式存储数据。
NoSQL数据库适用于海量数据的存储和分析,具有高扩展性和高吞吐量的特点。
例如,HBase是一种基于Hadoop的列式数据库,适用于存储大规模结构化数据。
Cassandra是一种分布式数据库,适用于高度可扩展的大数据存储和分析。
3. 分布式文件系统存储方法分布式文件系统是一种将数据分布在多个节点上的存储方式。
它将数据切分成多个块,并将这些块分散存储在不同的节点上,以实现数据的高可靠性和高可扩展性。
Hadoop分布式文件系统(HDFS)是一种常见的分布式文件系统,适用于存储大文件和大规模数据集。
HDFS通过数据冗余和分布式计算来提高数据的可靠性和处理效率。
4. 列式存储方法列式存储是一种将数据按照列存储的方法。
相比于传统的行式存储,列式存储在数据查询和分析方面具有更高的效率。
列式存储将同一列的数据存储在一起,方便进行数据压缩和查询操作。
例如,HBase和Cassandra都是列式存储数据库。
5. 内存数据库存储方法内存数据库是一种将数据存储在内存中的数据库。
相比于磁盘存储,内存数据库具有更快的数据读写速度。
内存数据库适用于对实时性要求较高的场景,如实时分析和实时推荐。
Redis缓存实现实时数据统计和计数的良方Redis作为一种高性能的键值对数据库,被广泛应用于各种场景中。
其中,使用Redis缓存进行实时数据统计和计数是一种非常有效的方法。
本文将介绍使用Redis实现实时数据统计和计数的良方,并探讨其中的优势和应用场景。
一、Redis缓存基本原理Redis是一种基于内存的高性能键值对数据库,它将数据存储在内存中,因此具有很低的读写延迟。
而且,Redis的数据结构非常丰富,例如字符串、哈希表、列表、集合、有序集合等。
这些数据结构为我们提供了丰富的数据操作方式。
二、实时数据统计的需求在很多应用场景中,我们需要对某些数据进行实时统计,例如网站的点击量、用户的在线人数、商品的销量等。
而且,这些统计数据通常是实时更新的,因此需要一种高效的方式来进行统计和计数。
三、使用Redis进行实时数据统计的步骤下面将介绍使用Redis进行实时数据统计的步骤:1. 定义统计字段:首先,我们需要定义要进行统计的字段,例如网站的点击量可以定义为一个字符串类型的键,用户的在线人数可以定义为一个有序集合等。
2. 更新统计数据:每当有相应的事件发生时,我们就需要更新相应的统计数据。
例如,用户访问网站时,我们可以通过Redis的命令将点击量加1,或者将用户标识添加到有序集合中。
3. 查询统计结果:当需要查询统计结果时,我们可以直接通过Redis的命令进行查询,例如获取点击量、用户在线人数等。
四、实时数据计数的需求除了实时数据统计外,实时数据计数也是一种常见的应用需求。
例如,我们需要统计某个事件发生的次数、用户操作的次数等。
使用Redis进行实时数据计数同样是非常高效和可靠的方法。
五、使用Redis进行实时数据计数的步骤下面将介绍使用Redis进行实时数据计数的步骤:1. 定义计数字段:首先,我们需要定义要进行计数的字段,例如事件发生的次数可以定义为一个字符串类型的键,用户操作次数可以定义为一个哈希表等。
常见的数据库管理系统介绍数据库管理系统(Database Management System,简称DBMS)是一种用来管理和组织数据库的软件系统。
它提供了数据的存储、访问、管理和控制的功能,能够有效地管理大量的数据,并且支持多用户并发操作。
在现代信息技术的发展中,数据库管理系统扮演着至关重要的角色。
本文将介绍几种常见的数据库管理系统。
I. 关系型数据库管理系统(Relational Database Management System,简称RDBMS)关系型数据库管理系统是目前应用最广泛的数据库类型。
它采用了关系模型来组织数据,并通过表格的形式来存储实体和属性之间的关系。
关系型数据库具有良好的结构化特性,支持SQL语言进行数据查询和操作。
其中,Oracle、MySQL和SQL Server是使用较为广泛的关系型数据库管理系统。
1. OracleOracle数据库是目前全球最大的关系型数据库管理系统。
它具有强大的性能和稳定性,能够处理大规模的数据操作。
Oracle支持多种数据类型和数据存储引擎,提供了高级的数据安全和管理功能。
它广泛应用于企业级应用和大型数据处理系统。
2. MySQLMySQL是一种开源的关系型数据库管理系统,因其简单易用和高性能而广受欢迎。
MySQL特点是速度快、占用资源少,并支持多种平台。
它广泛应用于各种Web应用程序,如电子商务网站、博客和论坛等。
3. SQL ServerSQL Server是微软公司开发的关系型数据库管理系统,适用于在Windows平台上开发和部署企业级数据库应用。
SQL Server具有良好的可扩展性和安全性,支持大规模数据的处理和分析。
它被广泛应用于大型企业和组织中。
II. 非关系型数据库管理系统(NoSQL)随着大数据和云计算的兴起,非关系型数据库管理系统逐渐受到关注。
非关系型数据库不采用表格形式的存储结构,而是使用键值对、文档、图形等方式来组织数据。
Redis的事务支持及应用场景Redis是一种快速、开源的内存键值数据库,它提供了一个丰富的功能集合,使得它成为许多应用程序的理想选择。
其中一个重要功能就是事务支持,它可以让我们批量执行一系列的Redis命令,并保证这些命令的原子性。
### 1. 事务的基本概念在Redis中,事务是指一系列Redis命令的集合。
在执行事务期间,Redis会将所有接收到的命令放入一个队列中,然后按照顺序逐个执行。
与传统的数据库事务不同的是,Redis的事务不会回滚,因此在执行事务期间发生错误不会影响其他命令的执行。
在Redis中,事务的执行分为三个步骤:1. 开启事务:通过 MULTI 命令来开启一个新的事务。
2. 命令入队:在事务中,将一系列的命令入队,可以使用 EXEC 命令触发事务的执行。
3. 执行事务:Redis按照命令的顺序逐个执行,并将结果返回给客户端。
### 2. 事务的应用场景Redis的事务支持可以用于以下几个方面:#### 并发控制在高并发场景下,多个客户端同时修改相同的Redis数据可能会导致冲突和数据不一致的问题。
通过Redis的事务支持,可以将多个操作组织在一个事务中,保证这些操作原子执行,避免并发冲突。
例如,我们可以使用事务来实现一个简单的转账功能。
假设有两个账户A和B,我们希望将A账户的金额转移到B账户中。
使用MULTI 命令开启事务,然后将A账户的金额减少,B账户的金额增加,最后通过EXEC命令执行事务,确保这两个操作是原子的,避免出现错误的中间状态。
#### 批量操作Redis事务支持可以用来进行批量操作,将多个命令一次性发送给Redis服务器执行,减少了每个命令的网络往返时间,提高了执行效率。
例如,我们可以使用事务来批量插入一组数据。
使用MULTI命令开始事务,然后依次使用HMSET命令将多个键值对插入Redis中,最后使用EXEC命令执行事务。
这样可以减少了与Redis服务器的通信次数,提高数据插入的效率。
Redis缓存如何实现数据的快速更新和查询在实际开发中,使用缓存是提高数据查询和更新性能的常见方法之一。
而Redis作为一款高性能的内存数据存储系统,被广泛应用于缓存层。
本文将介绍Redis缓存如何实现数据的快速更新和查询。
一、Redis缓存原理Redis是一种基于键值对的内存数据库,其将数据存储在内存中,以提供极高的读写性能。
Redis缓存的基本原理是将热点数据存储在内存中,通过减少对数据库的访问,提高数据的读取和更新效率。
二、数据的快速更新1. 缓存预热缓存预热是指在系统启动或低峰期,将热点数据提前加载到Redis 缓存中。
通过预热可以避免在高峰期由于大量请求导致缓存失效而触发数据库访问,从而提高系统的性能和稳定性。
2. 数据同步策略在介绍数据同步策略之前,我们先来了解一下Redis中常用的数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。
- 字符串:一般用于存储单个键值对的数据。
- 哈希:用于存储具有相同属性的键值对,类似于关系型数据库的表。
- 列表:用于存储按插入顺序排序的数据集合。
- 集合:用于存储不重复的数据集合,支持集合操作如交集、并集等。
- 有序集合:类似于集合,但每个元素都有一个分数,并按照分数进行排序。
数据同步策略可以分为两种情况:- 更新数据库后同步更新缓存:当数据更新时,先更新数据库,再更新对应的缓存。
可以通过在更新数据库的同时,使用相同的键值对更新或删除Redis缓存中的数据。
- 更新缓存后异步更新数据库:当数据更新时,先更新缓存,再异步更新数据库。
这种方式可以减少数据库的访问次数,提高系统的性能。
异步更新数据库可以使用消息队列等技术来实现。
三、数据的快速查询Redis提供了丰富的数据类型和对应的操作命令,使得数据的查询操作更加高效。
1. GET命令GET命令用于从Redis缓存中获取键对应的值。
Redis的应用和优势Redis是一种高性能、非关系型的开源缓存数据库系统。
它常常被作为缓存和会话存储来使用。
本文将介绍Redis的应用场景和优势。
一、应用场景1. 缓存数据Redis可以缓存各种类型的数据,如键值对、列表、集合、有序集合等。
使用Redis作为缓存可以加快应用程序的读写速度,在高并发的场景下发挥优势。
2. 会话存储Redis非常适合用于会话存储,它可以让用户的会话状态存储在内存中,而不是在硬盘中,从而加快了访问速度。
同时,Redis支持数据持久化,可以把内存中的数据保存到硬盘中,以避免数据丢失的问题。
3. 消息队列Redis可以作为消息队列系统使用,支持发布/订阅模式和队列模式。
它可以处理大量消息和任务,实现异步处理和任务分发等功能。
二、优势1. 高性能Redis是一种内存数据库,它的读写性能非常高。
Redis还支持多种数据结构,如哈希表、有序集合、列表等,可以满足各种应用场景的需求。
2. 可靠性高Redis支持主从复制和持久化,可以保证数据的可靠性。
当主节点宕机时,从节点会自动接管,从而避免数据丢失的风险。
3. 简单易用Redis的命令非常简单,易于使用。
通过Redis的命令行界面,可以快速地对数据库进行操作。
同时,其API非常丰富,可用于各种编程语言。
4. 高可用性Redis支持Cluster模式,可以实现节点间的水平扩展。
在高并发和大数据量的场景下,Redis Cluster可以保证高可用性和可伸缩性。
结论:Redis是一种高性能、可靠和易用的缓存数据库,可以满足各种应用场景的需求。
它可以作为缓存、会话存储和消息队列等多种用途。
同时,Redis具有多种优点,如高性能、可靠性高、简单易用和高可用性等。
因此,Redis是一种非常值得使用的数据库系统。
Redis在大数据业务中的应用陈群@唯品会/数据基础架构/DBA
Agenda
1.Redis In Bigdata Ecosystem
2.Storage Architecture Evolution
3.Redis Cluster In Practice
计算和存储 HDFS HBase Hive Kafka
MongoDB
Redis/Twemproxy/Cluster MySQL Storm Spark Map-Reduce Job Java/C++/Python 计算 存储
实时数据收集实时计算内存存储
实时推荐
系统监控Flume/Kafka Storm/Spark Redis
实时报表
1)Hive --> Redis,定期同步全量/增量数据
•开发成通过用的hive2redis组件,支持twemproxy/redis-cluster。
•提交配置即可完成数据推送,下面是一些常用参数。
arg1: data_type
arg2: sql_query (hive进行数据提取的查询语句)
arg3: redis_key_expire_seconds (redis的key的过期时间)
arg4: redis_server_type (指定redis集群的架构, cluster or twemproxy )
2) Java/C++/Python应用程序
•数据源主要是MySQL、文件、Kafka等。
大数据对redis的挑战
TCO
Latency
Throughput
Scalability
HA
Redis Features
•全内存KV存储(NoSQL)
•支持多种数据结构
•单线程工作模型,Networking和IO异步方式•数据持久化
•支持主从复制
Redis优点
1、Redis快速的内存读写,能够满足Storm/Spark的高速计算处理
2、丰富的数据结构和灵活的操作,简化开发复杂度
•计数器,PV/UV等统计
•Hash,字典型数据。
比如,user/goods/brand profile/tag;userid-mid设备映射。
•Set,数据去重。
•Zset,在推荐计算中方便Scoring/Ranking.
•HyperLogLog, 统计UV/PV,有误差。
3、TTL数据生命周期管理,数据自动完成删除
4、Schema-less,适合频繁的业务迭代
• RedisLookupBolt : retrieves value from Redis using key
• RedisStoreBolt : stores key / value to Redis.
•One tuple will be matched to one key / value pair, and you
can define match pattern to TupleMapper.
【相关资料】:/releases/1.0.1/storm-redis.html
单线程 VS 性能
1、请求越简单,响应越快。
Get/Set(kv长度20字节)可以达到8w+ QPS。
2、Slow query影响服务的稳定性。
•请求阻塞很长时间,大量请求超时
•比如常见的O(N)操作,hmget/lrang/keys等
•管理操作命令,bgrewriteaof/bgsave时fork子线程时造成短暂的写入阻塞•隐藏的操作,big-key expired
3)吞吐量受限
•太高的并发请求反而导致qps下降
•不适合存储长字符串,比如json/protocol buffer数据
Storage Architecture Evolution
分布式存储架构
Client Sharding (2014.7之前)
Twemproxy
2015.12不再上线
Redis Cluster
优点
•sharding逻辑对开发透明,读写方式和单个redis一致
•可以作为cache和storage的proxy(by auto-eject)
缺点
•架构复杂,层次多。
包括lvs、twemproxy、redis、sentinel和其控制层程序•管理成本和硬件成本很高
• 2 * 1Gbps 网卡的lvs机器,最大能支撑140万pps
•流量高的系统,proxy节点数和redis个数接近
•Redis层仍然扩容能力差,预分配足够的redis实例
优点
•无中心架构
•数据按照slot存储分布在多个redis实例上
•增加slave做standby数据副本,用于failover,集群快速恢复
•实现故障auto failover
•亦可manual failover,为升级和迁移提供可操作方案
•降低硬件成本和运维成本,提高系统的扩展性和可用性
缺点
•重度依赖smart client
•数据迁移比较慢,redis-3.0.6开始单次操作可以完成多个key的迁移
方案对比
Client Sharding Twemproxy Redis Cluster
架构•后端仅多个独立的实例
•主从复制
•客户端实现分片
•Proxy完成分片
•仅转发请求
•部署在应用服务器
•proxy层加负载均衡,简化开发
•Lvs + twemproxy + redis三层架构
✓无中心架构
✓server端实现分片(crc32)
•主从复制
☐强依赖smart client
兼容性•跨实例操作依赖客户端实现•兼容大部分redis命令
•Proxy层支持部分跨实例操作
•支持mget/mset
•跨实例操作依赖客户端实现
成本✓低☐层次多
☐机器数量多
☐管理和维护成本高
✓低
扩展性☐扩展性差
☐修改配置和代码,发布变更
•简单扩容方式:倍增节点☐Redis无法扩展
☐Lvs层达到瓶颈后扩容难
✓Proxy层无状态,扩容方便
✓Redis到Twemproxy迁移快速
✓扩展能力强
✓可以在线增加/缩容节点
HA •Sentinel+Zookeeper
•Sentinel+DNS•自己开发Redis层HA模块
•slave 热备
✓auto-failover
为什么选择Redis Cluster
1、架构简单
•无中心架构,各个节点对等
•slave节点提供数据冗余,master节点异常时提升为master
•取代twemproxy三层架构,系统复杂性降低
•可以节约大量的硬件资源
•少了lvs和twemproxy层,读写性能提升明显。
响应时间从100-200us减少到50-100us •相比twemproxy集群,系统瓶颈更少。
为什么选择Redis Cluster
2、支持在线扩展
•在线水平扩展能力,能够解决我们大量的扩容需求。
•Failover能力和高可用性。
•redis不保证主从数据强一致性,但后端业务能够容忍少量数据丢失(异步复制)。
Redis Cluster In Practice
1、保持稳定快速的响应请求速度
•保持请求的简单性,避免使用O(N)操作
•不做复杂计算操作,尽量把计算迁移到代码层。
eg:set求并集/交集操作。
•拒绝扫描大数据集,eg:lrange、hkeys操作。
2、提高请求效率
•单实例/twemproxy集群使用pipeline
•使用连接池/长连接,避免server反复创建连接对象。
•异步请求(需要client lib支持)
•本地sink请求,把多次请求减少为一次,比如incr/incrby操作。
•去掉select db操作,key使用前缀,空间换时间。
3、应用做好容错机制
•连接或者请求异常,进行连接retry和reconnect •重试时间应该大于cluster-node-time时间
4、优化连接池使用
•避免server端维持大量的连接
•合理的连接池大小
•合理的心跳检测时间
•快速释放使用完的连接
•对于storm job,建议一个线程一个连接。
Q&A
Thanks!。