MySQL 与 Redis 缓存的同步方案

本文介绍MySQL与Redis缓存的同步的两种方案

  • 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现
  • 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis

方案1(UDF)

ElasticSearch 常见异常

1. Cannot open file logs/gc.log due to Permission denied

不能用root账户启动ES,需要用ES账户启动su essearch ./bin/elasticsearch

如果出现以上问题,则是因为用root启动过导致。到ElasticSearch中的log中删除gc.log文件即可

Android跳转TextView中的超链接并拦截点击事件

可跳转可拦截点击事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class DeepLinkActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deeplink);

TextView textView = findViewById(R.id.textview);
textView.setText(getClickableHtml("<a href='scbeasysim://purchase/01219ef3-f8ab-82e5-ba03-a876d88d0263'>前往 SCB 支付</a>"));
textView.setMovementMethod(LinkMovementMethod.getInstance());
}

/**
* 格式化超链接文本内容并设置点击处理
*/
private CharSequence getClickableHtml(String html) {
Spanned spannedHtml = Html.fromHtml(html);
SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
for (final URLSpan span : urls) {
setLinkClickable(clickableHtmlBuilder, span);
}
return clickableHtmlBuilder;
}

/**
* 设置点击超链接对应的处理内容
*/
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);

ClickableSpan clickableSpan = new ClickableSpan() {
public void onClick(View view) {
Log.i(LianConstants.TAG, "URL: " + urlSpan.getURL());
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlSpan.getURL()));
DeepLinkActivity.this.startActivity(intent);
}
};

// The original URLSpan needs to be removed to block the behavior of browser opening
clickableHtmlBuilder.removeSpan(urlSpan);
clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}
}

​Gradle替代Maven实现Spring Boot项目构建

作为Java Web开发,很多朋友都在使用Maven作为构建工具。Gradle作为Google大力拥护的构建工具,被广泛地运用到了Android开发中,在Java Web方面也大有取代Maven上位的趋势。

Gradle简介

Gradle是一款开源的自动化构建工具,使用灵活且性能极佳,可以使用 Groovy 或者 Kotlin DSL 来编写构建脚本。从移动开发到微服务,从小团队到大企业,Gradle提高了开发人员的生产力。

docker-maven-plugin实现部署SpringBoot应用

最近又发现了一款好用的Maven插件,fabric8io出品的docker-maven-plugin,可以把SpringBoot应用方便的部署到Docker容器中去。该插件可以实现打包镜像、推送到镜像仓库、运行应用等一系列操作,本文将对其用法进行详细介绍,希望对大家有所帮助!

安装私有镜像仓库

RocketMQ详解——RocketMQ事务消息

事务消息是RocketMQ提供的非常重要的一个特性,在4.x版本之后开源,可以利用事务消息轻松地实现分布式事务。本文对RocketMQ的事务消息进行详细介绍,并给出了代码示例。

相关概念

RocketMQ详解——RocketMQ的消息模式

RocketMQ的消息模式

在RocketMQ中,可以理解为没有ActiveMQ的createQueue()createTopic()的用法,也就是并没有P2P和Pub/Sub类似的概念。RocketMQ不遵循JMS规范,而是使用了一套自定义的机制。可以理解为RocketMQ都是基于Pub/Sub发布订阅模式的,在此基础上提供了集群消息和广播消息两种消息模式,可通过消费端方法consumer.setMessageModel()进行设置。


Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :