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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 常用的设计模式以及操作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);
相关文章
|
7天前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
22 4
|
3天前
|
缓存 NoSQL 数据库
在高并发场景下,如何保证Redis缓存和数据库的一致性
在高并发场景下,如何保证Redis缓存和数据库的一致性
|
10天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
10天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
10天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
19天前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
24 0
「Python入门」python操作MySQL和SqlServer
|
22天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
22天前
|
弹性计算 NoSQL 网络安全
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
|
8天前
|
分布式计算 DataWorks 关系型数据库
MaxCompute操作报错合集之配置mysql数据源querysql模式,同步到MC时遇到报错,该怎么处理
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
10天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。