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

java Redis 操作工具类封装(备忘)

在 Java 中,封装 Redis 的常见操作是提升开发效率和代码可维护性的好方法。使用 Redis 可以帮助你的应用在缓存、消息队列、会话存储等方面显著提高性能。以下是一个基于 Jedis 客户端的 Redis 操作工具类封装示例。

1. 添加 Redis 依赖

首先,确保在 Maven 项目中加入 Jedis 依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version> <!-- 请根据实际需求修改版本号 -->
</dependency>

2. Redis 操作工具类封装

以下是一个基于 Jedis 客户端的 Redis 操作工具类。它封装了 Redis 的基本操作,如设置、获取、删除、判断键是否存在等常见功能。

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

public class RedisUtil {

    private static JedisPool jedisPool;

    // 静态初始化:创建 Jedis 连接池
    static {
        // 配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(128); // 最大连接数
        poolConfig.setMaxIdle(64);   // 最大空闲连接数
        poolConfig.setMinIdle(16);   // 最小空闲连接数
        poolConfig.setTestOnBorrow(true); // 在获取连接时检查有效性

        // 创建连接池,连接到 Redis 服务
        jedisPool = new JedisPool(poolConfig, "localhost", 6379);  // 根据需要修改主机和端口
    }

    // 获取 Jedis 实例
    private static Jedis getJedis() {
        return jedisPool.getResource();
    }

    // 释放 Jedis 实例
    private static void returnResource(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }

    // 设置键值对
    public static void set(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.set(key, value);
        } catch (Exception e) {
            System.err.println("Error setting value: " + e.getMessage());
        } finally {
            returnResource(jedis);
        }
    }

    // 获取键值对
    public static String get(String key) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            return jedis.get(key);
        } catch (Exception e) {
            System.err.println("Error getting value: " + e.getMessage());
            return null;
        } finally {
            returnResource(jedis);
        }
    }

    // 删除键
    public static void del(String key) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.del(key);
        } catch (Exception e) {
            System.err.println("Error deleting key: " + e.getMessage());
        } finally {
            returnResource(jedis);
        }
    }

    // 判断键是否存在
    public static boolean exists(String key) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            return jedis.exists(key);
        } catch (Exception e) {
            System.err.println("Error checking key existence: " + e.getMessage());
            return false;
        } finally {
            returnResource(jedis);
        }
    }

    // 设置带过期时间的键值对
    public static void setEx(String key, String value, int seconds) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.setex(key, seconds, value);
        } catch (Exception e) {
            System.err.println("Error setting value with expiration: " + e.getMessage());
        } finally {
            returnResource(jedis);
        }
    }

    // 获取键的过期时间
    public static long ttl(String key) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            return jedis.ttl(key);
        } catch (Exception e) {
            System.err.println("Error getting TTL: " + e.getMessage());
            return -1;
        } finally {
            returnResource(jedis);
        }
    }

    // 设置列表
    public static void lpush(String listKey, String value) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.lpush(listKey, value);
        } catch (Exception e) {
            System.err.println("Error pushing value to list: " + e.getMessage());
        } finally {
            returnResource(jedis);
        }
    }

    // 获取列表
    public static String rpop(String listKey) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            return jedis.rpop(listKey);
        } catch (Exception e) {
            System.err.println("Error popping value from list: " + e.getMessage());
            return null;
        } finally {
            returnResource(jedis);
        }
    }

    public static void main(String[] args) {
        // 设置键值对
        set("name", "John Doe");

        // 获取键值对
        String name = get("name");
        System.out.println("Name: " + name);

        // 设置带过期时间的键值对
        setEx("tempKey", "temporary data", 10);

        // 获取键的过期时间
        long ttl = ttl("tempKey");
        System.out.println("TTL of tempKey: " + ttl + " seconds");

        // 列表操作
        lpush("myList", "item1");
        lpush("myList", "item2");

        // 弹出列表项
        String item = rpop("myList");
        System.out.println("Popped from list: " + item);

        // 删除键
        del("name");

        // 检查键是否存在
        boolean exists = exists("name");
        System.out.println("Does 'name' exist? " + exists);
    }
}

3. 功能说明

1. 连接池初始化
  • 使用 JedisPool 创建一个 Redis 连接池,优化 Redis 的连接管理,避免每次请求都新建连接,提高性能。
2. 获取和释放 Jedis 实例
  • getJedis() 获取 Redis 连接。
  • returnResource(Jedis jedis) 用于释放 Jedis 连接,避免连接泄漏。
3. 基本操作
  • 设置键值对

    public static void set(String key, String value)
    

    这个方法将键值对存储到 Redis 中。

  • 获取键值对

    public static String get(String key)
    

    获取 Redis 中指定键的值。

  • 删除键

    public static void del(String key)
    

    删除指定键。

  • 判断键是否存在

    public static boolean exists(String key)
    

    判断 Redis 中是否存在某个键。

  • 设置带过期时间的键值对

    public static void setEx(String key, String value, int seconds)
    

    存储一个带过期时间的键值对。

  • 获取键的过期时间

    public static long ttl(String key)
    

    获取某个键的剩余过期时间(单位秒)。

4. 列表操作
  • 添加元素到列表左侧

    public static void lpush(String listKey, String value)
    

    向 Redis 列表的左侧推送元素。

  • 从列表右侧弹出元素

    public static String rpop(String listKey)
    

    从 Redis 列表的右侧弹出一个元素。

4. 改进与扩展

  • 错误处理:可以进一步增强错误处理和异常捕获,例如,捕获连接失败、操作失败等异常,提供详细的错误信息。
  • Redis 集群支持:如果你使用的是 Redis 集群,可以使用 JedisCluster 代替 Jedis,并对工具类进行适当的修改。

5. 如何使用该工具类

  • 你只需要通过调用这些方法(如 set(), get(), del() 等),就能快速完成 Redis 操作,而不需要手动管理连接、异常处理等繁琐工作。

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

相关文章:

  • 【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
  • 【Java基础-26.1】Java中的方法重载与方法重写:区别与使用场景
  • 云手机+YouTube:改变通信世界的划时代技术
  • langchain使用FewShotPromptTemplate出现KeyError的解决方案
  • Qt creator ,语言家功能缺失解决方法
  • 14:30面试,14:08就出来了,面试问的有点变态呀。。。
  • CentOS设置静态IP教程(2024年12月20日)
  • 软件测试 | 招聘严峻期从面试无力感,到一天2个offer的一些经验分享(内附美团、字节、快手等面试题)
  • Python进程与线程:分布式进程
  • uniapp .gitignore
  • C语言:指针4(常量指针和指针常量及动态内存分配)
  • 创建学员信息修改页面
  • leetcode 3285 找到稳定山的下标
  • uni-app使用组件button遇到的问题
  • centos制作离线安装包
  • 阅读C语言代码的方法
  • 搜索系统常见指标和评估方式
  • Berlandesk 注册系统算法实现与解析
  • SQL—leetcode—175. 组合两个表
  • 如何在 Ubuntu 上安装 PyTorch
  • LabVIEW实现WiFi通信
  • ES6学习Generator 函数(生成器)(八)
  • 匈牙利算法
  • Java基本查询(四)
  • minicpm 多模态RAG构建案例
  • 组态软件行业市场发展现状