当前位置:网站首页>Vertx's responsive redis client
Vertx's responsive redis client
2022-07-03 07:25:00 【Sleeping Empire】
Introduce
Vertx Response type mysql client , With simple API, Focus on scalability and low overhead , characteristic :
- Support single example redis
- Support Sentinel Pattern
- Support Cluster Pattern
- Master-slave ( Single slice , One node write , Multiple reads )
1. maven Project dependence
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-config-yaml</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-redis-client</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.lance.common</groupId>
<artifactId>vertx-common-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.YAML File configuration
server:
port: 9000
redis:
urls:
- redis://127.0.0.1:6380/0
clientType: STANDALONE
poolName: p-red
poolCleanerInterval: 30000
maxPoolSize: 8
maxPoolWaiting: 32
3. Start loading profile , And into the config In the middle
public class RedisApplication {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
ConfigRetriever retriever = readYaml(vertx);
retriever.getConfig(json -> {
try {
JsonObject object = json.result();
DbHelper dbHelper = new DbHelper(object.getJsonObject("redis"), vertx);
dbHelper.afterPropertiesSet();
DeploymentOptions options = new DeploymentOptions().setConfig(object);
vertx.deployVerticle(MainApp.class.getName(), options);
} catch (Exception ex) {
log.error("===> Vertx start fail: ", ex);
}
});
}
/**
* read yaml config
*
* @param vertx vertx
* @return ConfigRetriever
*/
private static ConfigRetriever readYaml(Vertx vertx) {
ConfigStoreOptions store = new ConfigStoreOptions()
.setType("file")
.setFormat("yaml")
.setOptional(true)
.setConfig(new JsonObject().put("path", "application.yaml"));
return ConfigRetriever.create(vertx, new ConfigRetrieverOptions().addStore(store));
}
}
4.Redis Connection pool configuration
public class DbHelper {
private final JsonObject object;
private final Vertx vertx;
@Getter
private static RedisAPI redis;
/**
* initialization redis Connect
*/
public void afterPropertiesSet() {
ConfigProperties.RedisProperties properties = object.mapTo(ConfigProperties.RedisProperties.class);
if (properties.getUrls() == null || properties.getUrls().length == 0) {
throw new RuntimeException("Redis connect url is not null.");
}
RedisOptions options = new RedisOptions()
.setType(properties.getClientType())
.setPoolName(properties.getPoolName())
.setMaxPoolSize(properties.getMaxPoolSize())
.setMaxPoolWaiting(properties.getMaxPoolWaiting())
.setPoolCleanerInterval(properties.getPoolCleanerInterval());
// password
if (StringUtils.isNotBlank(properties.getPassword())) {
options.setPassword(properties.getPassword());
}
// connect address [redis://localhost:7000, redis://localhost:7001]
for (String url : properties.getUrls()) {
options.addConnectionString(url);
}
// sentinel
if (properties.getClientType().equals(RedisClientType.SENTINEL)) {
options.setRole(properties.getRole()).setMasterName(properties.getMasterName());
}
redis = RedisAPI.api(Redis.createClient(vertx, options));
}
}
5.redis Execution examples
public class UserService {
/**
* find list
*/
public void list(RoutingContext ctx) {
ctx.json(R.data("list"));
}
/**
* find one
*/
public void detail(RoutingContext ctx) {
String userId = ctx.pathParam("userId");
RedisAPI redis = DbHelper.getRedis();
redis.get("hello")
.onSuccess(val -> ctx.json(R.data("===> detail result: " + val)))
.onFailure(event -> ctx.json(R.fail(event.getMessage())));
}
/**
* add user info
*/
public void add(RoutingContext ctx) {
RedisAPI redis = DbHelper.getRedis();
redis.getset("hello", "Hello world!")
.onSuccess(val -> ctx.json(R.data("===> add result: " + val)))
.onFailure(event -> ctx.json(R.fail(event.getMessage())));
}
/**
* update user
*/
public void update(RoutingContext ctx) {
UserInfo user = ctx.getBodyAsJson().mapTo(UserInfo.class);
if (user == null) {
ctx.json(R.fail(" The parameter is empty. "));
return;
}
ctx.json(R.data(user));
}
/**
* delete one
*/
public void delete(RoutingContext ctx) {
String userId = ctx.pathParam("userId");
RedisAPI redis = DbHelper.getRedis();
redis.del(Arrays.asList("hello", userId))
.onSuccess(val -> ctx.json(R.data("===> delete result:" + val)))
.onFailure(event -> ctx.json(R.fail(event.getMessage())));
}
}
6. Full address of the project
边栏推荐
- Qtip2 solves the problem of too many texts
- 专题 | 同步 异步
- Basic knowledge about SQL database
- IO stream system and FileReader, filewriter
- C代码生产YUV420 planar格式文件
- 树莓派更新工具链
- Leetcode 198: 打家劫舍
- Le Seigneur des anneaux: l'anneau du pouvoir
- Common architectures of IO streams
- Specified interval inversion in the linked list
猜你喜欢

“百度杯”CTF比赛 2017 二月场,Web:爆破-1

Leetcode 198: 打家劫舍

IO stream system and FileReader, filewriter

论文学习——鄱阳湖星子站水位时间序列相似度研究

Interview questions about producers and consumers (important)

Basic components and intermediate components

你开发数据API最快多长时间?我1分钟就足够了
![[HCAI] learning summary OSI model](/img/90/66505b22e32aa00b26886a9d5c5e4c.jpg)
[HCAI] learning summary OSI model

New stills of Lord of the rings: the ring of strength: the caster of the ring of strength appears

IP home online query platform
随机推荐
【已解决】win10找不到本地组策略编辑器解决方法
Introduction of buffer flow
Various postures of CS without online line
Distributed transactions
HISAT2 - StringTie - DESeq2 pipeline 进行bulk RNA-seq
Flask Foundation
Chrome 98 Private Network Access problem w/ disabled web security: Request had no target IP address
Advanced API (use of file class)
【无标题】
【已解决】Unknown error 1146
Use of generics
Le Seigneur des anneaux: l'anneau du pouvoir
树莓派更新工具链
IP home online query platform
Spa single page application
The embodiment of generics in inheritance and wildcards
Margin left: -100% understanding in the Grail layout
691. 立方体IV
论文学习——鄱阳湖星子站水位时间序列相似度研究
Discussion on some problems of array