常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法


🌟 如何优雅地写出高质量的Java代码

Java作为一门高级编程语言,被广泛应用于各种应用程序开发中。写出高质量的Java代码是每一个Java开发人员的追求。本文将介绍如何优雅地写出高质量的Java代码,包括设计模式、操作Redis、MySQL数据库、各种MQ、数据类型转换等方面。

🍊 设计模式

设计模式是Java开发中的重要概念,它是一种解决常见问题的经典思想。设计模式的好处在于,它可以提升代码的可读性、可维护性和可扩展性。以下是Java开发中常用的设计模式:

🎉 单例模式

单例模式是一种只允许创建一个实例的设计模式。在Java中,可以通过以下方式来实现单例模式:

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

🎉 工厂模式

工厂模式是一种将对象的创建和使用分离的设计模式。在Java中,可以通过以下方式来实现工厂模式:

public interface Shape {
    void draw();
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        }
        return null;
    }
}

🎉 观察者模式

观察者模式是一种用于对象间的一对多依赖关系的设计模式。在Java中,可以通过以下方式来实现观察者模式:

public interface Observer {
    void update(String message);
}
public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers(String message);
}
public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }
    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }
    @Override
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
public class ConcreteObserver implements Observer {
    private String name;
    public ConcreteObserver(String name) {
        this.name = name;
    }
    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}

🍊 操作Redis

Redis是一种高性能的键值存储数据库,它可以用于缓存、队列等应用场景。以下是Java中操作Redis常用的方法:

🎉 连接Redis

Jedis jedis = new Jedis("localhost", 6379);

🎉 存储数据

jedis.set("key", "value");

🎉 获取数据

String value = jedis.get("key");

🎉 删除数据

jedis.del("key");

🎉 关闭连接

jedis.close();

🍊 操作MySQL数据库

MySQL是一种常用的关系型数据库,Java操作MySQL也非常常见。以下是Java中操作MySQL常用的方法:

🎉 连接MySQL

String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, user, password);

🎉 插入数据

String sql = "INSERT INTO table (column1, column2) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "value1");
pstmt.setString(2, "value2");
pstmt.executeUpdate();

🎉 查询数据

String sql = "SELECT * FROM table WHERE column1=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "value1");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
    String column2 = rs.getString("column2");
}

🎉 更新数据

String sql = "UPDATE table SET column1=? WHERE column2=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "value1");
pstmt.setString(2, "value2");
pstmt.executeUpdate();

🎉 删除数据

String sql = "DELETE FROM table WHERE column1=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "value1");
pstmt.executeUpdate();

🎉 关闭连接

conn.close();

🍊 各种MQ

MQ(Message Queue)是一种网络通信协议,用于实现异步消息通信。以下是Java中常用的MQ:

🎉 ActiveMQ

ActiveMQ是一种流行的开源消息通信中间件,它支持多种协议,包括AMQP、STOMP、MQTT等。以下是Java中使用ActiveMQ的方法:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("queue");
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("Hello, world!");
producer.send(message);
session.close();
connection.close();

🎉 RabbitMQ

RabbitMQ是一种功能齐全的开源消息通信中间件,它支持多种协议,包括AMQP。以下是Java中使用RabbitMQ的方法:

ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("queue", false, false, false, null);
String message = "Hello, world!";
channel.basicPublish("", "queue", null, message.getBytes());
channel.close();
connection.close();

🎉 Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它的设计目标就是处理大规模的消息数据。以下是Java中使用Kafka的方法:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
String topic = "topic";
String message = "Hello, world!";
producer.send(new ProducerRecord<>(topic, message));
producer.close();

🍊 数据类型转换

数据类型转换是Java开发中的常见操作,它可以将不同的数据类型之间进行转换。以下是Java中常用的数据类型转换方法:

🎉 String转int

String str = "123";
int i = Integer.parseInt(str);

🎉 int转String

int i = 123;
String str = Integer.toString(i);

🎉 String转double

String str = "3.14";
double d = Double.parseDouble(str);

🎉 double转String

double d = 3.14;
String str = Double.toString(d);

🎉 Date转String

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);

🎉 String转Date

String str = "2021-01-01 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
相关文章
|
4月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
495 7
|
5月前
|
存储 NoSQL Redis
阿里云高性能数据库Tair(兼容 Redis)收费价格,稳定可靠成本低
阿里云高性能云数据库Tair兼容Redis,提供Redis开源版和Tair企业版,支持多种存储介质与灵活扩展,适用于高并发场景。Tair具备亚毫秒级稳定延迟,保障业务连续性。价格方面,Redis开源版年费从72元起,Tair企业版年费从1224元起,具体费用根据配置不同有所变化。
|
7月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
9月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
602 5
|
10月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
398 5
|
7月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
188 5
|
7月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
640 2
|
11月前
|
NoSQL Java Redis
Redis Pipeline介绍 ---- 提高操作Redis数据库的执行效率。
Redis Pipeline是提高Redis执行效率的重要技术,通过批量发送命令,显著减少了网络往返次数,提高了系统的吞吐量和性能。在实际应用中,合理使用Pipeline可以有效优化Redis的性能,特别是在需要批量操作的场景下。本文通过Python和Java的示例代码展示了如何实现和使用Redis Pipeline,为开发者提供了具体的操作指南。
502 16
|
11月前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,

推荐镜像

更多