避免误用 Redis
Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧、锋利、实用,特别适合解决一些使用传统关系数据库难以解决的问题。但是 Redis 不是银弹,有很多适合它解决的问题,但是也有很多并不适合它解决的问题。另外,Redis 作为内存数据库,如果用在不适合的场合,对内存的消耗是很可观的,甚至会让系统难以承受。
我们可以对系统存储使用的数据以两种角度分类,一种是按数据的大小划分,分成大数据和小数据,另一种是按数据的冷热程度划分,分成冷数据和热数据,热数据是指读或写比较频繁的数据,反之则是冷数据。
可以举一些具体的例子来说明数据的大小和冷热属性。比如网站总的注册用户数,这明显是一个小而热的数据,小是因为这个数据只有一个值,热是因为注册用户数随时间变化很频繁。再比如,用户最新访问时间数据,这是一个量比较大,冷热不均的数据,大是数据的粒度是用户级别,每一个用户都有数据,如果有一千万用户,就意味着有一千万的数据,冷热不均是因为活跃用户的最新访问时间变化很频繁,但是可能有很大一部非活跃用户访问时间长时间不会发生变化。
大体而言,Redis 最适合处理的是小而热,而且是写频繁,或者读写都比较频繁的热数据。对于大而热的数据,如果其它方式很难解决问题,也可以考虑使用 Redis 解决,但是一定要非常谨慎,防止数据无限膨胀。原因如下:
首先,对于冷数据,无论大小,都不建议放在 Redis 中。Redis 数据要全部放在内存中,资源宝贵,把冷数据放在其中实在是一种浪费,冷数据放在普通的存储比如关系数据库中就好了。
其次,对于热数据,尤其是写频繁的热数据,如果量比较小,是最适合放到 Redis 中的。比如上面提到的网站总的注册用户数,就是典型的 Redis 用做计数器的例子。再比如论坛最新发表列表,最新报名列表,可以控制数量在几百到一千的规模,也是典型的 redis 做最新列表的使用方式。
另外,对于量比较大的热数据(或者冷热不均数据),使用 Redis 时一定要比较谨慎。这种类型数据很容易引起数据膨胀,导致 Redis 消耗内存巨大,让系统难以承受。薄荷的一个惨痛教训是把用户关注(以及被关注)数据放在 Redis 中,这是一种数据量极大,冷热很不均衡的数据,在几百万的用户级别就占用了近 10 GB左右内存,让 Redis 变得难以应付。应对这种类型的数据,可以用普通存储 + 缓存的方式。
如果用对了地方,比如在小而热的数据情形,Redis 表现很棒,如果用错了地方,Redis 也会带来昂贵的代价,所以使用时务必谨慎。
相关推荐
**开源项目-go-redis-redis.zip** `go-redis` 是一个用 Go 语言编写的高性能、纯 Go 实现的 Redis 客户端库。它提供了丰富的数据类型支持,包括字符串、列表、集合、哈希表等,并且具有强大的命令支持,能够与 ...
由于误用插件,某台服务器上的redis实例存在数百万无用的...redis-cli KEYS "$PATTERN" | xargs redis-cli DEL 在本人的实践中,这条命令存在两个问题: 1.redis-cli KEYS “$PATTERN”的结果会出现编号,不是纯粹的key
本文将深入探讨Redis的适用范围,帮助开发者避免误用。 首先,Redis最适合处理的是小而热的数据。这类数据具有以下几个特征:数据量较小,通常只包含几个到数百个键值对;数据访问频率高,即读写操作频繁。例如,...
ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和...
2. **易于修复**: AOF日志是append-only类型的,不存在随机访问的问题,并且在出现损坏时可以通过`redis-check-aof`工具轻松修复。 3. **后台重写**: AOF支持在不影响Redis正常运行的情况下自动重写日志文件,通过...
为了防止这些危险命令的误用,Redis提供了`rename-command`配置选项,允许管理员重命名或禁用特定命令。例如,我们可以将上述三个命令分别重命名为空字符串,这样即使尝试执行这些命令,也会因为命令名无效而无法...
然而,Redis 中存在一些命令,如果被误用或滥用,可能会导致数据丢失或系统不稳定,例如 `FLUSHALL`、`FLUSHDB` 和 `KEYS`。这些命令在特定场景下是必要的,但在某些情况下,特别是生产环境中,可能需要禁止使用以...
为了避免误用这些危险命令,Redis提供了配置选项来禁用或重命名它们。在`redis.conf`配置文件中,可以使用`rename-command`指令来重命名或禁用这些命令,例如: ```shell rename-command FLUSHALL "" rename-...
配置Redis公钥文件路径:`redis-cli -h 192.168.1.2 192.168.1.2:6379> config set dir /root/.ssh/` 5. 验证路径:`192.168.1.2:6379> config get dir` 6. 设置公钥文件名:`192.168.1.2:6379> config set ...
- **Redis做缓存存储**:相比之下,Redis作为缓存使用时性能极佳,提供了丰富的数据结构和持久化机制,有助于避免缓存雪崩。 **3. 细节描述不清楚** 某些NoSQL产品的实现细节可能与用户期望不符,如Ttserver虽然...
不过,由于描述中提到的是“Mythril网站”,这里可能是误用或者有特殊的含义,比如可能是指使用Mythril相关的技术和理念来构建安全的Web应用。 4. **单页应用程序(SPA)**:SPA是一种Web应用模式,用户在浏览器中...
不当使用NoSQL数据库可能导致一系列副作用,如Redis被误用为持久化存储或MongoDB复制集配置不当,这些问题都需在实际部署中予以充分考虑。 #### 总结与展望 NoSQL数据库为现代大数据应用带来了新的可能性,但也...
合理的退出机制能够保护用户在离开计算机后,其个人信息不被他人误用,同时也避免了系统资源的浪费。 最为关键的是项目质量巡检功能,这是系统的核心业务模块。它支持对项目的质量检查进行增加、删除、查询和修改,...
2. **会话保持功能误用**:在资源管理器模式下,启用会话保持功能本意是保证来自同一客户端的请求能持续被分配到同一后端服务器。但若客户端保持连接活跃(如HTTP的keep-alive机制),这可能导致负载并未被均匀分配...
通过系统,可以跟踪药品的库存状态,确保药品供应的及时性,避免因药品短缺导致的医疗延误。药品功能信息的变更管理,保证了药品信息的准确性和时效性,防止因信息不准确而产生的误用风险。 居民健康信息的收集和...
1. **Printf() 函数的误用** - `Printf()` 主要用于格式化输出数据,但在仅需简单输出变量时,应优先使用 `print` 或 `echo`,以提高执行速度。因为 `Printf()` 在输出前会进行格式化处理,可能导致不必要的性能...
1. **Printf()的误用** Printf()函数主要用于格式化数据输出,如显示浮点数PI的不同精度。但在只需要简单输出变量或函数返回值时,应优先选择`print`和`echo`,因为它们的执行速度更快。例如: ```php printf (...