Jedis使用 【附例子】

什么是Jedis

Jedis是一个Java语言编写的Redis客户端库,为 Java 开发者提供了与 Redis 服务器进行交互的便捷方式。通过 Jedis,我们可以轻松地操作 Redis 的各种功能,并实现缓存、会话管理、计数器、排行榜等业务需求。无论是新手还是有经验的开发者,都可以通过 Jedis 快速上手并利用 Redis 的强大功能

例子

使用Jedis需要引入依赖,在 Maven 项目的 pom.xml 文件中添加以下依赖项

   <!--jedis-->
   <dependency>
       <groupId>redis.clients</groupId>
       <artifactId>jedis</artifactId>
       <version>3.9.0</version>
   </dependency>

一、简单例子

当使用 Jedis 时,务必在使用完成后调用 close() 方法释放资源,以避免资源泄漏。由于 Jedis 实例是非线程安全的,因此在多线程环境中共享同一个 Jedis 实例会导致并发问题,主要原因是底层共享了一个输入输出流。为了避免这个问题,可以使用 Jedis Pool 来管理多个 Jedis 实例。Jedis Pool 类似于数据库连接池或线程池的思想,它维护了一定数量的 Jedis 实例,需要时从池中获取,使用完成后归还给池。这样可以减少 Jedis 实例的创建和销毁开销,提高性能和资源利用率。

 public static void main(String[] args) {
     Jedis jedis = new Jedis("192.168.13.31", 6379);
     jedis.set("testKey", "testValue");
     System.out.println(jedis.get("testKey"));
     // jedis.close() 的目的是释放Jedis实例所占用的资源
     jedis.close();
 }

结果:

在这里插入图片描述

为了避免频繁地创建和销毁连接,通常会使用连接池(例如 JedisPool)来管理连接。

二、线程池

简单例子


  public static void main(String[] args) {
      // 创建 Jedis 连接池配置对象
      JedisPoolConfig poolConfig = new JedisPoolConfig();
      poolConfig.setMaxTotal(10); // 设置最大连接数
      poolConfig.setMaxIdle(5); // 设置最大空闲连接数

      // 创建 Jedis 连接池
      JedisPool jedisPool = new JedisPool(poolConfig, "192.168.13.31", 6379);

      // 获取 Jedis 实例
      try (Jedis jedis = jedisPool.getResource()) {
          // 执行 Redis 操作
          jedis.set("example_key", "example_value");
          System.out.println(jedis.get("example_key"));
      } catch (Exception e) {
          e.printStackTrace();
      } finally {
          // 关闭 Jedis 连接池
          jedisPool.close();
      }
  }

其他数据类型


 public static void main(String[] args) {
      // 配置 Jedis 连接池
      JedisPoolConfig poolConfig = new JedisPoolConfig();
      poolConfig.setMaxTotal(10);
      JedisPool jedisPool = new JedisPool(poolConfig, "192.168.13.31");

      // 从连接池获取 Jedis 实例
      try (Jedis jedis = jedisPool.getResource()) {
          // 设置值
          jedis.set("key1", "value1");
          jedis.set("key2", "value2");

          // 获取值
          String value1 = jedis.get("key1");
          System.out.println("key1: " + value1);

          // 列表操作
          jedis.lpush("list1", "item1", "item2", "item3");
          List<String> list1 = jedis.lrange("list1", 0, -1);
          System.out.println("List1: " + list1);

          // 哈希表操作
          jedis.hset("hash1", "field1", "value1");
          jedis.hset("hash1", "field2", "value2");
          Map<String, String> hash1 = jedis.hgetAll("hash1");
          System.out.println("Hash1: " + hash1);

          // Set 操作
          jedis.sadd("set1", "member1", "member2", "member3");
          Set<String> set1 = jedis.smembers("set1");
          System.out.println("Set1: " + set1);

          // ZSet 操作
          jedis.zadd("zset1", 1.0, "member1");
          jedis.zadd("zset1", 2.0, "member2");
          jedis.zadd("zset1", 3.0, "member3");

          // 获取 ZSet 中的所有成员和分数
          Set<String> zsetMembers = jedis.zrange("zset1", 0, -1);
          System.out.println("ZSet1: " + zsetMembers);

          // 获取 ZSet 中指定成员的分数
          Double member1Score = jedis.zscore("zset1", "member1");
          System.out.println("ZSet1 中member1 的分数: " + member1Score);

          // 获取 ZSet 中指定分数范围内的成员
          Set<String> membersWithScoreInRange = jedis.zrangeByScore("zset1", 1.0, 2.0);
          System.out.println("ZSet1 中得分在 1.0 到 2.0 之间的成员: " + membersWithScoreInRange);

          // 删除键
          jedis.del("key1");

          // 检查键是否存在
          boolean keyExists = jedis.exists("key1");
          System.out.println("Key1 存在? " + keyExists);
      } catch (Exception e) {
          e.printStackTrace();
      } finally {
          // 关闭连接池
          jedisPool.close();
      }
  }

