Redis的使用场景与使用Redis的原因
Redis 不是全能工
在讲 Redis 缓存时,我们会联想到 Memcache 和 Redis 的优缺点有哪些,其实 Redis 和 Memcache 并不能进行比较.一个是既能做缓存又能做其他的事情,一个是仅仅只做缓存。常常我们会把两个联想在一起主要是因为 Redis 广泛应用在缓存,那 Redis 哪些能干?哪些不能干呢?
Redis 能干的事情 Redis 缓存在日常开发中广泛应用,在提高服务器性能方面也有显著的效果
排行榜 如果使用关系型数据库非常麻烦,而利用redis的sortSet数据结构能够非常方便搞定 计算器/限速器 利用Redis中的原子性的自增操作 我们可以统计类似用户点赞数 用户访问数等 这类操作如果用MySQL数据库会造成非常大的服务器压力,限流器比较典型的应用场景就是限制某个API的频率 常用应用场景有 限购 防止用户疯狂点击造成服务器的压力 好友关系 利用集合的一些命令 比如求 差集 交集 并集等 方便搞定一些共同好友 共同爱好的功能。 简单的消息队列 除了Redis自身的发布/订阅模式 我们可以利用List来实现一个队列机制 比如到货通知 邮件发送之类的需求 不需要高可靠 但是会带来非常大的DB压力,完全可以用List来完成异步解耦。 Session共享 默认Session是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登录 采用Redis保存Session后 无论用户落在那台机器上都能够获取到对应的Session信息上
Redis不能干哪些事情
Redis感觉能干的事情特别多 但是不是万能的 合适的地方用它事半功倍 如果滥用可能导致系统的不稳定,成本的增高等问题
用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力 简单来讲就是数据量过大 数据访问频率低的业务不适合使用Redis 数据太大吧会增加成本 访问频率太低 保存在内存中纯属浪费资源
Redis的优点
Redis缓存速度快 完全基于内存 使用C语言实现 网络层使用EPoll解决高并发问题,单线程模型避免不必要的上下文切换机器竞争条件
注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理
Redis 有 8 种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这 5 种类型
除了提供的丰富的数据类型,Redis 还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo 等个性化功能。
评论