简单认识redis-5 jdbc 与 jedis 使用的区别

news2024/10/9 3:12:39
  1. 概念与功能定位

    • JDBC (Java Database Connectivity)
      • JDBC 是 Java 语言用于连接数据库(如 MySQL、Oracle 等关系型数据库)的标准 API。它提供了一套统一的接口,让 Java 程序能够与各种数据库进行交互,执行 SQL 语句(如查询、插入、更新、删除等操作)来操作关系型数据。
      • 例如,使用 JDBC 可以连接到 MySQL 数据库,执行SELECT * FROM users这样的查询语句,获取用户表中的数据,或者执行INSERT INTO users (name, age) VALUES ('John', 25)这样的插入语句来添加新用户数据。
    • Jedis
      • Jedis 是 Redis 数据库的 Java 客户端。Redis 是一个基于内存的键值对存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)。Jedis 允许 Java 程序方便地与 Redis 进行交互,执行 Redis 特有的操作指令。
      • 例如,可以使用 Jedis 在 Redis 中设置键值对jedis.set("key", "value"),或者从 Redis 中获取某个键的值jedis.get("key"),还可以操作其他 Redis 数据结构,如向列表中添加元素jedis.lpush("mylist", "element1", "element2")
  2. 连接建立方式

    • JDBC
      • 连接建立相对复杂,需要加载数据库驱动(不同的数据库有不同的驱动,如 MySQL 的驱动),然后通过DriverManager获取数据库连接。例如,连接 MySQL 数据库的基本代码如下:
       import java.sql.Connection;
       import java.sql.DriverManager;
       import java.sql.SQLException;

       public class JdbcExample {
           public static void main(String[] args) {
               String url = "jdbc:mysql://localhost:3306/mydb";
               String username = "root";
               String password = "password";
               try {
                   Connection connection = DriverManager.getConnection(url, username, password);
                   // 连接建立成功后可以进行后续操作
                   connection.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
  • Jedis
    • 连接建立较为简单,只需要指定 Redis 服务器的地址和端口(默认 6379)即可创建 Jedis 实例连接到 Redis。例如:
       import redis.clients.jedis.Jedis;

       public class JedisExample {
           public static void main(String[] args) {
               Jedis jedis = new Jedis("localhost", 6379);
               // 连接建立成功后可以进行后续操作
               jedis.close();
           }
       }
  1. 数据操作方式

    • JDBC
      • 操作数据主要通过 SQL 语句。需要创建StatementPreparedStatement对象来执行 SQL 操作。例如,查询用户表中年龄大于 20 岁的用户:
       import java.sql.Connection;
       import java.sql.DriverManager;
       import java.sql.PreparedStatement;
       import java.sql.ResultSet;
       import java.sql.SQLException;

       public class JdbcQueryExample {
           public static void main(String[] args) {
               String url = "jdbc:mysql://localhost:3306/mydb";
               String username = "root";
               String password = "password";
               try {
                   Connection connection = DriverManager.getConnection(url, username, password);
                   String sql = "SELECT * FROM users WHERE age >?";
                   PreparedStatement statement = connection.prepareStatement(sql);
                   statement.setInt(1, 20);
                   ResultSet resultSet = statement.executeQuery();
                   while (resultSet.next()) {
                       // 处理查询结果
                   }
                   statement.close();
                   connection.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
  • Jedis
    • 操作基于 Redis 特有的命令和数据结构。例如,对 Redis 中的哈希数据结构进行操作:
       import redis.clients.jedis.Jedis;

       public class JedisHashExample {
           public static void main(String[] args) {
               Jedis jedis = new Jedis("localhost", 6379);
               jedis.hset("user:1", "name", "John");
               jedis.hset("user:1", "age", "25");
               String name = jedis.hget("user:1", "name");
               System.out.println("Name: " + name);
               jedis.close();
           }
       }
  1. 事务处理

    • JDBC
      • 有完善的事务处理机制,支持 ACID(原子性、一致性、隔离性、持久性)特性。通过Connection对象的setAutoCommit(false)等方法来控制事务的开始、提交和回滚。例如:
       try {
           connection.setAutoCommit(false);
           // 执行多个SQL操作
           statement1.executeUpdate();
           statement2.executeUpdate();
           connection.commit();
       } catch (SQLException e) {
           try {
               connection.rollback();
           } catch (SQLException ex) {
                   ex.printStackTrace();
               }
           }
  • Jedis
    • Redis 通过MULTIEXEC等命令来实现事务操作。在 Jedis 中,可以使用jedis.multi()开始事务,然后将多个操作添加到事务队列中,最后使用jedis.exec()执行事务。不过,Redis 事务与传统关系型数据库事务有所不同,它主要是一种命令的批量执行机制,并且不提供像关系型数据库事务那样严格的隔离性保证。例如:
       jedis.multi();
       jedis.set("key1", "value1");
       jedis.set("key2", "value2");
       List<Object> results = jedis.exec();
  1. 适用场景

    • JDBC
      • 适用于操作关系型数据库,处理复杂的关系型数据查询、存储大量结构化数据、需要严格的事务处理以及数据完整性要求较高的场景,如企业级的业务系统(如 ERP、CRM 等)中的数据管理。
    • Jedis
      • 适用于需要快速读写数据、使用 Redis 特有的数据结构(如缓存、计数器、排行榜等场景)、处理实时性要求较高的数据(如在线游戏中的实时数据统计)以及对数据持久化要求相对不那么严格(虽然 Redis 有持久化机制但主要还是基于内存操作)的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】List类型的常用命令大全

这里的list列表相当于一个双端队列&#xff0c;也可以认为是双向链表&#xff0c;也可以认为是数组&#xff0c;后续的很多命令都使用到下标。 list的特点&#xff1a; list中的每个元素也都是String类型里面的元素可以重复列表中的元素是有序的&#xff0c;如果里面元素顺序进…

epoll究竟是同步的还是异步的?

简单说一句话&#xff0c;你需要分层看这个事&#xff1a; epoll 这个系统调用&#xff0c;是同步的&#xff0c;也就是必须等待操作系统返回值。 而底层用了 epoll 的封装后的框架&#xff0c;可以是异步的&#xff0c;只要你暴露给外部的接口&#xff0c;无需等待你的返回值…

DDD简介

概述 传统的数据驱动开发模式&#xff0c;View、Service、Dao这种三层分层模式&#xff0c;会很自然的写出过程式代码&#xff0c;这种开发方式中的对象只是数据载体&#xff0c;而没有行为&#xff0c;是一种贫血对象模型。以数据为中心&#xff0c;以数据库ER图为设计驱动&a…

什么是变阻器?

变阻器是一种电子元件&#xff0c;主要用于调整电路中的电阻值&#xff0c;从而实现对电流、电压等电学参数的控制。它在电路中起到非常重要的作用&#xff0c;广泛应用于各种电子设备和实验装置中。 变阻器的主要作用是改变电路中的电阻值。在电路中&#xff0c;电阻值的大小…

二部图简单理解

目录 二部图简单理解 一、定义 二、性质与定理 三、原理举例 四、应用 二部图简单理解 二部图(Bipartite Graph),又称二分图,是图论中的一种特殊模型。以下是对二部图的详细介绍及原理举例: 一、定义 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(…

目标检测or实例分割中AP、MAP的计算

参考链接&#xff1a; 目标检测中AP、MAP的计算_51CTO博客_目标检测map计算 举个例子&#xff1a;

【JVM】内存分析工具JConsole/Visual VM

1 缘起 日常补充JVM调优&#xff0c;调优实践前需要学习一些理论做支撑&#xff0c; JVM调优三步&#xff1a;理论>GC分析>JVM调优&#xff0c; 我们会有一些玩笑话说&#xff0c;做了这么久Java开发&#xff0c;做过JVM调优吗&#xff1f; 做过&#xff0c;面试时。当然…

【深度学习】yolov8n模型的剪枝操作记录

原始 剪枝微调后 可以看到模型大小了&#xff0c; 测试结果显示再cpu 上加速5%-10% from ultralytics import YOLOimport time # Load a pretrained YOLO11n model count_num 500 def test1():model YOLO("/home/justin/Desktop/code/v8_prun/runs/detect/train3/weig…

LC刷题专题:记忆化搜索

文章目录 576. 出界的路径数 本刷题专栏记录自己的记忆化搜索的做题。 576. 出界的路径数 题目链接及描述&#xff1a; https://leetcode.cn/problems/out-of-boundary-paths/description/ 第一次看到这个题目可能先入为主了&#xff0c;首先想到的是使用动态规划做&#xff…

19.安卓逆向-frida基础-hook分析调试技巧1-hookMD5

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

C#多线程基本使用和探讨

线程是并发编程的基础概念之一。在现代应用程序中&#xff0c;我们通常需要执行多个任务并行处理&#xff0c;以提高性能。C# 提供了多种并发编程工具&#xff0c;如Thread、Task、异步编程和Parallel等。 Thread 类 Thread 类是最基本的线程实现方法。使用Thread类&#xff0…

【题解】【模拟】—— [NOIP2013 普及组] 表达式求值

【题解】【模拟】—— [NOIP2013 普及组] 表达式求值 [NOIP2013 普及组] 表达式求值题目背景题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2输入 #3输出 #3 提示 1.简单做法1.1.题意解析1.2.AC代码 2.使用栈的做法2.1.题意解析2.2.AC代码 [NOIP2013 普及组…

C高级--shell脚本实现分支判断

题目&#xff1a; 分支结构结合test指令完成一下编程 1>判断闰年 2>输入一个数判断是否为偶数 3>使用test指令实现等级判断 90--100A 60--89B 0-50C 其他错误 代码如下&#xff1a; #!/bin/bash read -p "请输入一个年份&#xff1a;" year if [ $((y…

Cisco Meraki平台登陆

登陆以下网址 https://n4.meraki.cn/ 输入之前注册的邮箱&#xff0c;点击Next 输入之前注册时输入的密码&#xff0c;注意不是企业邮箱的密码&#xff01; 查看邮箱&#xff0c;将验证码输入&#xff0c;点击Verify&#xff08;验证&#xff09;&#xff0c;此验证码10分…

C语言-文件IO

文件IO I :input 输入&#xff0c;从文件中读取数据到内存 O:output 输出&#xff0c;把数据写入到文件 Linux系统IO 和 c语言标准IO 1、linux系统IO 1.1 简介 linux操作系统把对文件的操作封装成了多个函数&#xff0c;统称为linux系统IO。 文件描述符(File descirptor)…

笔试算法day01

目录 1.除2 2.Fibonacci数列&#xff08;Fib 数列&#xff09; 3.单词搜索 1.除2 除2&#xff01; (nowcoder.com) 算法思路&#xff1a; 只需要对最大的n个偶数进行/2即可。 将所有的偶数存进大根堆中&#xff0c;执行k次操作即可 #include <iostream> #include <…

2024年AI知识库哪家强?8款主流软件对比分析

在当今这个信息爆炸的时代&#xff0c;如何高效地管理、搜索和共享知识成为了一个重要的问题。AI知识库作为一种先进的解决方案&#xff0c;正受到越来越多企业和个人的青睐。本文将对比分析8款主流的AI知识库软件&#xff0c;帮助大家找到最适合自己的工具。 1. HelpLook AI知…

机器学习K近邻算法——回归问题K近邻算法示例

针对“数据4.1”&#xff0c;讲解回归问题的K近邻算法&#xff0c;以V1&#xff08;营业利润水平&#xff09;为响应变量&#xff0c;以V2&#xff08;固定资产投资&#xff09;、V3&#xff08;平均职工人数&#xff09;、V4&#xff08;研究开发支出&#xff09;为特征变量。…

Flutter 进阶:根据IP地址判断用户国家/地区

在应用开发中根据IP地址判断用户国家/地区的两种方法 引言 在开发国际化应用时&#xff0c;了解用户的地理位置至关重要。这不仅影响用户体验&#xff0c;还关系到内容展示和合规性。本文将介绍两种通过IP地址判断用户所在国家或地区的方法。 方法一&#xff1a;使用 ip-api…

redis高级(面试题二)

目录 一、redis的五大数据结构有哪些&#xff1f;zset底层是什么结构&#xff1f; 1、redis五大数据结构有哪些&#xff1f; 2、什么是skiplist&#xff1f; 3、zset底层是什么结构&#xff1f; 二、Redis的内存过期策略是什么&#xff1f;Redis的内存淘汰策略有哪些&#…