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

server/2024/12/25 22:34:16/

在 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 的基本操作,如设置、获取、删除、判断键是否存在等常见功能。

java">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. 基本操作
  • 设置键值对

    java">public static void set(String key, String value)
    

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

  • 获取键值对

    java">public static String get(String key)
    

    获取 Redis 中指定键的值。

  • 删除键

    java">public static void del(String key)
    

    删除指定键。

  • 判断键是否存在

    java">public static boolean exists(String key)
    

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

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

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

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

  • 获取键的过期时间

    java">public static long ttl(String key)
    

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

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

    java">public static void lpush(String listKey, String value)
    

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

  • 从列表右侧弹出元素

    java">public static String rpop(String listKey)
    

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

4. 改进与扩展

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

5. 如何使用该工具类

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

http://www.ppmy.cn/server/153156.html

相关文章

thinkphp6使用MongoDB多个数据,聚合查询的坑

我使用的是thinkphp6,mongodb4.0实际业务查询 $list Db::connect(tstd_mongo)->table("$table_time.Item")->where($where)->order("Cause","asc")->field(_id,DBID,Data,GSID,MainKind,ManID,DISTINCT(Serial) Serial,SubKind,Tim…

115.【C语言】数据结构之排序(希尔排序)

目录 1.希尔排序(又称缩小增量排序)(插入排序的优化版本) 过程1:预排序 过程2:插入排序 2.代码 预排序代码 1.一次排一组(时间复杂度比第二种写法高) 运行结果 其他写法 2.一次排多组(多组并排) 运行结果 希尔排序代码 1.当预排序一次排一组时 运行结果 2.当预排…

mysql 获取某个表大小

有一个业务逻辑是判断日志表大小&#xff0c;如果达到1g,则需要报警提示 SELECT table_name as tableName, data_length AS size FROM information_schema.TABLES WHERE table_schema test AND table_name s_log; 其中test是库名&#xff0c;s_log是要查询的表名 经过测试…

用二进制方式向文件读写一组数据

【例10.4】从键盘输入10个学生的有关数据&#xff0c;然后把它们转存到磁盘文件上去。 #include<stdio.h> struct Student{char name[20];int number;int age; }; int main(){int i;struct Student stu;FILE *fp;fp fopen("1.txt","wb");if(fp N…

Flutter组件————FloatingActionButton

FloatingActionButton 是Flutter中的一个组件&#xff0c;通常用于显示一个圆形的按钮&#xff0c;它悬浮在内容之上&#xff0c;旨在吸引用户的注意力&#xff0c;并代表屏幕上的主要动作。这种按钮是Material Design的一部分&#xff0c;通常放置在页面的右下角&#xff0c;但…

JavaScript查缺补漏

文章目录 一、JavaScript是什么&#xff1f;1. JavaScript2.数组的使用3.函数默认参数4.对象中查找属性的另外写法 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、JavaScript是什么&#xff1f; 1. JavaScript 是一种运行在客户端&#xff08;浏…

便捷的线上游戏陪玩、线下家政预约以及语音陪聊服务怎么做?系统代码解析

系统架构选择的综合考虑 前端使用uniapp可跨平台开发&#xff0c;基于Vue.js的跨平台开发框架&#xff0c;允许开发者使用同一套代码基础构建面向iOS、Android、以及各种小程序&#xff08;如微信小程序&#xff09;、H5等多个平台的应用。 后端使用易于学习且免费开源的thin…

停车管理系统:构建安全、便捷的停车环境

Tomcat 简介 只要学习Java Web项目就不得不学习Tomcat。Tomcat是一种免费的开源的一种Java Web项目的容器&#xff0c;完美继承了 Apache服务器的特性&#xff0c;并且里面添加可以自动化运行的Java Web组件&#xff0c;让Java Web项目可以完全的运行到Tomcat里面。对于特大型项…