Jenkins

1.Redis实现分布式锁的缺陷

        当我们的程序执行时间超过redis锁的时间时,会出现bug

        如何解决该问题?可以使用第三方插件Redisson,它是基于Redis实现的,提供了一个看门狗的机制。

        这个看门狗机制会每隔10秒看一次锁有没有过期,如果有锁则表示该方法还未结束,会给这个锁延长生存时间。

        如何使用Redisson?

        1.1引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.23.4</version>
</dependency>  
        1.2创建对象

        由于该插件没有被Spring容器进行管理,所以需要先将该对象交给Spring容器来管理。

@Configuration
public class RedisConfig {
    @Bean
    public RedissonClient redissonClient(){
        Config config = new Config();
        //配置单机Redis
        config.useSingleServer().setAddress("redis://192.168.145.136:6381");
        //配置集群版Redis
        //config.useClusterServers().addNodeAddress("redis://192.168.145.136:6380", "redis://192.168.145.137:6381");
        return Redisson.create(config);
    }
}
        1.3修改源代码 
@Autowired
    private RedissonClient redissonClient;

    public String decrement(Integer productid) {
        //获取指定锁对象
        RLock lock = redissonClient.getLock("product::" + productid);
        //加锁
        lock.lock(30, TimeUnit.SECONDS);
        try {
            int num = stockDao.findById(productid);
            if (num > 0) {
                stockDao.update(productid);
                System.out.println("商品编号为:" + productid + "的商品库存剩余:" + (num - 1) + "个");
                return "商品编号为:" + productid + "的商品库存剩余:" + (num - 1) + "个";
            } else {
                System.out.println("商品编号为:" + productid + "的商品库存不足。");
                return "商品编号为:" + productid + "的商品库存不足。";
            }
        } finally {
            //释放锁资源
            lock.unlock();
        }
    }

2.Redis常见面试题

        2.1Redis在工作中常用场景

                1.可以作为热点缓存数据库

                2.可以解决分布式锁

                3.做限时任务的操作

                4.热门商品的排行等问题

        2.2Redis支持的数据类型

                redis支持很多数据类型,而我们再工作中使用最多的是String,Hash,List,Set,SortedSet

        2.3Redis持久化方式

                RDB:快照模式,每隔一段时间会对Redis内存中的数据进行快照保存

                AOF:日志追加模式,当执行写操作会通过write函数记录到日志文件中

        2.4Redis缓存穿透以及如何解决

                什么是缓存穿透:

                Mysql数据库和Redis缓存中都没有该数据,这时有人恶意访问这种数据,会导致因为缓存中没有该数据,就会前往数据库查询,最终导致数据库宕机。

                解决方案:

                1.在控制层对一些不合法的数据进行校验

                2.使用布隆过滤器,把数据库中存在的id放入一个大的bitmap数组中,当查询一个不存在的id时就会被该过滤器过滤掉。

                3.把数据中查询出来的空对象也存入缓存中,但这个对象的存储时间不能太长,一般不超过5分钟。

        2.5Redis缓存雪崩以及如何解决

                什么时缓存雪崩:

                就是缓存中出现大量数据过期的现象,而就在这时就有大量的请求访问这些数据,压力直接给到了数据库,从而造成数据库压力过大。

                解决方案:

                1.项目上线前,预先把数据存放在缓存中。

                2.缓存中的数据在某个时间内出现大量过期就设置散列的过期时间,取消统一过期时间

                3.Redis宕机就搭建Redis集群

        2.6如何保证缓存数据和数据库数据一致

                1.合理设置缓存的过期时间

                2.当执行CUD操作时,同步修改缓存数据

        2.7Redis内存淘汰策略

volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集中任意选择数据淘汰

allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

allkeys-random:从数据集中任意选择数据淘汰

no-enviction:禁止驱逐数据

3.Jenkins

        3.1什么是Jenkins

        Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。

        3.2为什么使用Jenk

         开发人员将代码提交到git远程仓库后,需要拉取--编译--打包--部署。每次提交到git仓库都需要重复这些操作。所以使用Jenk来帮助开发人员自动完成这些事情。

        3.3安装Jenkins

        环境:JDK11或17或21

         操作系统:虚拟机或服务器

        下载地址:https://www.jenkins.io/download/

yum install fontconfig        #安装字体配置

         安装完成之后,启动Jenkins

nohup java -jar /usr/local/soft/jenkins.war  --httpPort=8777  > /usr/local/soft/jenkins.log 2>&1 &

        nohup:表示 服务器休眠时,Jenkins依然运行

        java -jar:运行java文件

        --httpPort:端口号

        /usr/local/soft/jenkins.war:Jenkins下载位置

        /usr/local/soft/jenkins.log 2>&1 :启动Jenkins生成的日志存放位置

        &:表示后台运行

        在window访问Jenkins

        修改密码,完成后重新登陆。 

        3.4Jenkins集成jdk

        由于Jenkins需要从git拉取代码--需要进行编译。所以必须使用jdk--在Jenkins所在的服务器安装jdk并配置jdk环境,这里使用jdk17.

        解压完成后,进行环境变量配置

vi /etc/profile        #进入文件编辑 

##########################配置jdk环境变量##############################
export JAVA_HOME=/usr/local/soft/jdk17
export PATH=$PATH:$JAVA_HOME/bin

        刷新配置文件

source /etc/profile         

        然后使用java -version查看java版本是不是17

        如果不是17是其他版本,说明还之前配置了其他版本的jdk,删除其他版本的即可。 

         让Jenkins继承jdk

         JAVA_HOME是你jdk安装的目录。别名就随便起。

        3.5Jenkins集成Git

        由于jenkins需要从git远程仓库拉取项目代码,所以需要集成git

        在Jenkins所在服务器安装Git

yum install git -y        # 安装
git --version        # 查看版本

        默认的即可。然后在gitee创建一个远程仓库。

         然后在Jenkins中创建任务。

         随意填写一个任务名称,建议和仓库名称一致。

 

        在这里第三行可以看到你的git仓库保存在了哪里。

 

        3.6Jenkins集成Maven

        因为我们现在的项目都是maven项目,---打包--需要对拉取的项目进行打包。

        在Jenkins所在服务器安装Maven

https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gzicon-default.png?t=N7T8https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz        下载完成进行解压进行重命名,然后配置环境变量

mv apache-maven-3.9.4/ maven3.9.4        #重命名

vi /etc/profile        #编辑环境配置文件

export MAVEN_HOME=/usr/local/soft/maven3.9.4
export PATH=$PATH:$MAVEN_HOME/bin

        配置Maven本地仓库和镜像

        在maven安装目录conf目录下的setting.xml

         找到大约150行的镜像配置

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

        进行替换即可 

        Jenkins集成maven

        创建一个gitee远程仓库,并上传一个maven项目 

 

         安装maven完成,新建一个任务

         这样就配置好了maven,执行并查看控制台输出,查看打包位置,运行打包好的jar包

        第一次会安装一些maven的依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值