Redis概述与安装

一、NoSQL数据库简介

在介绍NoSQL之前,先来讨论一下技术的分类。

  在MVC项目的开发过程中,我们使用RDBMS(关系型数据库)+jdbc解决M层的功能性问题,用Java解决C层的问题,用jsp+HTML解决V层的问题,再加上使用SVN的使用解决版本控制问题,做完成项目开发后,将项目发布到Linux下的Tomcat上以供用户访问,以上的这些技术被归为解决功能性问题的技术。

  但是如果只是用上述解决功能性问题的技术,项目开发是非常困难的,而且完成的项目很难扩展,于是便有了SpringMVC/Struts、Spring、Mybatis/Hibernate等框架技术,这些技术被归类为解决扩展性问题的技术。

  当一个项目开发完成后,正常的业务能处理了,性能问题就被摆上了桌面。在处理性能问题时,有NoSQL、Hadoop、Nginx、MQ等满足开发人员提高性能的需求。

而这里介绍的Redis就属于NoSQL。

  概括一下Redis的作用:  当一个用户请求需要访问数据库时,逻辑层(C层)会先去Redis中查找数据,如果有直接返回,如果Redis中没有,再去MySQL中查找数据。将MySQL中查找到的数据返回并且将此数据保存在Redis中,以响应下一次可能发生的相同的数据请求。即配合关系型数据库做高速缓存。

  NoSQL(Not Only SQL),泛指非关系型数据库,以key-value对的方式保存数据,与关系型数据库依赖业务逻辑的存储方式不同,NoSQL以简单的键值对的方式存储数据,不遵循SQL语言标准,也不支持事务,但性能高于SQL。 可以总结出:NoSQL适合数据高并发读写、海量数据读写、数据高扩展性的场景,但在需要事务支持和复杂的关系查询时,NoSQL就不如关系型数据库了。

NoSQL类型的数据库:缓存数据库(memcached、Redis):后者几乎覆盖了前者的绝大部分功能,相较于前者,后者支持将内存中的数据周期性的持久化到磁盘中。

  并且。Redis支持String。list、set、zset和hash作为value的数据类型

         文档数据库(mongoDB):不会

         列式数据库(Hbase):与关系型数据库(行式存储:把每一行作为一个单元存在数据库中)不同,列式存储采用的列式存储将列作为单元存储

  在数据库中,这样做有一个便于数据分析的好处。

 

二、Linux下安装Redis

  先将安装包拖到Linux的opt目录中,可以使用Xftp,也可以在装好vmtool后手拖。然后使用tar -zxvf Redis...tar.gz,解压缩文件,解压缩完成后进入该文件目录,此时执行make指令是无效的,因为此时需要的gcc命令并没有,你可以使用yum,也可以去CentOS的镜像文件中rpm六个文件,但是鉴于操作系统的版本不一致,还是建议使用yum gcc-c++ 指令显得妥当,但是你的Linux必须联网。

  在处理好依赖关系后,进入Redis解压后的目录执行make命令,如果你之前没有处理依赖关系时,错误执行了make命令,主要先执行make distclean清理一下之前make命令残留下的文件。清理后再执行make指令。至此完成了安装包的编译,再输入指令make install执行安装。

  

  那么安装到哪去了呢?

  Linux会默认把软件安装到/usr/local/bin/目录下,你可以cd  /usr/local/bin/然后ll查看一下。值得一提的是,凡是/usr/bin或者/usr/local/bin下的软件,我们在任意目录下都可以运行。

  目录组成:

  

三、使用Redis

  ①、启动Redis

  执行命令:redis-server

  

  现在处在前台运行状态,没法操作,可以Ctrl+c退出后(他会跟你说bye bye...),去修改他的配置文件设置Redis为后台运行。

  创建一个Redis的工作目录:/myRedis,然后去安装目录下拷贝一份配置文件到此目录。修改daemonize no 改成yes,意味让服务在后台运行,然后执行 :redis-server  /myredis/redis.conf。

  

  ②、使用客户端、连接关闭数据库

   

  

  至于为什么Redis的默认端口号是6379,感兴趣的朋友可以去了解下(/坏笑.png)

  我们知道Mysql默认有4个库,而Redis默认有16个库,0~15:

  

  但是由于Redis这16个库要么都连得上要么都连不上和一些权限问题,并且一个库中不能访问别的库的内容,所以在企业中一般只用默认的0号库。

  ③、单线程的Redis和多路IO复用的Linux

  在刚接触多线程和锁机制时,我们知道当多个线程访问共享资源时,为了保证数据的安全性,通常会给共享资源上一把锁,当一个线程访问这个资源时,其他线程就无法访问这个资源,如果一个线程死锁,那么多线程就会阻塞。但是在Linux中,由于Linux存在多路IO复用,当单线程的Redis在CPU中运行时,CPU会高速切换Redis的任务对象,以达到看似多线程的工作效果。Windows是没有多路IO复用的,所以在一开始,我们就只基于Linux学习Redis。

  附:初次接触,如有错误,欢迎指正

posted @ 2019-10-02 10:07  菜菜菜鸡  阅读(124)  评论(0编辑  收藏  举报