<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xc_wt的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xc_wt</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xc_wt]]></copyright><item><title><![CDATA[CAS理解]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/122029697</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/122029697</guid><author>xc_wt</author><pubDate>Sun, 19 Dec 2021 21:06:43 +0800</pubDate><description><![CDATA[在jdk5 之前java是靠synchronized来保证同步的，这样就引入了锁，这样会有以下问题：

1）在多线程竞争下，加锁、释放锁会导致比较多的上下文切换和调度延时，引起性能问题。

2）一个线程持有锁会导致其它所有需要此锁的线程挂起。

3）如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置，引起性能风险。

volatile是轻量级的同步机制，是不错的机制，但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。

独占锁是一种悲观锁，synchronized就是]]></description><category></category></item><item><title><![CDATA[多线程系列--创建线程的2种方式（二）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/121473270</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/121473270</guid><author>xc_wt</author><pubDate>Mon, 22 Nov 2021 16:01:31 +0800</pubDate><description><![CDATA[常用的两种方式，Thread 和Runnable

Thread 是一个类，它实现了Runnable 接口。



Runnable 是一个接口。



采用继承的方式实现多线程：



打印的结果：

Thread-1 卖票：ticket10
Thread-1 卖票：ticket9
Thread-1 卖票：ticket8
Thread-1 卖票：ticket7
Thread-1 卖票：ticket6
Thread-1 卖票：ticket5
Thread-1 卖票：ticket4
Thread-1 卖票..]]></description><category></category></item><item><title><![CDATA[多线程系列--基础知识（一）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/121400205</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/121400205</guid><author>xc_wt</author><pubDate>Thu, 18 Nov 2021 14:43:30 +0800</pubDate><description><![CDATA[线程基础知识

线程有五种状态：

新建状态(New) 线程对象被创建后，处于新建状态。Thread thread = new Thread();

就绪状态(Runnable) 也可称为'可执行状态'，线程对象被创建后，其它线程调用了该对象的start()方法，从而来启动该线程。thread.start()处于就绪状态的线程，随时可能被CPU调度执行。

运行状态(Running) 线程获取CPU权限进行执行。线程只能从就绪状态进入到运行状态。

阻塞状态(Blocked)阻塞状态是线程因为某种原...]]></description><category></category></item><item><title><![CDATA[Redis 订阅发布（十）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115466338</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115466338</guid><author>xc_wt</author><pubDate>Tue, 06 Apr 2021 17:40:22 +0800</pubDate><description><![CDATA[命令：

PUBLISH redis"liaotian" 发布

SUBSCRIBE redis 订阅

场景：实时的聊天场景。
]]></description><category></category></item><item><title><![CDATA[持久化之AOF操作（九）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115465664</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115465664</guid><author>xc_wt</author><pubDate>Tue, 06 Apr 2021 17:26:13 +0800</pubDate><description><![CDATA[AOF 是将除了读操作外的操作全部记录下来，重新执行下！

以日志的形式来记录每个写操作，将Redis执行过的所有指令记录下来（读操作不记录），只许追加文件 但不可以改写文件，redis启动之初会读取该文件重新构建数据，换言之，redis重启的话就根据日志文件 的内容将写指令从前到后执行一次以完成数据的恢复工作。

redis 默认是关闭的，开启的话，只需要把no 改为yes,appendfilename 是保存文件的名称,重启redis 即可



aof 默认每秒执行一次记录，可能会丢失这1s 的数据，]]></description><category></category></item><item><title><![CDATA[持久化之RDB操作（八）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115465021</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115465021</guid><author>xc_wt</author><pubDate>Tue, 06 Apr 2021 17:12:54 +0800</pubDate><description><![CDATA[Redis 为内存数据库，即断电即失，所以Redis提供了持久化操作，RDB和AOF 两种方式。

首先介绍RDB 方式：redis 默认采用的方式。

Redis会单独创建（fork）一个子进程来进行持久化，会先将数据写入到一个临时文件中，待持久化过程 都结束了，再用这个临时文件替换上次持久化好的文件。整个过程中，主进程是不进行任何IO操作的。 这就确保了极高的性能。如果需要进行大规模数据的恢复，且对于数据恢复的完整性不是非常敏感，那 RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数]]></description><category></category></item><item><title><![CDATA[Redis.conf文件详解（七）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115372265</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115372265</guid><author>xc_wt</author><pubDate>Thu, 01 Apr 2021 14:34:34 +0800</pubDate><description><![CDATA[从上到下，依次：

网络

bind 127.0.0.1 # 绑定的ip

protected-mode yes # 保护模式

port 6379 # 端口设置

通用general

daemonize yes 以守护进程的方式运行，默认是no ,改为yes 之后则可以后台运行。

pidfile /var/run/redis_6379.pid 如果是后台运行，则需要指定一个pid 文件。

日志：

loglevel notive

logfile "" 日志的文件位置 为空则直接打印

datab.]]></description><category></category></item><item><title><![CDATA[SpringBoot2 集成redis(六)]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115369934</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115369934</guid><author>xc_wt</author><pubDate>Thu, 01 Apr 2021 11:32:47 +0800</pubDate><description><![CDATA[java 直接操作redis 默认采用的是Jedis,是官方推荐的redis 连接工具。

新建maven 工程，导入pom 文件


 &lt;dependency&gt;
   &lt;groupId&gt;redis.clients&lt;/groupId&gt;
   &lt;artifactId&gt;jedis&lt;/artifactId&gt;
   &lt;version&gt;3.5.2&lt;/version&gt;
 &lt;/dependency&gt;
&lt;dependenc]]></description><category></category></item><item><title><![CDATA[Redis 远程代码连接(五)]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115355899</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115355899</guid><author>xc_wt</author><pubDate>Wed, 31 Mar 2021 17:37:17 +0800</pubDate><description><![CDATA[①.首先是远程服务器的防火墙要关闭

Centos7 的关闭命令：

查看防火墙的运行状态：firewall-cmd --state

关闭防火墙：systemctl stop firewalld.service

禁止防火墙随机启动：systemctl disable firewalld.service

②.修改redis.conf 的配置

一，vim 打开redis.conf 注释掉bind 127.0.0.1 保证所有ip 都可以访问

这里提供一个在文本中搜索的方法：/127.0.0.1 回车.]]></description><category></category></item><item><title><![CDATA[Redis 的数据类型及命令（三）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115342652</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115342652</guid><author>xc_wt</author><pubDate>Wed, 31 Mar 2021 15:58:32 +0800</pubDate><description><![CDATA[String 字符串类型

redis 不区分大小写

设置值：set name 123

获取值：get name

获取所有的key :keys *

判断某一个key 是否存在：exists name

追加字符串：append name 456 (如果这个key 不存在，则相当于set key)

获取字符串的长度：strlen name

判断某个博客的浏览量可以使用，自增：

set views 0 初始化浏览量为0

自增1 incr views

获取当前浏览量：get views

自减.]]></description><category></category></item><item><title><![CDATA[Redis 事务(四)]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115351005</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115351005</guid><author>xc_wt</author><pubDate>Wed, 31 Mar 2021 15:58:06 +0800</pubDate><description><![CDATA[Redis 事务本质上是一组命令的集合，一个事务中的所有命令都会被序列化，在执行事务的过程中，会按照顺序执行。

Redis 没有隔离级别的概念，Redis 的单条命令可以保证原子性，但是事务不能保证原子性

redis 的事务：开启事务（multi），命令入队(set get)，执行事务(exec) 取消事务（discard）

不能保证原子性的意思就是关系型数据库，在某一个失败了，会执行回滚操作，而redis 并不会，在事务执行的过程中，如果某一个命令有错误，前面执行成功的会成功，中间失败的就失败，直接]]></description><category></category></item><item><title><![CDATA[Redis补充（二）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115341857</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115341857</guid><author>xc_wt</author><pubDate>Wed, 31 Mar 2021 09:04:41 +0800</pubDate><description><![CDATA[Redis 是单线程的

Redis 处理数据是很快的，因为它是基于内存操作的，Redis 的性能瓶颈在于机器的内存和带宽，CPU不是Redis 的瓶颈。

多线程操作redis 的话，会涉及到CPU的来回切换，这个切换虽然时间很短，但是对于redis 来讲，这个时间总计加起来就很多了，耗时的操作，而对于内存的操作，全部在内存中完成，没有上下文的切换，效率最高，读写全部在CPU中完成，这是最快的方案。

Redis 的官方提供的数据是每秒处理100000+ QPS,完全不比key,value的memecac]]></description><category></category></item><item><title><![CDATA[Redis 入门（一）]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/115331129</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/115331129</guid><author>xc_wt</author><pubDate>Tue, 30 Mar 2021 18:01:19 +0800</pubDate><description><![CDATA[Redis 入门（一）
Redis 是什么鬼？
Redis 是一个开源的使用C语言写的，基于内存运行并且可持久化的日志型，key-value数据库，并支持多种语言。
特点：免费开源，是当下最热门的NoSql数据库之一，也被称为结构化数据库!
Redis 能干哈？
1、内存存储、持久化，内存中是断电即失、所以说持久化很重要（rdb、aof）
2、效率高，可以用于高速缓存
3、发布订阅系统
4、地图信息分析
5、计时器、计数器（浏览量！）
特性：支持多样化数据类型，持久化，事务，集群…
Redis 的安装
Wi]]></description><category></category></item><item><title><![CDATA[java用Nexus搭建maven私服]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/104943313</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/104943313</guid><author>xc_wt</author><pubDate>Wed, 18 Mar 2020 14:35:52 +0800</pubDate><description><![CDATA[今天再更新一波。。。。。。

maven仓库分为两大类：1.本地仓库，2.远程仓库，而远程仓库又分为中央仓库，私服仓库，其他公共库

私服是一种特殊的远程仓库，它是架设在局域网内的仓库服务，私服代理广域网上的远程仓库，供局域网内的Maven用户使用。当Maven需要下载构件的时候，它从私服请求，如果私服上不存在该构件，则从外部的远程仓库下载，缓存在私服上之后，再为Maven的下载请求提供服务。我们...]]></description><category></category></item><item><title><![CDATA[集成工具Jenkins入门到进阶]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/104846828</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/104846828</guid><author>xc_wt</author><pubDate>Fri, 13 Mar 2020 19:13:33 +0800</pubDate><description><![CDATA[Jenkins 的三大特点，持续部署，持续集成，持续交付

持续部署：Jenkins 保证 项目在开发的过程中，在做完一部分功能，自己通过测试后，通过自动化的方式把项目部署在服务器上运行，解决了手动部署的问题，并且可以不间断的部署。

持续集成:项目是分小组开发的，自己测试没问题，但并不能保证全部整合完之后，部署到服务器没有问题，经常性的，频繁的把所有模块集成在一起测试，有问题尽早发现，这就是持续...]]></description><category></category></item><item><title><![CDATA[Springboot处理字符串。。。]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/90232375</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/90232375</guid><author>xc_wt</author><pubDate>Wed, 15 May 2019 11:21:55 +0800</pubDate><description><![CDATA[我们在进行开发的过程的难免会进行对象的返回，比如一个用户对象User，以及一个集合list，Map等等。在这篇博客中我们就是需要学习一下怎么对一个对象中某些属性的处理。需要补充的一点就是SpringBoot采用的是JackSon进行的序列化以及反序列化，不用我们自己去进行实现，它是自动实现。我们也可以改变它实现的方式或者说我们可以自己去定义序列化和反序列化。当然，因为SpringBoot帮我们做的...]]></description><category></category></item><item><title><![CDATA[datanode服役新节点]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/90199960</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/90199960</guid><author>xc_wt</author><pubDate>Tue, 14 May 2019 09:41:07 +0800</pubDate><description><![CDATA[随着公司业务的增长，数据量越来越大，原有的数据节点的容量已经不能满足存储数据的需求，需要在原有集群基础上动态添加新的数据节点。

准备：

克隆一台机器，保证IP的正确性以及配置ssh免密登录。

重新解压一个新的hadoop.tar.gz

服役新节点的具体步骤：
（1）在新克隆的机器上的/opt/module/hadoop-2.7.2/etc/hadoop下创建文件dfs.hosts

然后v...]]></description><category></category></item><item><title><![CDATA[namenode，secondary namenode和datanode的工作机制]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/90199633</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/90199633</guid><author>xc_wt</author><pubDate>Tue, 14 May 2019 09:28:08 +0800</pubDate><description><![CDATA[namenode的工作机制：

第一阶段：namenode启动

（1）第一次启动namenode格式化之后，创建fsimage和edits文件。如果不是第一次启动，则直接加载编辑日志和镜像文件到内存。

（2）客户端对元数据进行增删改的请求。

（3）namenode记录操作日志，更新滚动日志。

（4）namenode在内存中对数据进行增删改查

第二阶段：Secondarynamenode工...]]></description><category></category></item><item><title><![CDATA[Hadoop的集群安全模式]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/90199527</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/90199527</guid><author>xc_wt</author><pubDate>Tue, 14 May 2019 09:09:22 +0800</pubDate><description><![CDATA[namenode 启动时，首先将镜像文件fsimage载入内存，并执行编辑日志edits中的各项操作。一旦在内存中成功建立文件系统元数据的镜像，则创建一个新的faimage文件和一个空编辑日志。此时，namenode开始监听datanode请求。但是此刻，namenode运行在安全模式，即namenode的文件系统对于客户端来说是只读的。

系统中的数据块的位置并不是由namenode维护的，而是...]]></description><category></category></item><item><title><![CDATA[Hadoop中namenode出现故障的解决方法]]></title><link>https://blog.youkuaiyun.com/xc_wt/article/details/82344809</link><guid>https://blog.youkuaiyun.com/xc_wt/article/details/82344809</guid><author>xc_wt</author><pubDate>Mon, 03 Sep 2018 10:40:51 +0800</pubDate><description><![CDATA[Namenode故障后，可以采用如下两种方法恢复数据。

方法一：将SecondaryNameNode中数据拷贝到namenode存储数据的目录

方法二：使用-importCheckpoint 选项启动namenode守护进程，从而将SecondaryNamenode中华数据拷贝到namenode目录中。

①：手动拷贝SecondaryNameNode数据：

1）kill -9 nameno...]]></description><category></category></item></channel></rss>