做为一个开发者,对于我们使用的工具不要让它成为一个黑盒子,最好深入进去,了解它、熟悉它。
Redis共有8种数据类型,常用的主要是 String、Hash、List、Set、 SortSet 这5种(还有Bitmaps-位图、HyperLogLog、GEO-地理信息定位),每一种数据类型提供了非常丰富的操作命令,可以满足日常开发绝大部分需求。
1.Redis能做什么?
- 缓存,这是Redis当今最为人熟知的使用场景。在提升性能方面非常有效;
- 排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构(有序集合)能够非常方便;
- 计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用传统数据库,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;( 注:限速器也是对请求限流的一种实现方式)
- 好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以搞定一些共同好友、共同爱好之类的功能(真的特备方便);
- 简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;
- Session共享,默认Session是保存在服务器的文件中,即当前服务器,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。
2.Redis不能做什么
Redis能适应的场景特别多,但也不是万能的,合适的地方用它事半功倍。如果滥用可能导致系统的不稳定等问题。
比如,如果使用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为数据量太大会影响Redis的速度。(曾经丢过整台服务器的redis数据,数据莫名的不见了)
3.为什么要使用Redis
操作内存: Redis将键值存储在内存中,用于快速地读写访问。
数据结构: Redis不仅存储字符串,还支持列表,集合,哈希和有序集合。真的很方便
发布/订阅模型: Redis支持创建发布和订阅通道,这样Redis客户端可以订阅任意的通道来进行数据消费,并且任何已订阅该通道的客户端可以发布数据。