当前位置:网站首页>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
边栏推荐
- 691. Cube IV
- [set theory] order relation (partial order relation | partial order set | example of partial order set)
- c语言指针的概念
- Dora (discover offer request recognition) process of obtaining IP address
- Flask Foundation
- Pat grade a real problem 1166
- docker建立mysql:5.7版本指定路径挂载不上。
- Advanced API (multithreading 02)
- Jeecg request URL signature
- Use of other streams
猜你喜欢

《指环王:力量之戒》新剧照 力量之戒铸造者亮相

深度学习参数初始化(一)Xavier初始化 含代码

Summary of Arduino serial functions related to print read

Common methods of file class

Circuit, packet and message exchange

Hash table, generic

Pat grade a real problem 1166

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

Le Seigneur des anneaux: l'anneau du pouvoir

Sorting, dichotomy
随机推荐
Download address collection of various versions of devaexpress
Circuit, packet and message exchange
LeetCode
高并发内存池
Advanced API (multithreading)
[set theory] partition (partition | partition example | partition and equivalence relationship)
[solved] win10 cannot find a solution to the local group policy editor
Various postures of CS without online line
Advanced API (local simulation download file)
Advanced API (use of file class)
VMWare网络模式-桥接,Host-Only,NAT网络
Custom generic structure
TCP cumulative acknowledgement and window value update
Visit Google homepage to display this page, which cannot be displayed
[set theory] order relation (partial order relation | partial order set | example of partial order set)
Store WordPress media content on 4everland to complete decentralized storage
docket
[set theory] Stirling subset number (Stirling subset number concept | ball model | Stirling subset number recurrence formula | binary relationship refinement relationship of division)
Some basic operations of reflection
Wireshark software usage