Jedis 中常用的一些 API

这些 API 提供了对 Redis 数据结构的基本操作,包括字符串、哈希表、集合、有序集合等的操作

方法描述
set(String key, String value)将指定键的值设置为给定的字符串值。
get(String key)返回指定键的值。
del(String... keys)删除一个或多个键。
exists(String key)检查给定键是否存在。
expire(String key, int seconds)设置键的过期时间(以秒为单位)。
ttl(String key)返回键的剩余生存时间(以秒为单位)。
hset(String key, String field, String value)将哈希表中指定字段的值设置为给定值。
hget(String key, String field)返回哈希表中指定字段的值。
hdel(String key, String... fields)删除哈希表中一个或多个字段。
hexists(String key, String field)检查哈希表中是否存在指定字段。
hgetAll(String key)返回哈希表中所有字段的值。
incr(String key)将指定键的值递增1。如果键不存在,则将其初始化为0后再递增。
decr(String key)将指定键的值递减1。如果键不存在,则将其初始化为0后再递减。
incrBy(String key, long increment)将指定键的值按指定增量递增。如果键不存在,则将其初始化为0后再递增。
decrBy(String key, long decrement)将指定键的值按指定减量递减。如果键不存在,则将其初始化为0后再递减。
sadd(String key, String... members)将一个或多个成员添加到集合中。
srem(String key, String... members)从集合中删除一个或多个成员。
smembers(String key)返回集合中的所有成员。
sismember(String key, String member)检查成员是否存在于集合中。
scard(String key)返回集合中的成员数。
zadd(String key, double score, String member)将成员及其分数添加到有序集合中。
zrange(String key, long start, long stop)按分数递增的顺序返回有序集合中指定范围内的成员。
zrem(String key, String... members)从有序集合中删除一个或多个成员。
zscore(String key, String member)返回有序集合中成员的分数。
zcard(String key)返回有序集合中的成员数。
append(String key, String value)将指定值追加到键的值末尾。如果键不存在,则相当于设置键的值为指定值。
strlen(String key)返回键值的长度。

小结

列举了一些简单例子,进一步的自己取探索把~~~

除了基本的连接、操作和连接池管理外,Jedis 还提供了一些进阶的用法,包括管道(pipeline)、事务(transaction)、发布订阅(pub/sub)等功能

下面简要介绍一些 Jedis 的进阶用法:

管道(Pipeline):管道可以将多个命令打包在一起发送到 Redis 服务器,减少网络往返时间,提高效率。在 Jedis 中,可以通过 Pipeline 类来实现。使用管道时,可以将一系列的 Redis 命令按顺序添加到管道中,然后一次性发送到服务器执行,最后通过 sync() 方法获取执行结果。

事务(Transaction):事务可以将一组命令打包成一个原子操作,在执行过程中不会被其他客户端的命令中断。在 Jedis 中,可以通过 Transaction 类来实现事务。使用事务时,可以使用 multi() 方法开始事务,然后添加多个命令,最后使用 exec() 方法执行事务。

发布订阅(Pub/Sub):发布订阅模式用于实现消息的发布与订阅,发布者将消息发送到指定的频道,订阅者订阅感兴趣的频道以接收消息。在 Jedis 中,可以使用 subscribe() 方法订阅一个或多个频道,并通过监听器接收消息;使用 publish() 方法向指定频道发布消息。

Lua 脚本执行:Jedis 支持执行 Lua 脚本,可以将多个命令打包成一个 Lua 脚本,在服务器端原子性地执行。可以使用 eval() 方法执行 Lua 脚本,并传递参数。

Key 操作:Jedis 提供了丰富的 key 操作方法,包括获取 key 列表、模糊匹配、设置过期时间等。

管道池和事务池:除了连接池外,Jedis 还提供了管道池和事务池,用于管理管道和事务的资源,提高并发性能。


觉得有用的可以留个关注❤

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值