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.rhkb.cn/news/494857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全产品大调研系列】1. 漏洞扫描

1. 为什么会出现漏扫技术&#xff1f; 每次黑客攻击事件进行追溯的时候&#xff0c;根据日志分析后&#xff0c;我们往往发现基本都是系统、Web、 弱口令、配置这四个方面中的其中一个出现的安全问题导致黑客可以轻松入侵的。 操作系统的版本滞后&#xff0c;没有更新补丁&am…

Java爬虫:速卖通(AliExpress)商品评论获取指南

引言 在当今的电商时代&#xff0c;商品评论对于消费者决策有着举足轻重的影响。速卖通&#xff08;AliExpress&#xff09;&#xff0c;作为全球知名的在线零售平台之一&#xff0c;拥有海量的商品评论数据。对于商家而言&#xff0c;能够高效地获取这些评论数据&#xff0c;…

AIDD - 探索语言模型在药物分子生成方面的应用

AIDD - 探索语言模型在药物分子生成方面的应用 今天给大家讲一篇2024年10月在nature communications上发表的一篇关于分子生成的文章。现有的分子生成方法中往往只关注药物的特定属性&#xff0c;导致其适用性受限。因此作者提出了TamGen方法&#xff0c;用于针对特定靶点的分子…

【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit

1、AVCodec 硬解咨询&#xff1f; 在做视频播放硬解适配&#xff0c;这是 demo&#xff1a;https://gitee.com/openharmony-sig/ohos_videocompressor/blob/master/videoCompressor/src/main/cpp/video/decoder/VideoDec.cpp 请问&#xff1a; int32_t VideoDec::SetOutputS…

怎么设置电脑密码?Windows和Mac设置密码的方法

为电脑设置密码是保护个人信息安全的重要措施。无论是Windows系统还是MacOS系统&#xff0c;设置密码的步骤都相对简单&#xff0c;但需要根据不同的操作系统选择不同的方法。 一、Windows系统电脑密码设置 方法一&#xff1a;通过控制面板设置账户密码 点击桌面左下角的“开…

谷歌浏览器的网络安全检测工具介绍

作为全球最受欢迎的浏览器之一&#xff0c;谷歌浏览器不仅提供了快速、便捷的浏览体验&#xff0c;还内置了一系列强大的网络安全检测工具&#xff0c;帮助用户识别潜在的网络威胁&#xff0c;保护个人隐私和数据安全。本文将详细介绍谷歌浏览器中的几项关键网络安全检测功能&a…

一个比RTK或redux更轻量级更易使用的 React 第三方状态管理工具库的配置与使用

本文由作者 Samdy_Chan 原创,未经作者同意,请勿随意转载! 使用轻量级第三方的 React 状态管理库 zustand 管理共享状态数据 在 react 框架应用中,开发者应该大多数都是采用 redux 状态管理工具库来管理应用的共享状态数据,但用过 redux 的人都知道,其配置和使用相当复杂…

菜鸟带新鸟——基于EPlan2022的部件库制作

首先&#xff0c;我们需要了解一些概念&#xff1a; Eplan的部件制作内容 以上内容是制作一个完整的部件所需要的。如果公司要求没有那么严格&#xff0c;我们就可以制作1-4级的内容就可以满足日常的使用啦&#xff01; 部件的创建方式 部件创建方式有4类&#xff1a; 1、单…

Charles安装证书过程(手机)

背景&#xff1a;使用模拟器抓包时&#xff0c;发现https请求无法抓取&#xff0c;需要安装相应证书。我自己是因为模拟器升级了安卓7&#xff0c;发现之前安装的证书无效了&#xff0c;需要重新安装。 参考博客&#xff1a;夜神模拟器12Charles进行Https抓包_模拟器抓包ssl-C…

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器&#xff0c;方便程序代码及文档版本管理。 官网&#xff1a;http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…

数据库操作【JDBC HIbernate Mybatis】

JDBC JDBC编程 在java开发中&#xff0c;以前都是通过JDBC&#xff08;Java Data Base Connectivity&#xff09;与数据库打交道的&#xff0c;至少在ORM&#xff08;Object Relational Mapping&#xff09;框架没出现之前是这样&#xff0c;目前常用的ORM框架有JPA、hibernat…

Linux 常见用例汇总

注&#xff1a;本文为 Linux 常见用例文章合辑。 部分内容已过时&#xff0c;未更新整理。 检查 Linux 上的 glibc 版本 译者&#xff1a;joeren | 2014-11-27 21:33 问&#xff1a;检查 Linux 系统上的 GNU C 库&#xff08;glibc&#xff09;的版本&#xff1f; GNU C 库&…

web-密码安全口令

目录 一、密码安全概述 二、密码安全现状 三、破解方式 四、暴力破解 五、字典破解 六、密码字典 学习心得&#xff1a; 一、密码安全概述 现在很多地方都是以用户名&#xff08;账号&#xff09;和口令&#xff08;密码&#xff09;作为鉴权的方式&#xff0c;口令&am…

工控触摸屏用winForms来构建框架,效果还是很不错的

工控触摸屏采用 winForms 构建框架具有诸多优势。winForms 提供了丰富的控件和强大的开发工具&#xff0c;使得界面设计更加高效。它具有良好的稳定性和兼容性&#xff0c;能够适应工控环境的复杂要求。通过 winForms 可以实现直观的操作界面&#xff0c;方便操作人员进行监控和…

开发一个DApp项目:DeFi、DApp开发与公链DApp开发

随着区块链技术的快速发展&#xff0c;去中心化应用&#xff08;DApp&#xff09;逐渐成为创新技术的核心之一。DApp能够利用区块链去中心化的特点&#xff0c;提供更高的安全性、透明性和效率&#xff0c;吸引了越来越多的开发者和投资者关注。本文将围绕如何开发一个DApp项目…

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站&#xff0c;尤其是微信小程序中的长视频无法获取到准确视频地址&#xff0c;只能抓取到.ts片段地址&#xff0c;下载后发现基本都是5~8秒时长。 例如&#xff1a; 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …

性能优化!突破性能瓶颈的尖兵CPU Cache

缓存这个专业术语&#xff0c;在计算机世界中是经常使用到的。它并不是CPU所独有的&#xff0c;比如cdn缓存网站信息&#xff0c;浏览器缓存网页的图像视频等&#xff0c;但本文讲述的是狭义Cache&#xff0c;主要指的是CPU Cache&#xff0c;本文将其简称为"缓存"或…

Redis+注解实现限流机制(IP、自定义等)

简介 在项目的使用过程中&#xff0c;限流的场景是很多的&#xff0c;尤其是要提供接口给外部使用的时候&#xff0c;但是自己去封装的话&#xff0c;相对比较耗时。 本方式可以使用默认&#xff08;方法&#xff09;&#xff0c;ip、自定义参数进行限流&#xff0c;根据时间…

010 Qt_输入类控件(LineEdit、TextEdit、ComboBox、SpinBox、DateTimeEdit、Dial、Slider)

文章目录 前言一、QLineEdit1.简介2.常见属性及说明3.重要信号及说明4.示例一&#xff1a;用户登录界面5.示例二&#xff1a;验证两次输入的密码是否一致显示密码 二、TextEdit1.简介2.常见属性及说明3.重要信号及说明4.示例一&#xff1a;获取多行输入框的内容5.示例二&#x…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…