乐博娱乐»数据库»为什么要用Redis

为什么要用Redis

来源:大愚Talk 宣布时间:2018-07-26 阅读次数:乐博

  最近阅读了《Redis乐博娱乐开发与运维》,很是不错。这里对书中的知识整理一下,方便自己回首一下Redis的整个体系,来对相关知识点查漏补缺。

  我凭据五点把书中的内容进行一下整理:

•    为什么要选择Redis:介绍Redis的使用场景与使用Redis的原因;
•    Redis常用命令总结:包罗时间庞大度总结与具体数据类型在Redis内部使用的数据结构;
•    Redis的高级功效:包罗持久化、复制、哨兵、集群介绍;
•    理解Redis:理解内存、阻塞;这部门是很是重要的,前面介绍的都可以成为术,这里应该属于道的部门。;
•    乐博娱乐开发技巧:主要是一些乐博娱乐开发实战的总结,包罗缓存设计与常见坑点。

  先来开启第一部门的内容,对Redis来一次重新审察。

本系列内容基于:redis-3.2.12

 Redis不是万金油

  在面试的时候,常被问比力下Redis与Memcache的优缺点,小我私家觉得这二者并不适合一起比力,一个是非关系型数据库不仅可以做缓存还能干其它事情,一个是仅用做缓存。经常让我们对这二者进行比力,主要也是由于Redis最广泛的应用场景就是Cache。那么Redis到底能干什么?又不能干什么呢?

  Redis都可以干什么事儿

  缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面很是有效;

  排行榜,如果使用传统的关系型数据库来做这个事儿,很是的麻烦,而利用Redis的SortSet数据结构能够很是方便搞定;

  盘算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户会见数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比力典型的使用场景是限制某个用户会见某个API的频率,常用的有抢购时,防止用户疯狂点击带来不须要的压力;

  挚友关系,利用荟萃的一些命令,好比求交集、并集、差集等。可以方便搞定一些配合挚友、配合喜好之类的功效;

  简朴消息行列,除了Redis自身的宣布/订阅模式,我们也可以利用List来实现一个行列机制,好比:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来很是大的DB压力,完全可以用List来完成异步解耦;

  Session共享,以PHP为例,默认Session是生存在服务器的文件中,如果是集群服务,同一个用户过来可能落在差异机器上,这就会导致用户频繁登陆;接纳Redis生存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。

  Redis不能干什么事儿

  Redis感受能干的事情特别多,但它不是万能的,合适的地方用它事半功倍。如果滥用可能导致系统的不稳定、成本增高等问题。

  好比,用Redis去生存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,而且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力。

  简朴总结就是数据量太大、数据会见频率很是低的业务都不适合使用Redis,数据太大会增加成本,会见频率太低,生存在内存中纯属浪费资源。

乐博

 选择总需要找个理由

  上面说了Redis的一些使用场景,那么这些场景的解决方案也有许多其它选择,好比缓存可以用Memcache,Session共享还能用MySql来实现,消息行列可以用RabbitMQ,我们为什么一定要用Redis呢?

  速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型制止了不须要的上下文切换及竞争条件;
注意:单线程仅仅是说在网络请求这一模块上用一个请求处置惩罚客户端的请求,像持久化它就会重开一个线程/进程去进行处置惩罚

  富厚的数据类型,Redis有8种数据类型,虽然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了很是富厚的操作命令,可以满足绝大部门需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

乐博

  除了提供的富厚的数据类型,Redis还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自界说命令、Bitmaps、HyperLogLog、宣布/订阅、Geo等个性化功效。

  Redis的代码开源在GitHub,代码很是简朴优雅,任何人都能够吃透它的源码;它的编译安装也是很是的简朴,没有任何的系统依赖;有很是活跃的社区,各种客户端的语言支持也是很是完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、漫衍式成为可能。

乐博

  做为一个乐博娱乐开发者,对于我们使用的工具不能让它成为一个黑盒子,我们应该深入进去,对它更了解、更熟悉。今天简朴说了下Redis的使用场景,以及为什么选择了Redis而不是其它。下次对Redis的内部数据结构及常用命令的时间庞大度进行总结。