redis 客户端_Redis客户端选择困难症?比较多个客户端给自己一个最优选择

通常在redis中常见(java)客户端有三个:jedis、lettuce、redisson。下面就简单介绍一下这三个不同的redis客户端,看完之后你会选择哪个呢?

82e191d586cd250258aec00095c0abee.png

jedis客户端

jedis应该是redis中最老牌的Java客户端,提供了比较全面的Redis命令的支持,jedis采用的是socket长链接、阻塞式的方式进行数据的交互。同时为了实现链接的复用(减少连接频繁的创建和销毁)jedis也增加了连接池的功能,可以根据实际情况进行配置。

简单使用Demo

Jedis jedis = new Jedis("localhost", 6379);jedis.set("foo", "bar");String value = jedis.get("foo");jedis配置连接池大小GenericObjectPoolConfig config = new GenericObjectPoolConfig();config.setMaxTotal(100);config.setMaxIdle(20);JedisPool jedisPool = new JedisPool(config, "localhost", 6379);Jedis jedis = jedisPool.getResource();System.out.println(jedis.ping());

lettuce客户端

lettuce是一个高性能基于Java编写的Redis驱动框架,底层集成了Project Reactor提供天然的反应式编程,通信框架集成了Netty使用了非阻塞IO,5.x版本之后融合了JDK1.8的异步编程特性,在保证高性能的同时提供了十分丰富易用的API。

Springboot 2.x版本之后Spring-data-redis底层默认使用的就是lettuce。

简单使用Demo

RedisURI redisUri = RedisURI.builder()        .withHost("localhost")        .withPort(6379)        .withTimeout(Duration.of(10, ChronoUnit.SECONDS))        .build();RedisClient redisClient = RedisClient.create(redisUri);StatefulRedisConnection connection = redisClient.connect();RedisCommands redisCommands = connection.sync();SetArgs setArgs = SetArgs.Builder.nx().ex(5);String result = redisCommands.set("name", "throwable", setArgs);result = redisCommands.get("name");

最后在总结一下jedis和luttuce这两个区别(如果使用RedisTemlate操作直接用默认实现lettuce就可以了):

1.jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接

2.lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

redisson客户端

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。

它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

同时Redisson底层采用的是Netty 框架。支持Redis 2.8以上版本,支持Java1.6+以上版本。

简单使用Demo

// 客户端配置

Config config = new Config();

// 设置序列化协议ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);JsonJacksonCodec jsonJacksonCodec = new JsonJacksonCodec(om);config.setCodec(jsonJacksonCodec)        .useSingleServer()        .setAddress(redisHostName)        .setPassword(redisPassword)        .setDatabase(defaultDBStr)        .setConnectTimeout(timeout)        .setConnectionMinimumIdleSize(minIdle)        .setIdleConnectionTimeout(maxWait)        .setConnectionPoolSize(maxActive);// 客户端创建RedissonClient client = Redisson.create(config);RBlockingQueue queue = redissonClient.getBlockingQueue("key");queue.add(T);redisson的功能非常多、让人觉得花里胡哨的,但是我们在使用的时候直接查使用手册即可,使用还是非常方便的(详细的使用手册:https://gitee.com/mirrors/redisson/wikis/1.-%E6%A6%82%E8%BF%B0?sort_id=1717185)

我个人比较习惯使用redisson,原因很简单:

1.功能丰富;

2.可以像操作java普通数据结构和对象一样操作redis中的数据;

3.同样是线程安全、也同样有同步和异步操作;

Spring RedisTemplate

最后再说一下Spring-data-redis,它是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring cache进行了实现。

如果不使用redisson那肯定会使用RedisTemplate这个操作类,几乎所有相关redis的操作都被封装在这个类中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值