当前位置: 首页 > article >正文

Java 集成 Redis 实战

Redis 是一款高性能的 NoSQL 存储引擎,常被用于缓存、存储社交网络数据或构建排行榜。在 Java 项目中集成 Redis 可以充分利用其性能优势,本篇将介绍如何进行集成。

一、环境准备

  • 安装 Redis:点击 Redis 官网 站点,下载符合本地系统版本的 Redis。

  • 启动 Redis:Windows 下解压后运行 redis-server.exe redis.windows.conf,如果需要持久化,可设置 appendonly yes

  • 安装 JDK:访问 Java 官网,下载并安装适合系统的 JDK,推荐版本为 8 或以上。

  • 安装 IDEA:在 JetBrains 官网 中下载 Java 的 IDE,如 IntelliJ IDEA,并完成安装。

  • 配置 Maven:Redis 的客户端库使用 Maven 管理,无需手动下载。

二、引入依赖

2.1 Jedis 依赖

Jedis 是一个简单易用的 Redis 客户端库。以下是 Maven 依赖配置:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.0.1</version>
</dependency>

2.2 Lettuce 依赖

Lettuce 适用于反应式驱动的系统。以下是 Maven 依赖配置:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.2.2.RELEASE</version>
</dependency>

三、Redis 常用操作

Redis 是一个高性能的 NoSQL 数据库,提供了丰富的数据结构和操作,包括字符串、列表、集合、有序集合、哈希和发布/订阅等。以下是 Redis 的一些常用操作:

  • SET key value:设置指定键的值。

  • GET key:获取指定键的值。

  • EXPIRE key seconds:设置指定键的过期时间。

  • DEL key:删除指定键。

  • HSET hash key value:将哈希表 hash 中的字段 key 的值设置为 value

  • HGET hash key:获取哈希表 hash 中字段 key 的值。

  • RPUSH list value:将一个值插入到列表的末尾。

  • LRANGE list start end:获取列表中指定范围的值。

四、操作示例

4.1 Jedis 示例

以下是使用 Jedis 进行 Redis 操作的示例代码:

4.1.1 创建 Jedis 连接
import redis.clients.jedis.Jedis;

public class JedisExample {
    public static void main(String[] args) {
        // 创建 Jedis 连接
        Jedis jedis = new Jedis("localhost", 6379);
        System.out.println("连接成功");

        // 设置和获取字符串值
        jedis.set("name", "Alice");
        System.out.println("name: " + jedis.get("name"));

        // 关闭连接
        jedis.close();
    }
}
4.1.2 增删改查操作
import redis.clients.jedis.Jedis;

public class JedisCRUD {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);

        // 增
        jedis.set("age", "25");
        System.out.println("添加 age: 25");

        // 查
        System.out.println("age: " + jedis.get("age"));

        // 改
        jedis.set("age", "30");
        System.out.println("修改后的 age: " + jedis.get("age"));

        // 删
        jedis.del("age");
        System.out.println("删除后的 age: " + jedis.get("age"));

        jedis.close();
    }
}
4.1.3 Redis 集合操作
import redis.clients.jedis.Jedis;

public class JedisSetExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);

        // 添加元素到集合
        jedis.sadd("users", "Alice", "Bob", "Charlie");
        System.out.println("集合 users 中的元素: " + jedis.smembers("users"));

        // 检查元素是否存在
        System.out.println("Bob 是否在集合中: " + jedis.sismember("users", "Bob"));

        // 删除元素
        jedis.srem("users", "Bob");
        System.out.println("删除 Bob 后的集合: " + jedis.smembers("users"));

        jedis.close();
    }
}

4.2 Lettuce 示例

以下是使用 Lettuce 进行 Redis 操作的示例代码:

4.2.1 创建 Lettuce 连接
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

public class LettuceExample {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost:6379");
        StatefulRedisConnection<String, String> connection = client.connect();
        RedisCommands<String, String> commands = connection.sync();

        // 设置和获取字符串值
        commands.set("name", "Alice");
        System.out.println("name: " + commands.get("name"));

