Redis开篇-了解Redis

一、序言

    要开始学习Redis就有必要对其有个大致的了解。作为本栏目的第一节,首先说一下?Redis是干什么的?有什么用?对我们的项目有什么用。希望这篇文章可以帮助大家对Redis有个更深层次的了解。我们后续的课程将为大家讲解Redis配置文件、Redis的工作原理、Redis持久化原理、Redis事务、Redis锁机制、Redis种种功能机器应用场景的讲解等,希望大家可以支持我,关注我一下,肯定不会让大家失望的。

二、Redis是干什么的,有什么用

   相信小伙伴们在做项目的过程中一直听大神们在说使用Redis,我也是如此,大家也一定想尽快精通此技术,毕竟这是成为大神的必不可少的一部分,所以才写了这个栏目,然后带领大家一起实现小伙伴们的梦想。好了不扯了,回归正题。

   Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。其value支持多种类型,比如:string、list、set、zset、hash等。些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,其为了保证效率,数据都是保存到了缓存中,所以我们使用一些比较常用的不易发生变化的变量,最好将其保存到redis中,没必要从mysql等关系型数据库中存取,我们也都知道存取效率在项目中是占很大的比重的,我们项目的性能好坏和数据的存取是直接的关系,另外从内存中的存取的速度(数十GB/s)远远超过硬盘中存取速度(数十MB/s~数百MB/s)的。

   Redis还支持主从同步。数据可以实现从主服务器(master)向任意的从服务器(slave)上同步。我们还可以使用Redis做集群实现分布式操作,远远减轻服务器的内存压力。既然redis的存取速度这么好,为什么我们不直接使用redis代替mysql等关系型数据库呢?理论上是可以的,只要你的内存足够大,但是我们都知道内存是很稀缺的,我们平常使用的服务器一般是4G、8G、16G、32G等的,随着内存的容量越大价格却是直线上升,这是一个小公司负担不起的,有人说我们可以使用十台8G的服务器做集群来实现一台80G内存啊,显然是不太现实的,毕竟Redis不可能将这8G的内存全部占用,内存中还加载了其他的内容,并且随着我们的项目系统上线,用户使用量上升,数据量也是直线上升,我们总不能什么时候感觉内存不够用了就再买一台服务器吧,显然这是不太现实的,项目是要求稳定性和安全性,也不会让太多的人去维护一个已经成功上线的项目。所以我们就老实的使用mysql等关系性数据库来存储数据吧。  

    Redis和memcached一样都是基于缓存的,但是我们的Redis却可以实现周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis为了达到最快的读写速度将数据读到内存中,并且通过异步的方式将数据写入到磁盘,所以redis具有快速和数据持久化的特征。如果不将数据放到内存中,磁盘的IO速度会严重影响到Redis的性能。

  Redis是单进程单线程的。redis利用队列技术将并行访问变为串行访问,消除了传统数据库串行控制开销

     redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数据

  Redis的主要缺点就是数据库容量受到内存的限制,不能够用作海量数据的高性能的读写,因此Redis适合的场景就是局限于较小数据量的性能操作和也能算上。

  我们大家听的最多的Redis的作用其实就是缓存了吧,确实如此,比如我们项目中使用的二级缓存就可以使用Redis来实现,就是通过Redis来实现的,但是强大的Redis真的只有缓存的功能吗?答案是不仅仅如此,让我们看看可以使用Redis实现实现哪些功能

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

   2、队列  我们可以使用List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;

   3、订阅/发布  当用户订阅了某些公众号,每当发布者发布一次,用户就可以立马接受到该消息。

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

   5、计数器/限数器  利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的     读写会带来相当大的压力;限数器比较典型的操作就是限制用户访问某个API的频率,当时用秒杀抢购时,防止用户疯狂点击带来的不必要的压力。

   6、好友关系 上面我们已经说过了redis支持使用并集、交集等集合的一些操作,可以实现次功能,我们都是用微信或者QQ这些聊天工具,上面会显示两个人之间的共同好友,就可以使用该命令实现

   7、Session  使用Ngnix实现负载均衡也可以是使用Redis来实现session共享等,至于为什么要实现session共享,主要是因为我们实现负载均衡,是为了减轻服务器的压力,但是需要保持服务器上用户的使用同步,不可能每访问轮询服务器就需要用户登陆一次吧,这是用户不想看到的。

  是不是突然感觉Redis很强大,是不是特别着急想要去尝试去了解一下它,先别着急,这些东西因为内存比较多,也为了给小伙伴们讲解的更加详细在以后的文章中会一一讲解,尽量让大家学起来容易。

三、总结

  Redis功能很强大,之前面试java的时候,经常被问到Redis相关问题,之前一直就是傻傻的认为只能够作为缓存,所以,每位面试官就反问我,你只用Redis作为缓存吗,其他没用过吗?我当时还在想Redis本来就是为了作为缓存应用而生的,只需要会缓存就可以了,现在想想真的是很天真,希望大家能够多多关注我之后的相关文章,不要将来面试的时候出现像我一样的情况,祝愿小伙伴们早日找到满意的工作,更上一层楼。

  

猜你喜欢

转载自blog.csdn.net/JavaWeb_Hao/article/details/82077643
今日推荐