1.linux基本命令行:
cd
ll
tar -zxvf
cp -r
rm -rf
vim/vi
mkdir
mv
touch
scp -r
ssh-copy-id(免秘钥登录)
keygen -rs -a
免秘钥登录:
不需要密码进行直接登录
为什么需要免秘钥登录?
1.节省访问时间(不需要再输入账号和密码直接可以访问到在局域网中其他的服务器)
2.局域网一般情况下外部是无法访问的,所以不需要担心安全问题,也就是说不再需要进行配置密码的操作
3.因为集群中节点(linux)很多,上百台节点,操作相当繁琐!
免秘钥是什么?
在一台Linux服务器上,都会配置密码(当密码配置完成,在指定的文件夹下会同时生成两个问题,一个是私钥,一个公钥)
私钥是每一次进行使用Xshell连接的时候必须要匹配的密码
公钥是需要复制到其他配置免秘钥登录的服务器上
1.修改HOSTNAME
2.配置HOSTNAME和IP的映射
当需要配置免秘钥的时候,或者两台节点在同一个集群中的时候,hosts文件必须同时包含两台节点的映射
3.关闭防火墙
4.关闭防火墙的开机启动
5.重启
6.在redis01(142)服务器上直接去访问redis02(143)服务器
ssh ip地址
scp -r 远程发送命令
scp -r 所需要发送文件目录 所需要发送的服务器ip:所需要发送目标目录
7.配置免秘钥登录
7.1.cd ~/.ssh/ ssh目录,里面放的都是和访问有关的信息和数据
如果是服务器刚配置完成,该目录并不会存在,只有当别的服务器访问该服务器后才会生成ssh文件夹
7.2.生成自己的公钥
ssh-keygen -t rsa
直接四次回车,每一次都不要输入任何密码,直接回车
这个时候会生成两个文件
id_rsa:私钥
id_rsa.pub:公钥(每一台服务器生成的公钥都是唯一的)
如果其他服务器需要访问该服务器不再使用密码的时候,就把自己的公钥发送给其他服务器即可
7.3.把自己的公钥发送给其他服务器
ssh-copy-id
2.redis:
什么是redis?
是数据库
2.1.关系型数据库:
mysql
oracle
关系型数据库是以行为单位存储的数据库
select * from xxx where …:标准的sql语句
2.2.nosql数据库:
nosql:没有sql语句
如果需要做增删改查的时候可以通过自带的linux命令行,以及通过java代码调用API实现
以下所有的数据库没有表的概念,也没有表中数据的关系,以及没有行级关系
2.2.1.redis:(每一个项目都用会到)
以key和value键值对所对应的关系存在
在redis中key是唯一的,不能发生任何重复,一旦重复,就会发生覆盖
name:zhangsan
name:lisi—->覆盖zhangsan
类似于map:
map.put(“key”,”value”);
redis—>key:value
规定在默认和一般情况下,reids中,key永远都是String类型
value的类型也是String
在redis中,90%的情况下都是部署在Linux服务器上的,一般不会再windwos上使用
而且会以集群的形式存在(redis的官方文档中说明redis集群是必须存在于三主三从)
redis必须要部署在6台服务器上(也就是说需要有6台电脑(6台虚拟机))
1台虚拟机内存是1G—>6G
还不包括windows以及软件所占用的内容(8G内存是不够的)
使用1台虚拟机模拟6台
只需要修改端口号即可
假设有6台服务器:
192.168.1.2 6379
192.168.1.3 6379
192.168.1.4 6379
192.168.1.5 6379
192.168.1.6 6379
192.168.1.7 6379
192.168.1.8 6379-6385
主服务器和从服务器
主服务器:
eg:注册(insert)—->6台服务器(3台(主服务器)和3台(从服务器))
—->主服务器有3台(1台(对象),1台(基本类型),1台(引用类型))
从服务器:
1台(对象)因为访问基数过大,导致宕机(挂了)
用户执行注册操作—->1台(对象),但是该服务器死机了,该服务器下有另外一台服务器随时等待切换(fowller)—->监听主服务器的状态—->监听到主服务器宕机了—–>替换主服务器—->经过重启(主服务器重新启动)—->从服务器还会一直监听—->主服务器是否重新启动—->从服务器会自动的向主服务器发送数据,直到数据达到同步
关系型数据库可以存储数据,为什么还需要非关系型数据库(NoSql)?
缓存!
在mybatis中:
一级缓存
sqlSession中
二级缓存
内存中
在所有的计算机中,计算的运行速度永远是比硬盘运行速度要快!
为什么会存在内存中?
计算速度快
eg:
1000万条数据
在关系型数据库中(mysql,oracle),全表扫描1000万条数据
select * from xxx—->再厉害的服务器也会直接宕机(10万条数据在oracle中最少需要10分钟)
不是所有的数据都需要存入内存的,什么样的数据适合存入内存(redis)?
都是不经常发生改变的
select * from xxx—>硬盘
用户表
7-16:1000名用户
7-17:800名用户
1800条数据
7-18:200名用户
2000条数据
redis查询数据库—>内存
1800条数据—>200名用户无法登录
如果需要用到redis的缓存—>必须有redis数据库
先从redis数据库中把数据查出—>放入缓存
什么叫不经常改变的数据:
性别
身份证号
街道名称
国家名称
….
这些数据会存入在关系型数据库中的一张表(dictionary table)
select * from user inner join dictionary
redis的配置和部署:
1.修改HOSTNAME
默认为localhost
vi /etc/sysconfig/network
快捷键e跳转到单词末尾
保存快捷键:shift+zz
HOSTSNAME=redis
2.修改HOST和IP的映射
vi /etc/hosts
3.关闭防火墙
service iptables stop(status)(start)(restart)
4.关闭防火墙开机启动
chkconfig iptables off
chkconfig iptbales –list
5.重启Linux服务器
reboot(必须要在root用户模式下才可以实现)
redis的配置:
3.1.linux服务器centos6.5-7.1(64/32位)
3.2.从redis官网下载最新redis压缩包
3.3.通过Xftp上传到linux服务器
3.4.修改HOSTNAME
vi /etc/sysconfig/network
3.5.hostname和ip映射
vi /etc/hosts
3.6.关闭防火墙
service iptables stop
3.7.关闭防火墙开机启动
chkconfig iptables off
3.8.重启linux服务器
reboot(root用户下)
3.9.解压redis的压缩包
tar -zxvf redis.tar.gz
3.10.编译redis
在解压出的redis目录使用
make && make install进行编译redis源码
当看到
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/home/app/redis-3.2.11/src’
说明编译成功
3.11.使用一台linux模拟6台redis集群(制造6个端口号:6380-6385)
需要在redis的根目录创建一个文件夹redis_cluster
mkdir redis_cluster
进入创建好的文件夹,再次创建6个文件夹(6个文件夹的名称分别为redis的端口号)
mkdir 6380
进入6380文件夹,创建一个redis.conf文件,并且copy到其他5个
touch redis.conf
分别编辑这6个redis.conf文件
vi redis.conf
并且copy如下代码:
daemonize yes
pidfile redis_6380.pid
logfile redis_6380.log
appendonly yes
bind 192.168.242.10
port 6380
cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
3.12.启动6台redis数据库
进入redis的src目录进行启动
cd /redis/src
./redis-server ../redis_cluster/6380/redis.conf
./redis-server ../redis_cluster/6381/redis.conf
./redis-server ../redis_cluster/6382/redis.conf
./redis-server ../redis_cluster/6383/redis.conf
./redis-server ../redis_cluster/6384/redis.conf
./redis-server ../redis_cluster/6385/redis.conf
3.13.如何查看redis是否启动成功(通过查看redis的进程信息)
ps -ef |grep redis
root 6779 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6380 [cluster]
root 6783 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6381 [cluster]
root 6787 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6382 [cluster]
root 6791 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6383 [cluster]
root 6795 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6384 [cluster]
root 6799 1 0 03:51 ? 00:00:00 ./redis-server 192.168.67.128:6385 [cluster]
root 6803 3639 0 03:52 pts/0 00:00:00 grep redis
说明启动成功
3.14.启动成功redis数据库后,需要创建集群
!!!!!!!各种报错
进入redis的src目录创建集群
./redis-trib.rb create –replicas 1 192.168.100.129:6380 192.168.1.112:6381 192.168.1.112:6382 192.168.1.112:6383 192.168.1.112:6384 192.168.1.112:6385
3.14.1.报错
/usr/bin/env: ruby: No such file or directory
安装ruby
yum -y install ruby
3.14.2.安装成功后需要再次创建集群
报错./redis-trib.rb:24:in `require’: no such file to load — rubygems (LoadError)
from ./redis-trib.rb:24
因为ruby的当前版本和rubygems不一致,也就是rubygems的版本低
下载高版本的rubygems
rpm -ivh rubygems-1.3.7-5.el6.noarch.rpm
此时会报如下错误:
warning: rubygems-1.3.7-5.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
ruby-rdoc is needed by rubygems-1.3.7-5.el6.noarch
说明需要先将rubygems依赖的软件先安装好,即将ruby-irb和ruby-rdoc先安装:
yum install ruby-irb ruby-rdoc
然后再执行上面安装rubygems-1.3.7-5.el6.noarch.rpm的命令,出现如下信息,说明安装成功了:
Preparing… ########################################### [100%]
1:rubygems ########################################### [100%]
3.15.再次创建集群
gem install redis
报错
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
更新ruby版本
1.安装CURL
sudo yum install curl
2.安装RVM
curl -L get.rvm.io | bash -s stable
报错
Downloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc
Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).
GPG signature verification failed for ‘/usr/local/rvm/archives/rvm-1.29.3.tgz’ – ‘https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc‘! Try to install GPG v2 and then fetch the public key:
gpg2 –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
or if it fails:
command curl -sSL https://rvm.io/mpapis.asc | gpg2 –import –
the key can be compared with:
mpapis (Michal Papis) | Keybase
NOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.
command curl -sSL https://rvm.io/mpapis.asc | gpg2 –import -解决key无法找寻问题
3.再次安装RVM
Creating group ‘rvm’
Installing RVM to /usr/local/rvm/
Installation of RVM in /usr/local/rvm/ is almost complete:
安装成功
4.使其刚才安装RVM立即生效
source /usr/local/rvm/scripts/rvm
5.查询ruby的已知版本
rvm list known
6.选择一个版本进行安装(一定要大于等于2.2.2)
rvm install 2.4.4
7.需要把ruby的版本换成2.4.4
rvm use 2.4.4
8.把以前的版本卸载
rvm remove 2.0.0
9.是否使用了2.4.1版本
rvm –version
3.16.再次创建集群
gem install redis
Fetching: redis-4.0.1.gem (100%)
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 1 seconds
1 gem installed
安装成功
创建集群
3.17.查看集群是否确定创建成功
进入(连接)redis数据库
首先需要在redis的src目录下执行
./redis-cli -h 192.168.1.112 -c -p 6380
3.18.测试对redis数据库进行操作
新增数据
set key value([{},{},{},{},{}])
如果新增成功,会返回一个字符串(OK)
查询数据
get key
删除数据
del key,如果成功后会返回1,如果失败会返回0
注意:
在redis数据库中(redis的缓存)是没有修改这一项,也就是没有update操作
自增数字 oracle:sequeneces mysql:auto increnment
incr key:使key对应value自行自增(+1)
注意:所有的incr修饰的key对应的value都是数字类型
incr k1
Integer value = get k1;
if(value == null) {
set k1 1;
}
incr k1;
最常用的地方是订单系统的id匹配和物流单号
自减数字
decr key实现key所对应的value的自减
如果使用decr时,value的值小于0的时候,是有负数的,不会报错!!!
设置redis缓存失效时间
expire key time(senconds),如果缓存失效时间设置成功,返回1
如果设置缓存失效的时候为负数,则会直接失效(删除)
3.19.退出redis缓存
exit
如果七期班的各位,在安装redis的时候,报错,各种花里胡哨的错,抛各种异常,请不要联系李老师,不在线,谢谢!!!!!!
能做的就是把虚拟机直接删掉,然后重新安装!
优秀不?
redis比较常用的命令:
增
关系型数据库:insert into xxx
redis:set key value
value:在通常情况下也是String,但是也可以是其他类型,一般用不到,在日常开发工作中最常用的类型是json
set “person” “{name:zhangsan,age:18,nickname:zhangdamazi,address:tiananmen}”
eg:set name zhangsan
返回值的类型是字符串–>”OK”
删
关系型数据库:delete from xxx
redis:del key
eg:del name
返回是int类型,表示了受影响的行数
改
关系型数据库中:update xxx set …
redis:没有修改!只能覆盖
eg:set name lisi
查
关系型数据库中:select * from xxx
redis:get key
在查询的时候,如果没有查询到数据,redis是不会返回null的,而是会返回”nil”字符串
自增:
incr key
这里的key可以已经存在于数据库中,也可以是新的,并不存在的
如果key已经存在于数据库中,并且不是一个数字类型,使用incr的时候就会报错
(error) ERR value is not an integer or out of range
自减:
decr key
和关系型数据库不一样
如果key不存在,直接使用递减进行减少的话,可以是负数
也就是在redis中,最大的整数就是上线,最小可以是负数,而关系型数据库不可以!
2.2.2.hbase/hive/pig
列数据库:
关系型数据库称之为行数据库
我不知道我不知道
我知道我不知道
我知道我知道
我不知道我知道
2.2.3.MongoDB
图形数据库