写点什么

jedis 使用及注意事项

  • 2024-12-17
    福建
  • 本文字数:2050 字

    阅读完需:约 7 分钟

Jedis


Jedis 是一个 Java 客户端,用于与 Redis 数据库进行交互。它提供了一系列简单易用的 API,使得在 Java 应用程序中使用 Redis 变得非常方便。以下是 Jedis 的使用方法及一些注意事项。


Jedis 的优势


Lettuce 客户端及 Jedis 客户端比较如下:


  • Lettuce:Lettuce 客户端没有连接保活探测,错误连接存在连接池中会造成请求超时报错。Lettuce 客户端未实现 testOnBorrow 等连接池检测方法,无法在使用连接之前进行连接校验。

  • Jedis:Jedis 客户端实现了 testOnBorrow、testWhileIdle、testOnReturn 等连接池校验配置。开启 testOnBorrow 在每次借用连接前都会进行连接校验,可靠性最高,但是会影响性能(每次 Redis 请求前会进行探测)。testWhileIdle 可以在连接空闲时进行连接检测,合理配置阈值可以及时剔除连接池中的异常连接,防止使用异常连接造成业务报错。在空闲连接检测之前,连接出现问题,可能会造成使用该连接的业务报错,此处可以通过参数控制检测间隔(timeBetweenEvictionRunsMillis)。


因此,Jedis 客户端在面对连接异常,网络抖动等场景下的异常处理和检测能力明显强于 Lettuce,可靠性更强。


Jedis 使用


1. 引入依赖


如果你使用 Maven,可以在 pom.xml 中添加以下依赖:


<dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>5.2.0</version> <!-- 请检查最新版本 --></dependency>
复制代码


2. 创建 Jedis 实例


创建一个 Jedis 实例,连接到 Redis 服务器:


import redis.clients.jedis.Jedis;
public class JedisExample { public static void main(String[] args) { // 创建一个 Jedis 实例,连接到 localhost:6379 Jedis jedis = new Jedis("localhost", 6379); // 进行身份验证(如果需要) // jedis.auth("your_password");
// 测试连接 System.out.println("连接成功: " + jedis.ping()); // 关闭连接 jedis.close(); }}
复制代码


3. 常用操作


  • 字符串操作

// 设置值jedis.set("key", "value");// 获取值String value = jedis.get("key");System.out.println("获取的值: " + value);
复制代码


  • 哈希操作


// 设置哈希jedis.hset("user:1000", "name", "Alice");jedis.hset("user:1000", "age", "30");
// 获取哈希String name = jedis.hget("user:1000", "name");System.out.println("用户姓名: " + name);
复制代码


  • 列表操作


// 添加元素到列表jedis.lpush("mylist", "item1");jedis.lpush("mylist", "item2");
// 获取列表元素List<String> list = jedis.lrange("mylist", 0, -1);System.out.println("列表内容: " + list);
复制代码


  • 集合操作


// 添加元素到集合jedis.sadd("myset", "member1");jedis.sadd("myset", "member2");
// 获取集合成员Set<String> members = jedis.smembers("myset");System.out.println("集合成员: " + members);
复制代码


注意事项


1、连接管理


  • 每次操作前创建和关闭 Jedis 实例会导致性能问题,建议使用连接池。

  • 可以使用 JedisPool 来管理连接。

  • Jedis 可以使用 tr-with-resources 管理资源


import redis.clients.jedis.JedisPool;import redis.clients.jedis.Jedis;
public class JedisPoolExample { public static void main(String[] args) { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(100); // 最大连接数 config.setMaxIdle(50); // 最大空闲连接数 config.setMinIdle(10); // 最小空闲连接数 config.setTestOnBorrow(true); // 在获取连接时检查连接有效性 config.setTestWhileIdle(true); // 在空闲时检查连接有效性 config.setMinEvictableIdleTimeMillis(60000); // 空闲连接最小存活时间,60S config.setTimeBetweenEvictionRunsMillis(30000); // 清理线程运行时间间隔,30S JedisPool pool = new JedisPool(config, "localhost", 6379); try (Jedis jedis = pool.getResource()) { System.out.println("连接成功: " + jedis.ping()); } catch (Exception e) { e.printStackTrace(); } finally { pool.close(); } }}
复制代码


2、异常处理

  • 在使用 Jedis 时,应当处理可能的异常,例如连接失败、超时等。


3、线程安全

  • Jedis 实例不是线程安全的,因此不应在多个线程之间共享同一个实例。使用连接池可以避免这个问题。


4、Redis 配置

  • 确保 Redis 服务正常运行,并根据需求调整 Redis 配置(如最大连接数、超时时间等)。


5、数据过期

  • Redis 提供了键的过期功能,可以通过 expire 命令设置键的有效时间,以防止数据长时间占用内存。


6、监控与优化

  • 监控 Redis 性能指标(如内存使用、命令执行时间等),并根据实际情况进行优化。


连接池推荐配置




文章转载自:张占岭

原文链接:https://www.cnblogs.com/lori/p/18605815

体验地址:http://www.jnpfsoft.com/?from=infoq


用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
jedis使用及注意事项_php_快乐非自愿限量之名_InfoQ写作社区