        // 关闭连接
        connection.close();
        client.shutdown();
    }
}
4.2.2 增删改查操作
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

public class LettuceCRUD {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost:6379");
        StatefulRedisConnection<String, String> connection = client.connect();
        RedisCommands<String, String> commands = connection.sync();

        // 增
        commands.set("age", "25");
        System.out.println("添加 age: 25");

        // 查
        System.out.println("age: " + commands.get("age"));

        // 改
        commands.set("age", "30");
        System.out.println("修改后的 age: " + commands.get("age"));

        // 删
        commands.del("age");
        System.out.println("删除后的 age: " + commands.get("age"));

        connection.close();
        client.shutdown();
    }
}
4.2.3 Redis 集合操作
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

public class LettuceSetExample {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost:6379");
        StatefulRedisConnection<String, String> connection = client.connect();
        RedisCommands<String, String> commands = connection.sync();

        // 添加元素到集合
        commands.sadd("users", "Alice", "Bob", "Charlie");
        System.out.println("集合 users 中的元素: " + commands.smembers("users"));

        // 检查元素是否存在
        System.out.println("Bob 是否在集合中: " + commands.sismember("users", "Bob"));

        // 删除元素
        commands.srem("users", "Bob");
        System.out.println("删除 Bob 后的集合: " + commands.smembers("users"));

        connection.close();
        client.shutdown();
    }
}

五、注意事项

5.1 Redis 链接的连接池

为了提高 Redis 的性能和可扩展性,可以使用连接池来管理 Redis 连接。以下是一个使用 Jedis 连接池的示例:

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolExample {
    public static void main(String[] args) {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(100);
        poolConfig.setMaxIdle(50);
        poolConfig.setMinIdle(10);

        JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);

        // 获取连接
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.set("name", "Alice");
            System.out.println("name: " + jedis.get("name"));
        }

        jedisPool.close();
    }
}

5.2 Redis 数据持久化

Redis 提供了两种数据持久化方式:RDB 和 AOF。

  • RDB(Redis Database Backup):将 Redis 的数据以快照的形式保存到磁盘中。

  • AOF(Append Only File):将 Redis 的写操作记录到日志文件中。

可以通过配置文件(redis.conf)来启用数据持久化。

5.3 Redis 安全性

为了确保 Redis 的安全性,可以设置密码验证。在 Redis 配置文件中设置 requirepass 参数,然后通过客户端连接时提供密码。

import redis.clients.jedis.Jedis;

public class JedisAuthentication {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.auth("password"); // 设置 Redis 密码
        System.out.println("连接成功");
        jedis.set("name", "Alice");
        System.out.println("name: " + jedis.get("name"));
        jedis.close();
    }
}

六、总结

通过本篇介绍,我们学会了如何在 Java 项目中集成 Redis,并使用 Jedis 和 Lettuce 进行 Redis 操作。Redis 的高性能和丰富的数据结构使其成为 Java 项目中的强大工具,可以用于缓存、存储社交网络数据或构建排行榜等场景。


http://www.kler.cn/a/552078.html

相关文章:

  • PHP 网络编程介绍
  • 【Github每日推荐】-- 2024 年项目汇总
  • 【Leetcode】环形链表
  • 使用LightGBM与Apache Spark进行多分类任务
  • 使用html css js 来实现一个服装行业的企业站源码-静态网站模板
  • 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一)
  • 学习总结2.18
  • SpringAI系列 - RAG篇(三) - ETL
  • Qt的QPushButton样式设置
  • 简单认识一下-Redis
  • 计算机网络协议(二)
  • 【和春笋一起学C++】if else语句
  • 未来游戏:当人工智能重构虚拟世界的底层逻辑
  • 新数据结构(10)——Java抽象类和接口
  • EasyPoi系列之框架集成及基础使用
  • PHP语法完全入门指南:从零开始掌握动态网页
  • AWS Lambda自动化部署流程指南
  • C++:构造函数和析构函数
  • 软件评测师复习之计算机网络(4)
  • 数据结构----哈希表的插入与输出