1 Linux中软件的安装
1.1 jdk的安装(具体看自己录的操作录像)
1.1.1 需求
在linux 下安装JDK,可正常使用java和javac等命令
1.1.2 准备工作
上传需要的所有软件
1.1.3 相关知识点:rpm命令
格式:rpm [参数] [软件]
-v 显示指令执行过程。
-h或--hash 套件安装时列出标记。
-q 使用询问模式,当遇到任何问题时,rpm指令会先询问用户。
-a 查询所有套件。
-i<套件档>或--install<套件档> 安装指定的套件档。
-U<套件档>或--upgrade<套件档> 升级指定的套件档。
-e<套件档>或--erase<套件档> 删除指定的套件。
--nodeps 不验证套件档的相互关联性
常用
安装:rpm -ivh rpm文件【安装】
升级:rpm -Uvh rpm文件【更新】
删除:rpm -e --nodeps 软件名
查看:rpm -qa
1.1.4 JDK的安装
步骤1:查看现有安装的JDK版本
rpm -qa | grep -i java
步骤2:卸载已有软件
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686
步骤3:解压JDK
tar -zxvf jdk-7u72-linux-i586.gz
步骤4:将jdk移动“/usr/local/src/java”
mkdir /usr/local/src/java/
mv jdk1.7.0_72/ /usr/local/src/java/jdk1.7
步骤5:配置系统环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/src/java/jdk1.7
export PATH=$JAVA_HOME/bin:$PATH
步骤6:使配置文件生效,并测试
source /etc/profile
java -version
1.2 安装tomcat
1.2.1 需求
巩固linux基本命令,通过其他主机可以访问tomcat。
1.2.2 分析
上传tomcat
解压tomcat
配置tomcat
测试
1.2.3 实现
步骤1:解压tomcat
tar -zxvf apache-tomcat-7.0.52.tar.gz
步骤2:将tomcat移到“/usr/local/src/java/tomcat下”
mv apache-tomcat-7.0.52 /usr/local/src/java/tomcat7
步骤3:启动并访问tomcat
/usr/local/src/java/tomcat7/bin/startup.sh
通过虚拟机内访问
通过其他计算机不能访问
步骤4:配置防火墙
vim /etc/sysconfig/iptables
运行8080端口远程访问
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重启启动防火墙服务
service iptables restart
步骤5:通过其他主机访问成功
1.3 安装mysql
1.3.1 需求
巩固linux基本命令,安装mysql,并且可以通过其他主机访问。正常启动关闭mysql,非正常关闭mysql。
1.3.2 分析
上传 “server”和“client”
使用yum卸载旧版本
使用yum安装
启动mysql服务
本地登录
远程登录
1.3.3 相关技术:yum
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
需要联网。
安装:yum install perl
卸载:yum remove mysql
查询系统配置信息:cat /etc/yum.conf
1.3.4 实现
步骤1:查看之前的版本
rpm -qa | grep -i mysql
步骤2:使用yum卸载之前的版本
yum remove mysql-libs-5.1.71-1.el6.i686
确定删除
步骤3:使用yum安装server和client两个程序
yum install MySQL-*.rpm
确定安装程序
步骤4:启动或停止mysql服务
service mysql start
service mysql stop
步骤5:设置root账号密码
安装成功日志提示
设置密码
/usr/bin/mysqladmin -u root password '1234'
步骤6:虚拟机内部,登录mysql
mysql -uroot -p1234
步骤7:远程主机访问,设置防火墙
打开防火墙配置
vim /etc/sysconfig/iptables
设置内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启服务
service iptables restart
使用mysql语句创建远程登录用户
use mysql;
select user,host,password from user;
create user 'root'@'%' identified by '1234'; #创建用户,并设置密码
grant all on *.* to 'root'@'%' with grant option; #给指定的用户授权
flush privileges; #刷新权限
远程访问成功
mysql -h192.168.137.128 -uroot -p1234 #-hip地址 -u用户名 –p密码
2 Redis
2.1 什么是NoSQL
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
2.2 为什么需要NoSQL
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:
1、High performance - 对数据库高并发读写的需求 (高并发)
web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。
2、Huge Storage - 对海量数据的高效率存储和访问的需求 (高存储)
类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。
3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求 (高扩展)
在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
2.3 主流NoSQL产品
NoSQL数据库的四大分类如下:
-
- 键值(Key-Value)存储数据库
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化
-
- 列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
-
- 文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
-
- 图形(Graph)数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
2.4 NoSQL特点
在大数据存取上具备关系型数据库无法比拟的性能优势,例如:
1.易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面 上带来了可扩展的能力。
2.大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
3.灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据 量的表,增加字段简直就是一个噩梦。这点在大数据量的Web2.0时代尤其明显。
4.高可用
NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。
综上所述,NoSQL的非关系特性使其成为了后Web2.0时代的宠儿,助力大型Web2.0网站的再次起飞,是一项全新的数据库革命性运动。
2.5 Redis由来
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便 对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。
Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。
VMware公司从2010年开始赞助Redis的开发, Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。
2.6 什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:(键永远是字符串,值的类型如下)
1、 字符串类型
2、 散列类型
3、 列表类型
4、 集合类型
5、 有序集合类型。
官方提供测试数据:50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s 。数据仅供参考,根据服务器配置会有不同结果。
2.7 redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
分布式集群架构中的session分离。
3 Redis安装和使用
redis建议安装在linux服务器上运行测试,本教程使用 linux虚拟机及ssh客户端进行功能测试。
3.1 搭建环境
3.1.1 虚拟机
虚拟机版本:VMware 10.0.2
(VMware-workstation-full-10.0.2-1744117.1398244508 Linux课程已经安装)
3.1.2 Linux系统
Linux版本:CentOS-6.5-i386-bin-DVD1 (CentOS-6.5 32位操作系统)
3.1.3 SSH客户端
远程命令端:SecureCRT 7.3
ftp端:SecureFX 7.3
3.2 CentOS安装Redis
3.2.1 安装环境
redis是C语言开发,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境。如果没有gcc环境,需要安装gcc:
yum install gcc-c++
如果提示是否下载,输入y。
如果提示是否安装,输入y
3.2.2 Redis安装
步骤1:将Windows下下载的压缩文件上传到Linux下。通过secureCRT进行上传,步骤如下:
alt + p
put F:/redis-3.0.0.tar.gz
步骤2: 解压文件
tar –zxvf redis-3.0.0.tar.gz
步骤3: 编译redis (编译,将.c文件编译为.o文件)
进入解压文件夹,cd redis-3.0.0
执行make
1)如果没有安装gcc,编译将出现错误提示。(如果安装失败,必须删除文件夹,重新解压)
2)安装成功
步骤4: 安装
make PREFIX=/usr/local/redis install
安装完后,在/usr/local/redis/bin下有几个可执行文件
redis-benchmark ----性能测试工具
redis-check-aof ----AOF文件修复工具
redis-check-dump ----RDB文件检查工具(快照持久化文件)
redis-cli ----命令行客户端
redis-server ----redis服务器启动命令
注意:启动的时候必须先启动服务器,再启动客户端。
步骤5: copy文件
redis启动需要一个配置文件,可以修改端口号等信息。
3.3 Redis的启动
3.3.1 前端模式启动
直接运行bin/redis-server将以前端模式启动,前端模式启动的缺点是启动完成后,不能再进行其他操作,如果要操作必须使用ctrl+c,同时redis-server程序结束,不推荐使用此方法。
/usr/local/redis/bin/redis-server
使用CTRL+ C 停止前端模式
3.3.2 后端模式
修改redis.conf配置文件, daemonize yes 以后端模式启动。
vim /usr/local/redis/redis.conf
启动时,指定配置文件
cd /usr/local/redis/
./bin/redis-server ./redis.conf
Redis默认端口6379,通过当前服务进行查看
ps -ef | grep -i redis
3.4 Redis停止
强制结束程序。强行终止Redis进程可能会导致redis持久化数据丢失。
kill -9 31475 #pid需要通过“ps aux | grep -i redis”进行查询
正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:(关闭默认端口)
cd /usr/local/redis
./bin/redis-cli shutdown
3.5 Redis使用
3.5.1 连接客户端
在redis的安装目录中有redis的客户端,即redis-cli(Redis Command Line Interface),它是Redis自带的基于命令行的Redis客户端。
redis-cli -h ip地址 -p 端口
默认ip和端口
3.5.2 向Redis服务器发送命令
redis-cli连上redis服务后,可以在命令行发送命令。
ping,测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG
set/get,使用set和get可以向redis设置数据、获取数据。
del,删除指定key的内容。
keys * ,查看当前库中所有的key值
4 Redis的数据结构
4.1 Redis数据结构介绍
redis是一种高级的key-value的存储系统,其中value支持五种数据类型。
1、 字符串(String)
2、 哈希(hash)
3、 字符串列表(list)
4、 字符串集合(set)
5、 有序字符串集合(sorted set)
而关于key的定义呢,需要大家注意的几点:
1、 key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查找效率
2、 key不要太短,如果太短会降低key的可读性
3、 在项目中,key最好有一个统一的命名规范
4.2 存储string
4.2.1 概述
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型存入和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
4.2.2 常用命令
4.2.2.1 赋值
set key value:设定key持有指定的字符串value,如果该key存在则进行覆盖操作。总是返回”OK”
4.2.2.2 取值
get key:获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,因为get命令只能用于获取String value;如果该key不存在,返回(nil)。
getset key value:先获取该key的值,然后在设置该key的值。
4.2.2.3 删除
del key :删除指定key
4.2.2.4 数值增减
incr key:将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
4.2.3 扩展命令(了解)
incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,器初始值为0,在incrby之后,该值为increment。如果该值不能转成整型,如hello则失败并返回错误信息
decrby key decrement:将指定的key的value原子性减少decrement,如果该key不存在,器初始值为0,在decrby之后,该值为decrement。如果该值不能转成整型,如hello则失败并返回错误信息
append key value:拼凑字符串。如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value
4.3 存储hash
4.3.1 概述
Redis中的Hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
4.3.2 常用命令
4.3.2.1 赋值
hset key field value:为指定的key设定field/value对(键值对)。
hmset key field value [field2 value2 …]:设置key中的多个filed/value
4.3.2.2 取值
hget key field:返回指定的key中的field的值
hmget key fileds:获取key中的多个filed的值
hgetall key:获取key中的所有filed-vaule
4.3.2.3 删除
hdel key field [field … ] :可以删除一个或多个字段,返回值是被删除的字段个数
del key :删除整个list
4.3.2.4 增加数字
hincrby key field increment:设置key中filed的值增加increment,如:age增加20
4.3.3 自学命令
hexists key field:判断指定的key中的filed是否存在
hlen key:获取key所包含的field的数量
hkeys key :获得所有的key
hvals key:获得所有的value
5 RedisDesktopManager (redis图形化操作软件)
使用前需要打开redis所在机器中防火墙里里redis的端口。
知道就行,开发中不会用黑窗口操作数据的,后面肯定用java代码的。
操作数据的时候,如果想操作中文,打开redis服务器的时候用下面的命令打开即可。
.bin/redis-cli --raw