一、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。
附:初次接触,如有错误,欢迎指正