瑞吉外卖Linux&Redis

1、linux简介

Linux系统版本
Linux系统分为内核版发行版
内核版:
        由LinusTorvalds及其团队开发、维护
        免费、开源
        负责控制硬件
发行版:
        基于Linux内核版进行扩展
        由各个Linux厂商开发、维护
        有收费版本和免费版本

2、linux安装

Linux系统的安装方式
物理机安装:直接将操作系统安装到服务器硬件上
虚拟机安装:通过虚拟机软件安装
 

3、网卡

ip addr

 3.1网卡设置

 3.2安装SSH连接工具

SSH(Secureshell),建立在应用层基础上的安全协议

企业linux安装在服务器上,需要我们远程连接。

使用:xshell

4、目录介绍

5、安装方式 

 5.1安装jdk

//注意jdk的位置
JAVA_HOME=/usr/local/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH

扫描二维码关注公众号,回复: 15647309 查看本文章

 5.2安装Tomcat

 5.2.1验证是否成功


 

5.2.2防火墙操作

查看防火墙状态

systemctl status firewalld

firewall-cmd --state


暂时关闭防火墙

systemctl stop firewalld


永久关闭防火墙

systemctl disable firewalld


开启防火墙

systemctl start firewalld


开放指定端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent


关闭指定端口

firewall-cmd --zone=public --remove-port=8080/tcp --permanent


立即生效

firewall-cmd --reload


查看开放的端口

firewall-cmd --zone=public --list-ports

注意:
1、systemct是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作
2、firewall-cmd是Linux中专门用于控制防火墙的命令
3、为了保证系统安全,服务器的防火墙不建议关闭




5.2.3停止Tomcat服务的方式:

①运行Tomcat的bin目录中提供的停止服务的脚本文件shutdwnoch

sh shutdown.sh

./shutdown.sh

②结束Tomcat进程
查看Tomcat进程,获得进程id

 ps -ef | grep tomcat


 

注意:
kill 命令是Linux提供的用于结束进程的命令,-9表示强制结束


 5.3安装MySQL

①:检测当前系统中是否安装MySQL数据库

rpm -qa

查询当前系统中安装的所有软件

rpm -qa | grep mysql
查询当前系统中安装的名称带mysql的软件


rpm -qa | grep mariadb
查询当前系统中安装的名称带mariadb的软件

RPM(Red-HatPackageManager)RPM软件包管理器,是红帽Linux用于管理和安装软件的工具
注意事项:

如果当前系统中已经安装有MySQL数据库,安装将失败。Centos7自带mariadb,与MySQL数据库冲爽
 ②:卸载已经安装的冲突软件

rpm -e --nodeps 软件名称                 卸载软件
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.×86_64

③:将资料中提供的MySQL安装包上传到Linux并解压

mkdir /usr/loca/mysql
tar-zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz-c /usr/local/mysql
 

 ④:按照顺序安装rpm软件包

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
yum install net-tools
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm


检测依赖失败:

因为yum安装了旧版本的gpg keys造成的

给后缀添加"--force --nodeps"即可

eg:

 rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm --force --nodeps

说明1:安装过程中提示缺少net-tools依赖,使用yum安装
说明2:可以通过指令升级现有软件及系统内核

yum update 

⑤:启动mysql(注意不要粘贴空格)

systemctl status mysqld                 查看mysql服务状态
systemctl start mysqld                        启动mysq服务
systemctl enable mysqld                        开机启动mysq服务

netstat -tunlp或netstat -tunlp l grep mysql           查看已经启动的服务                            
ps -ef | grep mysql                                         查看mysql进程

⑥登录MySQL数据库,查阅临时密码
 

cat /var/log/mysqld.log                查看文件内容
cat /var/log/mysqld.log | grep password                查看文件内容中包含password的行信息

注意:

[Note] A temporary password is generated for root@localhost: IAzt_RVda7sD

冒号后面的是密码,注意空格(不要空格)

⑦:登录MySQL,修改密码,开放访问权限

mysql -uroot -p                                登录mysql(使用临时密码登录)

#修改密码
set global validate_password_length=4;                        设置密码长度最低位数
set global validate_password_policy=Low;       设置密码安全等级低,便于密码可以修改成root
set password = password('root');                        设置密码为root

#开启访问权限
grant all on *.* to 'root'@'%'identified by 'root';
flush privileges;
  刷新权限

⑧:测试MySQL数据库是否正常工作

show databases;

5.4安装lrzsz

1、搜索lrzsz安装包,命令为yum list lrzsz 

2、使用yum命令在线安装,命令为 yum install lrzsz.x86_64

注意: 

Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOs中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,无须繁项地一次次下载、安装。
 

6、项目部署


6、1手工部署项目(复杂)

手动打包,上传jar包 。通过命令运行

 ①:在IDEA中开发SpringBoot项目并打成jar包

②:将jar包上传到Linux服务器 

eg:mkdir /usr/local/app
创建目录,将项目jar包放到此目录

③:启动SpringBoot程序

java -jar jar包名字

 ④:检查防火墙,确保8080端口对外开放,访问SpringBoot项目

使用防火墙部分命令

⑤:改为后台运行SpringBoot程序,并将日志输出到日志文件(linux关闭还能运行)

 &>:日志文件名字(当前目录创建)

&:表示程序在后台执行

eg:nohup java -jar jar包名字 &> 日志文件名字 &

