`

【转】避免误用 Redis

 
阅读更多

【转】 http://xiewenwei.github.io/blog/2014/08/31/avoid-misusing-redis/

 

 

Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧、锋利、实用,特别适合解决一些使用传统关系数据库难以解决的问题。但是 Redis 不是银弹,有很多适合它解决的问题,但是也有很多并不适合它解决的问题。另外,Redis 作为内存数据库,如果用在不适合的场合,对内存的消耗是很可观的,甚至会让系统难以承受。

我们可以对系统存储使用的数据以两种角度分类,一种是按数据的大小划分,分成大数据和小数据,另一种是按数据的冷热程度划分,分成冷数据和热数据,热数据是指读或写比较频繁的数据,反之则是冷数据。

可以举一些具体的例子来说明数据的大小和冷热属性。比如网站总的注册用户数,这明显是一个小而热的数据,小是因为这个数据只有一个值,热是因为注册用户数随时间变化很频繁。再比如,用户最新访问时间数据,这是一个量比较大,冷热不均的数据,大是数据的粒度是用户级别,每一个用户都有数据,如果有一千万用户,就意味着有一千万的数据,冷热不均是因为活跃用户的最新访问时间变化很频繁,但是可能有很大一部非活跃用户访问时间长时间不会发生变化。

大体而言,Redis 最适合处理的是小而热,而且是写频繁,或者读写都比较频繁的热数据。对于大而热的数据,如果其它方式很难解决问题,也可以考虑使用 Redis 解决,但是一定要非常谨慎,防止数据无限膨胀。原因如下:

首先,对于冷数据,无论大小,都不建议放在 Redis 中。Redis 数据要全部放在内存中,资源宝贵,把冷数据放在其中实在是一种浪费,冷数据放在普通的存储比如关系数据库中就好了。

其次,对于热数据,尤其是写频繁的热数据,如果量比较小,是最适合放到 Redis 中的。比如上面提到的网站总的注册用户数,就是典型的 Redis 用做计数器的例子。再比如论坛最新发表列表,最新报名列表,可以控制数量在几百到一千的规模,也是典型的 redis 做最新列表的使用方式。

另外,对于量比较大的热数据(或者冷热不均数据),使用 Redis 时一定要比较谨慎。这种类型数据很容易引起数据膨胀,导致 Redis 消耗内存巨大,让系统难以承受。薄荷的一个惨痛教训是把用户关注(以及被关注)数据放在 Redis 中,这是一种数据量极大,冷热很不均衡的数据,在几百万的用户级别就占用了近 10 GB左右内存,让 Redis 变得难以应付。应对这种类型的数据,可以用普通存储 + 缓存的方式。

如果用对了地方,比如在小而热的数据情形,Redis 表现很棒,如果用错了地方,Redis 也会带来昂贵的代价,所以使用时务必谨慎。

分享到:
评论

相关推荐

    Redis数据库的使用场景介绍(避免误用Redis)

    本文将深入探讨Redis的适用范围,帮助开发者避免误用。 首先,Redis最适合处理的是小而热的数据。这类数据具有以下几个特征:数据量较小,通常只包含几个到数百个键值对;数据访问频率高,即读写操作频繁。例如,...

    开源项目-go-redis-redis.zip

    4. **命令支持**:对于集群不支持的命令(如 `keys` 和 `flushdb`),`go-redis` 会提供相应的错误提示,避免在集群环境中误用。 5. **连接池**:为了提高效率,`go-redis` 使用连接池管理到各个节点的连接,确保...

    Redis的KEYS 命令千万不能乱用

    为了避免误用这些危险命令,Redis提供了配置选项来禁用或重命名它们。在`redis.conf`配置文件中,可以使用`rename-command`指令来重命名或禁用这些命令,例如: ```shell rename-command FLUSHALL "" rename-...

    Redis禁用命令、危险命令及规避方法

    为了防止这些危险命令的误用,Redis提供了`rename-command`配置选项,允许管理员重命名或禁用特定命令。例如,我们可以将上述三个命令分别重命名为空字符串,这样即使尝试执行这些命令,也会因为命令名无效而无法...

    redis禁止几个危险命令的方法

    然而,Redis 中存在一些命令,如果被误用或滥用,可能会导致数据丢失或系统不稳定,例如 `FLUSHALL`、`FLUSHDB` 和 `KEYS`。这些命令在特定场景下是必要的,但在某些情况下,特别是生产环境中,可能需要禁止使用以...

    NoSQL误用和常见陷阱分析

    - **Redis做缓存存储**:相比之下,Redis作为缓存使用时性能极佳,提供了丰富的数据结构和持久化机制,有助于避免缓存雪崩。 **3. 细节描述不清楚** 某些NoSQL产品的实现细节可能与用户期望不符,如Ttserver虽然...

    springboot嘉应房地产公司质量管理系统(源码+数据库)453100

    合理的退出机制能够保护用户在离开计算机后,其个人信息不被他人误用,同时也避免了系统资源的浪费。 最为关键的是项目质量巡检功能,这是系统的核心业务模块。它支持对项目的质量检查进行增加、删除、查询和修改,...

    Python社区医疗服务平台的设计与实现(源码+数据库)221707

    通过系统,可以跟踪药品的库存状态,确保药品供应的及时性,避免因药品短缺导致的医疗延误。药品功能信息的变更管理,保证了药品信息的准确性和时效性,防止因信息不准确而产生的误用风险。 居民健康信息的收集和...

    CTF之信息泄漏.pdf

    ### CTF之信息泄漏知识点详解 #### 一、概述 在网络安全领域,信息泄漏是一种常见的安全威胁,尤其是在...在日常开发和运维过程中,应当加强对源代码和敏感文件的保护意识,合理配置权限,避免不必要的信息泄漏风险。

    导致内部负载均衡器间歇性丢包或负载不均衡的常见因素-Bing1

    2. **会话保持功能误用**:在资源管理器模式下,启用会话保持功能本意是保证来自同一客户端的请求能持续被分配到同一后端服务器。但若客户端保持连接活跃(如HTTP的keep-alive机制),这可能导致负载并未被均匀分配...

    PHP 编写大型网站问题集

    1. **Printf()的误用** Printf()函数主要用于格式化数据输出,如显示浮点数PI的不同精度。但在只需要简单输出变量或函数返回值时,应优先选择`print`和`echo`,因为它们的执行速度更快。例如: ```php printf (...

    收集的php编写大型网站问题集

    1. **Printf() 函数的误用** - `Printf()` 主要用于格式化输出数据,但在仅需简单输出变量时,应优先使用 `print` 或 `echo`,以提高执行速度。因为 `Printf()` 在输出前会进行格式化处理,可能导致不必要的性能...

Global site tag (gtag.js) - Google Analytics