前言
本篇文章主要解答以下几个问题:
- 为什么使用 Redis?
- redis 有哪些适用场景?
- 使用 Redis 有什么缺点?
这3个问题实际上可以看做是一类问题,主要从适用场景,优缺点角度解读redis。
一.redis 可以解决什么问题?----适用场景
- 缓存:缓存是redis使用最多的场景了,缓存机制几乎所有中大型的网站都会用到缓存,缓存可以说是扛高并发的一把利器。redis提供了丰富的数据结构类型,也提供了灵活的缓存过期机制和过期数据淘汰策略(这部分内容后面分享)。
- 分布式锁:借助redis 的set key value ex time nx 指令可以实现分布式锁(但是这个有缺陷,后面进一步分析)
- 排行版系统: 借助redis的有序集合可以实现
- 异步队列: 借助redis的列表(lpush,rpop)等等相关指令可以实现
- 统计和查找:比如从10亿个无序的数中选择最大的10个数,可以借助redis的位图功能实现。
- 不精确的统计去重:比如统计用户访问某个页面的UV,可以借助redis的HyperLogLog 来实现
....还有很多,不一一列举了。
二.redis 有哪些优缺点?
- 优点:
1. 执行速度快.
2. 提供了丰富的数据结构,如字符串,列表,集合,有序集合,散列表,位图,HyperLogLog等等。
3. 支持键过期和过期数据的淘汰策略.
4. 提供了发布订阅功能,可以做消息队列.
5. 提供了简单的事务功能,pipeline 管道功能.
6. 支持lua脚本.
7. 支持数据持久化.
8. 支持分布式集群高可用部署.
复制代码
-
缺点:
由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。 复制代码
后记
本文只是(从个人理解角度)简单的解答了一下redis可用的适用场景和优缺点。后续在不断的实践过程中就这块内容有了更深的体会之后再做进一步补充。