目前程序运行的问题:

        a.线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
        b.线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息

⑥:停止SpringBoot程序

查询进程

ps -ef | grep java

删除

kill -9 对应的进程号


6.2通过She脚本自动部署项目


 

 ①:在Linux中安装Git
yum list git               列出git安装包
yum install git                在线安装git

 ②:使用Git克隆代码

cd /usr/local
git clone https://gitee.com/chuanzhiBoke/hellowortd.git

③:将资料中提供的maven安装包上传到Linux,在Linux中安装maven 

tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/

---------------------------------------------------------------

vim /etc/profile  修改配置文件加入以下内容

export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

---------------------------------------------------------------

source /etc/profile

mvn -version

---------------------------------------------------------------

修改配置文件

vim /usr/local/apache-maven-3.5.4/conf/settings.xml 

如下:

<localRepository>/usr/local/repo</localRepository>

④:将资料中提供的Shel脚本文件复制到Linux

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=helloworld

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/helloworld

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar helloworld-1.0-SNAPSHOT.jar &> helloworld.log &
echo 项目启动完成

 ⑤为用户授权

 

⑦:设置静态ip

修改文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33

⑧重启网络服务

systemctl restart network

 注意:重启完网络服务后ip地址已经发生了改变,此时Finalshell已经连接不上Linux系统
需要创建一个新连接才能连接到Linux。

2、Redis

Redis是一个基于内存key-Value结构数据库。

1、Redis入门

可用作:数据库、缓存和消息中间件。

关系型数据库的补充

Windows版下载地址:https://github.com/microsoftarchive/redis/releases
Linux版下载地址:Index of /releases/ (redis.io)

Linux系统安装Redis步骤:

1.将Redis安装包上传到Linux
2.解压安装包,命令: tar -zxvf redis-4.0.0.tar.gz -C /usr/local
3.安装Redis的依赖环境gcc,命令: yum install gcc-c++
4.进入/usr/local/redis-4.0.0,进行编译,命令:make
5.进入redis的src目录,进行安装,命令:make install        

linux中redis服务启动与停止:

Linux中redi服务启动,可以使用redis-server

默认端口号为6379

Ctrl+C停止Redis服务

后台执行: 主目录下修改配置文件 redis.conf 中daemonize 改为yes

再执行src/redis-server ./redis.conf就是后台运行

其他:

PID:进程

src下redis-cli:连接客户端

编辑模式:/查找内容

修改有密码登录客户端修改redis.conf

添加:requirepass 密码

eg:requirepass 123456

客户端查询登录时:auth 密码 

启动客户端时:src/redis-cli -h localhost -p 6379 -a 密码(123456)

eg:auth 123456

切换数据库默认16个  0--15号

select (dbid)数据库名字 

------------------------------------------------------------------------------------------------------------------------ 

Redis的windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

2、数据类型

key-Value结构的数据,其中key是字符串类型,value有5种常用的数据类型

3、常用命令


Redis中文网

1、字符串string操作命令

SET key value                设置指定key的值/相同key覆盖之前value
GET key                        获取指定key的值
SETEX key seconds value                设置指定key的值,并将key的过期时间设为seconds秒
SETNX key value                                只有在key不存在时设置key的值

127.0.0.1:6379> set name wyh
OK
127.0.0.1:6379> get name
"wyh"


2、哈希hash操作命令

Redishash是一个string类型的field和value的映射表,hash特别适合用于存储对象
 

HSET key field value                        将哈希表key中的字段field的值设为value
HGET key field                                获取存储在哈希表中指定字段的值
HDEL key field                                删除存储在哈希表中的指定字段
HKEYS key                                        获取哈希表中所有字段
HVALS key                                        获取哈希表中所有值
HGETALL key                        获取在哈希表中指定key的所有字段和值


3、列表list操作命令


4、集合set操作命令


5、有序集合sortedset操作命令

6、通用命令

4、在java中操作Redis

4.1 基本使用

1、Jedis的maven坐标:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

2、创建测试类

/**
 * 使用jedis操作Redis
 */
public class JedisTest {

    @Test
    public void testRedis(){
        //1获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2、执行具体的操作
            //设置
        jedis.set("username","xiaoming");

        String value = jedis.get("username");
        System.out.println(value);

            //删除
        jedis.del("username");

            //hash
        jedis.hset("myhash","addr","bj");
            //获得值
        String hValue = jedis.hget("myhash","addr");
        System.out.println(hValue);

        //查询所有
        Set<String> keys = jedis.keys("*");
        for (String key : keys){
            System.out.println(key);
        }
        //3关闭连接
        jedis.close();
    }
}

4.2 Spring Data Redis(常用)

在SpringBoot项目中,可以使用SpringDataRedis来简化Redis操作

1、导入坐标 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 第一步:配置类application.yml

spring:
  application:
    name:java_redis
  #redis相关配置
  redis:
    host:localhost
    port:6379
    #passwoerd:
    database:0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 # 连接池中的最小空闲连接

第二步:reids数据库查询不到。

原因:序列化

解决:创建配置类修改序列化

SpringDataRedisTest
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    //操作不同的接口就需要这个redisTemplate对象
    //此处的redisTemplate对象是我们修改过的
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city123","beijing");

        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);
    
//long型加l
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

    /**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

    /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }

    /**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

    }

    /**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }

    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }
}
RedisConfig
package com.itheima.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
//设置新的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_55008454/article/details/130191830