7 十二_XFL

尚未进行身份认证

我要认证

喜欢旅行,打羽毛球,打乒乓球,看足球,动漫.对大数据,分布式,消息中间件,高并发感兴趣

等级
TA的排名 5w+

如何解决 if-else 过多的问题

前言 if-else基本上是所有高级语言都有的语句。Java,Python,Go,C++。可以说if-else是编程 语言种必须用的。基本上大大小小的需求都需要用到if-else。if-else不能滥用,不要让自 己变成只会写if-else的程序员。if-else滥用会导致代码可读性,维护成本增高。我们需要 使用好if-else来。使用卫语句,提前return。提前return减少不必要的判断,减少If-else嵌套层次。优化前: if(a != null){

2020-07-20 00:55:17

Redis缓存一致性问题解决方案

在开发中经常使用到redis。redis作为缓存可以加快程序响应速度。从redis缓存中读取数据大致需要0.5ms左右,从数据库需要几毫秒。大致业务流程如下图:每次设置缓存时都有一个过期时间,根据不同业务,过期时间也不一致,设置过期时间能保证缓存数据最终一致性问题。这样能保证在更新数据库成功,更新缓存失败,或者缓存了脏数据时,缓存过期后,能正确的读取到最新的值。我们常见的三种缓存更新方案:...

2020-04-27 12:05:20

Python迁移MySQL数据到MongoDB和Elasticsearch

在工作中经常遇到一些需要批量导入数据到NoSql中。比如我们上线一个新的功能,需要把mysql的一些数据批量导入到Elaticsearch或者mongodb中。这里使用Python代码简洁,方便高效。根据需求变更参数,sql执行以下脚本即可。import pymysql, jsonimport pymongofrom elasticsearch import Elasticsearch,...

2020-04-09 00:55:07

使用Redis实现分布式可重入锁

在分布式应用中经常需要用到分布式锁。redis使用set命令来实现分布式锁SET key value [EX seconds] [PX milliseconds] [NX|XX]直接使用该命令构建的redis分布式锁是不像jdk的reentrantlock具有可重入性的,使用线程的ThreadLocal变量存储当前持有锁的计数,可以实现redis分布式锁的可重入性。另外Redis分布式锁有...

2020-03-26 23:21:17

使用Redis HyperLogLog统计UV浏览用户数

在开发中,经常遇到要统计某个页面的访问用户数UV。我们很容易想到使用Redis Set来统计,当用户数不多的时候确实可以,本人开发的项目中药统计一个月面一个月用户的访问数量,月活跃用户数量在千万级别以上,如果用Set即使使用Hash打散存储key也需要700-800MB的redis内存,这明显很浪费.这种场景中使用HyperLogLog进行去重统计是非常合适的.HyperLogLog算法是一种非...

2020-03-24 22:49:47

Redis的数据结构和相关常用命令

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。本节只对Redis命令进行扼要的介绍,且只列出了较常用的命令。如果想要了解完整的Redis命令集,或了解某个命令的详细使用方法,请参考官方文档:https://redis.io/commandsKeyRedis采用Key-Value型的基本数据结构,任何二进制序列都可以作为Redis的Key使用(例如普通的字符串或一张JP...

2019-06-18 16:41:53

Spring aop获取目标对象,方法,接口上的注解

在开发中,我们经常需要使用spring aop自定义注解来实现一些特定的功能。比如权限拦截,多数据源动态切换。在编写切面通知实现类中我们需要获取到注解上的值内容。比如方法上的注解,类上的注解,接口上的注解。AOP的基本概念:切面(Aspect) :通知和切入点共同组成了切面,时间、地点和要发生的“故事”。连接点(Joinpoint) :程序能够应用通知的一个“时机”,这些“时机”就是连接...

2018-11-25 22:51:54

Java字符串相似度匹配

原文:http://wdhdmx.iteye.com/blog/1343856#bc2319361package com.xfl.boot.common.utils;/** * Created by XFL * time on 2018/11/16 0:10 * description: */public class SimilarityUtils { public sta...

2018-11-16 00:30:31

Java单例的实现,单例模式为什么需要volidate

单例模式可以说是大多数开发人员在实际中使用最多的,常见的Spring默认创建的bean就是单例模式的。单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。其中单例模式最重要的是确保对象只有一个。 常见单例模式的实现方式。主要是区分懒加载,非懒加载。 非懒加载实现方式: 该方式使用的是类加载机制确保系统只会生成一个对象。但是该方式没有实现懒加载。public class TestS...

2018-08-28 00:27:58

springboot使用hibernate-validator校验请求参数

作为Web后台开发人员,对于api接口进行参数校验是非常必要的操作。可以说不进行参数校验是不负责任的开发。对参数校验才能使接口更加安全健壮。每个业务接口都有大量的参数需要校验。如果将这些参数放置到业务中使用if,else之类的判断则会显得代码不简洁。多了很多不必要的参数校验代码。验证代码繁琐,重复劳动。 在开发中使用hibernate-validator框架进行参数校验能非常友好的解决代码繁琐,...

2018-08-13 00:33:00

使用Spring的Aop拦截请求参数,请求头信息,响应结果,响应时间

在Web应用中线上请求的监控非常重要,在大部分的应用中对于请求参数返回参数,响应时间,请求头信息都是非常重要的,对于线上问题排查是非常重要的。这里使用Spring aop来实现对每个请求监控,打印请求参数,返回参数等等。在实际应用中随着线上应用的稳定需要对uri做监控管理,哪些需要监控,哪些不需要等等设置,如果稳定的请求监控会消耗大量的性能。最好能够对每个请求实体返回实体实现系列化接口,重...

2018-05-29 01:03:01

解决Java中Long类型转换成Json时,在Js代码调用时精度丢失的问题

在Java中18位或者更高位的Long类型转化成json,js调用时会存在精度丢失的问题。Spring MVC中默认的消息转换器时MappingJackson2HttpMessageConverter,使用的是Jackson系列化的,也就是ObjectMapper。所以我们也可以设置ObjectMapper将所有的Long类型转换成String类型,但是这个方法粒度大,会将所有的Long类型都转换...

2018-03-20 23:37:25

使用logstash-6.2.2和logstash-input-jdbc插件实现mysql数据同步到Elasticsearch

首先需要安装Elasticsearch,安装方法在上一篇文章中有了 http://blog.csdn.net/u010180738/article/details/79423341logstash的安装和elasticsearch版本需要一致,这里安装6.2.2最新版本的,需要jdk1.8版本及以上,注意elasticsearch插件2.X和6.X版本相差较大,并且没有向下兼容。 参数和配...

2018-03-07 11:24:58

Java中CAS详解

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatil...

2018-03-04 22:16:08

Linux环境下elasticsearch-6.2.2安装以及配置

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。安装Elasticsearch-6...

2018-03-02 14:55:45

elasticsearch.yml配置解析

cluster.name: my-applicationcluster.name指定集群的名称,同一个集群的节点要设置在同一个集群名称。如果不配置该项,系统默认取elasitcsearchnode.name指定节点的名称,同一集群的节点名称不能相同,如果不配置该项,系统会随机分配一个名称。 node.attr.rack指定节点的部落属性,这是一个比集群更大的范围。 node.maste...

2018-03-02 14:14:36

RedisTemplate系列化器之GenericJackson2JsonRedisSerializer

Redis作为高速缓存数据库,目前应用非常广泛。RedisTemplate是Spring提供用于操作redis数据库的一个类。 将数据存放到Redis中,以及数据读取。这里必然涉及到数据的系列化和反系列化。RedisTemplate默认的系列化类是JdkSerializationRedisSerializer,用JdkSerializationRedisSerializer序列化的话,被序列化的...

2018-02-27 01:04:08

使用redis 实现分布式锁

使用redis 实现分布式锁在有些需要高可用的场景中,保证并发量的情况下需要使用分布式锁来做控制,保证应用的可靠性。我们知道jdk提供了一些常用的锁比如ReentrantLock,ReentrantReadWriteLock,synchronized。对于这些锁的实现这里就不详细介绍了,在使用过程中这些锁锁的是对象,在单服务器的时候有用。但是现在基本都不是单一服务器了,一般都会有多台服务器。对

2018-01-14 23:59:34

使用FutureTask执行并行耗时任务

在实际开发中,一般任务都有串行和并行之分。比如走完A步骤之后才能在走B步骤,这个属于串行。比如登录注册操作,只有先获取验证码,然后在使用验证码登录。又比如为了获取一个商品的价格,我们可以从多个渠道获取,从不同渠道获取商品价格是属于并行任务的,多个渠道之间完全没有任何的关系。这个时候我们一般都要搜集结果。FutureTask就是非常适合这种情景的。 主要api有get,run,canc...

2017-11-06 00:04:07

Spring嵌套事物,事物的传播之REQUIRES_NEW

很久没写博客了,大概是目前这份工作本身就能让我学到挺多东西吧,所以没去写博客了,希望以后的自己,只要工作内容是开发就要保持一个月至少一篇的博客吧。 > 之前写过一篇文章是关于spring事物的传播行为的。 > 今天这篇文章主要是将RROPAGATION_REQUIRES_NEW传播行为在实际项目中的使用。该事物会开启一个新的事物也就是创建一个事物和之前的事物没有任何关系。 关于PROPAG

2017-10-23 00:23:07

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。