Lettuce是一个可伸缩的线程安全的Redis客户端,支持同步、异步和响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于Netty框架构建,支持Redis的高级功能,如Sentinel,集群,流水线,自动重新连接和Redis数据模型。
Jedis在实现上是直连Redis-Server,多线程环境下非线程安全,需要通过连接池来使用Jedis。
Maven需要添加以下依赖包:
<dependency> <groupId>biz.paluch.redis</groupId> <artifactId>lettuce</artifactId> <version>4.4.6.Final</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.3</version> </dependency>
单机版下使用Lettuce:
public class CommonTest { private static RedisClient client; private static GenericObjectPool<StatefulRedisConnection<String, String>> pool; public static void main(String[] args) { open(); //JDK1.7之后有了try-with-resource处理机制。该机制用于自动释放外部资源。 //被自动释放的资源需要实现Closeable或者AutoCloseable接口,这样JVM才可以自动调用close()方法去自动关闭资源。 //写法为try(){}catch(){},将要关闭的外部资源在try()中创建,catch()捕获处理异常。 try(StatefulRedisConnection<String, String> connect = pool.borrowObject()){ testCommon(connect); testList(connect); } catch (Exception e) { e.printStackTrace(); } finally { close(); } } private static void testCommon(StatefulRedisConnection<String, String> connect) throws InterruptedException, ExecutionException { //sync RedisCommands<String, String> syncCommand = connect.sync(); //过期 syncCommand.expire("uid", 60 * 10); //多少秒后过期 syncCommand.expireat("uid", new Date()); //具体日期到达后过期 //删除key syncCommand.del("auth", "uid", "pwd"); //key是否存在 System.out.println(syncCommand.exists("uid")); syncCommand.set("auth", "1"); //批量set syncCommand.multi(); syncCommand.set("uid", "cjm"); syncCommand.set("pwd", "123"); syncCommand.exec(); String result = syncCommand.get("uid"); System.out.println(result); //async RedisAsyncCommands<String, String> asyncCommand = connect.async(); RedisFuture<Boolean> future = asyncCommand.setnx("uid", "cjm2"); //setnx: key不存在才set future.thenAccept(v -> System.out.println(v)); //获取监控信息 System.out.println(syncCommand.info()); } private static void testList(StatefulRedisConnection<String, String> connect){ RedisCommands<String, String> command = connect.sync(); command.del("colors"); String[] array = {"black", "white", "red", "blue", "yellow"}; //最后一个元素的索引为0 command.lpush("colors", array); //批量插入元素 command.lset("colors", 0, "yellow2"); //设置索引为0的元素 System.out.println(command.llen("colors")); //长度 System.out.println(command.lindex("colors", 1)); //取索引为1的元素 System.out.println(command.lpop("colors")); //取第一个元素,并从List中删除 System.out.println(command.lastsave().toString()); //最后保存日期 System.out.println(command.lrange("colors", 2, 2)); //取索引范围的元素 //以流的方式处理 Long count = command.lrange(new ValueStreamingChannel<String>() { @Override public void onValue(String value) { System.out.println(value); } }, "colors", 2, 3); System.out.println("count=" + count); } private static void open(){ client = RedisClient.create(RedisURI.create("redis://192.168.134.134:7001")); client.setDefaultTimeout(3000, TimeUnit.MILLISECONDS); //创建连接池 pool = ConnectionPoolSupport .createGenericObjectPool(() -> client.connect(), new GenericObjectPoolConfig()); } private static void close(){ pool.close(); client.shutdown(); } }
集群环境下使用Lettuce:
public class ClusterTest { private static RedisClusterClient client; private static GenericObjectPool<StatefulRedisClusterConnection<String, String>> pool; public static void main(String[] args) { open(); try(StatefulRedisClusterConnection<String, String> connect = pool.borrowObject()){ //获得池对象 RedisAdvancedClusterCommands<String, String> syncCommand = connect.sync(); syncCommand.set("uid", "cjm"); String result = syncCommand.get("uid"); System.out.println(result); //归还池的对象 pool.returnObject(connect); }catch(Exception ex){ ex.printStackTrace(); }finally{ close(); } } private static void open(){ ArrayList<RedisURI> list = new ArrayList<>(); list.add(RedisURI.create("redis://192.168.134.134:7001")); list.add(RedisURI.create("redis://192.168.134.134:7002")); list.add(RedisURI.create("redis://192.168.134.134:7003")); client = RedisClusterClient.create(list); pool = ConnectionPoolSupport .createGenericObjectPool(() -> client.connect(), new GenericObjectPoolConfig()); } private static void close(){ pool.close(); client.shutdown(); } }
相关推荐
【Lettuce-Redis高级客户端详解1】 ...以上就是关于Lettuce作为Redis高级客户端的基本介绍,包括其核心特性、连接方式和基本使用方法。Lettuce的灵活性和高性能使得它成为Java开发者在处理Redis时的理想选择。
lettuce - 高级Java Redis客户端,用于线程安全同步,异步和reactive用法。 支持群集,Sentinel,管道和编解码器。
该项目的主要目标是在`SpringBoot`应用中集成`Lettuce`作为Redis客户端,实现对Redis的高效访问和操作。同时,通过自定义配置和注入不同的`RedisTemplate`实例,可以轻松实现多库切换,满足不同场景下的需求。 2. **...
常见的 Redis 客户端库有 Jedis 和 Lettuce。Jedis 是一个用 Java 编写的轻量级 Redis 客户端,提供了丰富的命令支持,包括基本的数据操作和事务处理。在 Java 应用中,可以通过创建 Jedis 实例,设置服务器地址和...
在本场景中,"redis客户端,连接查看redis数据库"指的是使用特定的客户端工具来连接到Redis服务器,以便管理和操作存储在Redis中的数据。这里我们主要讨论如何连接Redis数据库以及常用的Redis客户端。 1. **Redis...
在Java环境中,虽然可以直接通过Jedis或Lettuce等库连接Redis,但有时使用图形化的Redis客户端会更加直观和方便,特别是对于开发、调试和运维来说。 "redis-desktop-manager-0.9.3.817.exe" 是一个名为Redis ...
本文将深入探讨Redis客户端、Redis绿色免安装版以及与Java开发相关的Redis插件。 首先,Redis客户端在开发和管理Redis服务器时起着至关重要的作用。`redis-desktop-manager-0.8.8.384.exe` 是一个名为Redis Desktop...
这里我们将详细探讨Redis客户端工具的使用、特性和选择。 首先,Redis客户端工具分为命令行界面(CLI)工具和图形用户界面(GUI)工具。CLI工具如`redis-cli`是Redis自带的命令行工具,简洁高效,适合快速操作和...
Lettuce是一个可伸缩线程安全的Redis客户端。多个线程可以共享同一个RedisConnection。它利用优秀netty NIO框架来高效地管理多个连接。 示例代码: RedisClient client = new RedisClient("localhost") ...
《lettuce-core:高级Java Redis客户端的深度解析》 Redis作为一种高性能的键值数据库,在分布式系统和微服务...如果你正在寻找一个高性能、灵活且易于使用的Redis客户端,那么Lettuce-core无疑是一个值得考虑的选项。
首先,`RedisClientTemplate`这个名字暗示它是一个模板类,它封装了Redis客户端的基本操作,为开发者提供了一种简洁、易于使用的接口。在Java中,我们通常使用Jedis或Lettuce作为Redis的客户端库。这里,我们假设`...
为此,开发者通常会使用连接池(Connection Pool),如 Java 中的 JedisPool 或 lettuce 中的 ConnectionPool,来复用已建立的连接。连接池的主要作用: 1. **减少连接创建和释放的开销**:预先创建一定数量的连接...
"redisDemo.zip"包含了一个名为"redisDemo-master"的项目,这很可能是用来演示Redis客户端使用的代码仓库。 一、Redis基础知识 1. Redis的数据类型:Redis支持五大数据类型,包括字符串(String)、哈希(Hash)、列表...
本文将详细探讨 Redis 的 Java 客户端以及如何在 Mac 上使用 Java 编写的图形客户端。 首先,Java 作为跨平台的编程语言,提供了多种 Redis 客户端库,如 Jedis、Lettuce 和 Redisson。Jedis 是最常用的,它提供了...
《庖丁解架构之RedisJava客户端Lettuce架构解剖与源码精读》 在IT行业中,Redis作为一款高性能的内存数据结构存储系统,被广泛应用于缓存、消息队列等多个场景。而Java作为企业级开发的主要语言,自然需要与Redis...
【redis官方推荐】Redisson 是使用熟悉的Java数据结构来发挥Redis的威力,基于lettuce Redis客户端和Netty 4 ,兼容 Redis 2.6 and JDK 1.6 ,使用Apache License 2.0授权协议,阅读 wiki 来获取更多使用信息...
Spring Data Redis支持Jedis和Lettuce两种Redis客户端。Jedis是较早的Redis Java客户端,轻量级且性能较好,但对Redis新特性的支持可能稍有滞后。Lettuce则是异步、基于Netty的客户端,适合处理高并发场景,且对...
本篇文章将深入探讨如何在Java项目中使用Redis客户端,主要以Jedis为例,同时也会提及Lettuce库。 首先,让我们导入Jedis库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>redis.clients ...
Lettuce是另一个Redis客户端,它基于Netty实现,并且是一个完全的异步驱动。Lettuce支持自动重连、异步和同步用例,支持Redis的高级特性如发布订阅、事务、管道、自动故障转移和集群。 在Spring框架中,Spring Data...
Java的Jedis是常用的Redis客户端库,它提供了一系列API,可以用来执行Redis命令,如设置和获取键值、操作列表、集合等数据结构。 "Redis入门教程.pptx"可能是关于Redis的基础教程,涵盖了Redis的基本概念、安装配置...