# Jedis、Redission、Lettuce 操作Redis、常用Redis操作方法

Jedis、Redission、Lettuce 操作Redis、常用Redis操作方法

概述

JedisRedissonLettuce都是RedisJava客户端,它们的主要区别在于以下几点:

  • 架构设计:JedisRedisson都是单线程的客户端,而Lettuce是多线程的客户端。这意味着Lettuce可以在一个线程池中处理多个连接,从而提高了性能和吞吐量。
  • 连接管理:JedisLettuce都使用连接池来管理连接,而Redisson使用Netty作为底层通信框架,它的连接管理和线程模型与Netty相同。
  • 功能支持:JedisRedisson都提供了丰富的功能和API,例如分布式锁、分布式队列、分布式计数器等。Lettuce的功能相对较少,但它提供了更好的异步支持和响应式编程模型。
  • 性能表现:在性能方面,Lettuce通常比JedisRedisson更快,因为它使用了异步、非阻塞的I/O模型和多线程连接池。但在特定的使用场景下,JedisRedisson也可能表现更好。
  • 综上所述,选择适合自己的Redis客户端取决于具体的使用场景和需求。如果你需要使用丰富的功能和API,可以选择JedisRedisson;如果你需要更好的性能和异步支持,可以选择Lettuce

Jedis

  • 定义:JedisRedis官方推荐的Java连接开发工具。
  • Jedis 是一个流行的 Redis 客户端中间件,提供了简单易用的 API 和高性能的连接池管理。它是一个轻量级的库,适用于大多数 Redis 应用场景,包括数据缓存、消息队列等。

Maven依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

使用方法

  • 创建 Jedis 实例:在代码中,首先需要创建 Jedis 实例来连接 Redis 服务器。可以使用默认的构造函数创建实例,也可以指定 Redis 服务器的主机名和端口号。
  • 执行 Redis 操作:通过 Jedis 实例,可以执行各种 Redis 操作,如设置键值对、获取值、执行数据结构操作等。
Jedis jedis = new Jedis("localhost",6379);
jedis.set("one", "one");
return jedis.get("one");

JedisPool初始化

@Bean
public JedisPool getJedisPool(){
    RedisProperties redisProperties=new RedisProperties();
    GenericObjectPoolConfig jedisPoolConfig=new JedisPoolConfig();
    // 资源池中的最大连接数
    jedisPoolConfig.setMaxTotal(10);
    // 资源池允许的最大空闲连接数
    jedisPoolConfig.setMaxIdle(10);
    // 资源池确保的最少空闲连接数
    jedisPoolConfig.setMinIdle(0);
    // 	当资源池连接用尽后,调用者的最大等待时间(单位为毫秒)。
    jedisPoolConfig.setMaxWaitMillis(1000);
    JedisPool jedisPool=new JedisPool(jedisPoolConfig,redisProperties.getHost(),redisProperties.getPort());
    try{
        Jedis resource = jedisPool.getResource();
        logger.info("==========JedisPool配置成功!");
        return jedisPool;
    }catch (Exception e){
        logger.info("==========JedisPool配置失败!");
        return null;
    }
}

Redission

  • Redisson在基于NIONetty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。
  • Redisson 是一个功能强大的 Redis 客户端中间件,提供了大量的分布式数据结构和服务,如分布式锁、分布式队列、分布式 Map 等。它还支持异步操作和响应式编程模型,适用于高并发和大规模分布式系统。

Maven依赖

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.5.0</version>
</dependency>

Redisson配置

@Configuration
public class RedissionConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private String port;

    private static Logger logger = Logger.getLogger(String.valueOf(RedissionConfig.class));

    /**
     * 单机模式配置
     */
    @Bean
    public RedissonClient redissonClient() {
        try {
            RedisProperties redisProperties = new RedisProperties();
            Config config =new Config();
            config.useSingleServer().setAddress("redis://"+host+":"+port);
            RedissonClient redissonClient = Redisson.create(config);
            logger.info("==========Redisson配置完成!");
            return redissonClient;
        } catch (Exception e) {
            logger.info("==========Redisson配置失败!" + e.getMessage());
            return null;
        }
    }
}

使用方法

RedissonClient接口中有好多方法进行操作Redis,首先,确保你已经按照前面的步骤正确配置了Redisson

  • 注解方式进行注入redissonClient
@Autowired
private RedissonClient redissonClient;

进行Redis操作。Redisson提供了丰富的API来操作Redis数据。以下是一些常见的示例:

  • 获取一个字符串:
RBucket<Object> bucket = redissonClient.getBucket("myKey");
Object value = bucket.get();
  • 设置一个字符串:
RBucket<Object> bucket = redissonClient.getBucket("myKey");
bucket.set("myValue");
  • 获取一个Map
RMap<Object, Object> map = redissonClient.getMap("myMap");
Object value = map.get("myKey");
  • 设置一个Map
RMap<Object, Object> map = redissonClient.getMap("myMap");
map.put("myKey", "myValue");
  • 获取一个列表:
RList<Object> list = redissonClient.getList("myList");
Object value = list.get(0);
  • 添加一个元素到列表:
RList<Object> list = redissonClient.getList("myList");
list.add("myValue");

这只是一些使用Redisson的基本示例,Redisson还提供了更多的功能和API,例如分布式锁、分布式队列、分布式计数器等。

Lettuce

  • Lettuce是一个可伸缩线程安全的Redis客户端。多个线程可以共享同一个RedisConnection。它利用优秀nettyNIO框架来高效地管理多个连接。
  • Lettuce 是一个高性能的 Redis 客户端中间件,使用 Netty 作为底层网络通信框架,提供了异步和响应式编程模型,支持 Redis Sentinel、Redis ClusterRedis 单机模式。Lettuce 还支持 SSL 和连接池管理等特性。

Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

applicaiton.yml配置

server:
  port: 8888
spring:
  redis:
    host: localhost
    port: 6379
    lettuce: # 这里标明使用lettuce配置
      pool:
        max-active: 8   #连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms  #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 5     #连接池中的最大空闲连接
        min-idle: 0     #连接池中的最小空闲连接
    timeout: 10000ms    #连接超时时间(毫秒)

RedisConfig配置RedisTemplate

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * RedisTemplate配置
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory connectionFactory){
        RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());//key序列化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//value序列化
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

使用

@RequestMapping("/test1")
public void addlist1() {
    redisTemplate.opsForValue().set("one", "one");
    redisTemplate.opsForSet().add("test:set2", "1");
    redisTemplate.opsForSet().add("test:set2", "2");
    redisTemplate.opsForSet().add("test:set1", "3");
    redisTemplate.opsForSet().add("test:set1", "3");
    redisTemplate.opsForHash().put("hash1", "name1", "lms1");
    redisTemplate.opsForHash().put("hash1", "name2", "lms2");
    redisTemplate.opsForHash().put("hash1", "name3", "lms3");
    redisTemplate.opsForList().leftPush("two", "two", "two1");
}

在这里插入图片描述

完整代码见https://gitee.com/Marlon_Brando/JavaTest/tree/master/configtest

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值