Springboot整合redis(一般人都能看懂的Lettuce版本)

https://www.cnblogs.com/wxxujian/p/12859616.html

去年学习的Redis,刚刚学习完就迫不及待的在实战中用了一下,走了很多坑不过幸好都填上了,需求的不断变化发现用不上Redis,一开始去掉了,后来想想加进来比较合适。这篇文章主要讲解Springboot如何整合开发Redis实现一个基本的案例。使用的是目前Springboot2.x的Lettuce版本。希望对你有帮助。

这里因为不是专门讲解Redis的,所以假定你已经学习了Redis,只是希望在SpringBoot2.x中使用。

废话不多说,直接按照步骤开始,以下的案例均在我自己的电脑上测试成功,如有问题可以联系我。

一、开发环境

名称版本Idea2018专业版(已破解)Maven4.0.0SpringBoot2.2.2Redis3.2.1RedisDesktopManager0.8.8jdk1.8

版本的话其实差不不大就没问题,最主要的就是Springboot的版本,在这里说一下Jedis和Lettuce的区别在哪?

1、Jedis 是直连模式,在多个线程间共享一个 Jedis 实例时是线程不安全的,每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本就较高了。

2、Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享,如果你不知道Netty也没事,大致意思就是一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。通过异步的方式可以让我们更好的利用系统资源。

既然有这么大的好处,干脆就用了这个,跟上时代的变化。下面新建一个SpringBootRedis项目,开始整合。

二、整合

步骤一:添加依赖

<!-- spring boot redis 缓存引入 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lettuce pool 缓存连接池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

步骤二:application.properties配置文件

# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

当然如果你的属性文件是yml的,把格式调整一下就OK了。

步骤三:新建config包,创建RedisConfig类

默认情况下RedisTemplate模板只能支持字符串,我们自定义一个RedisTemplate,设置序列化器,这样我们可以很方便的操作实例对象。

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Serializable> 
            redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

步骤四:新建bean包,创建User类

public class User implements Serializable {
    private Integer id;
    private String userName;
    private String userSex;
    public User() { }
    public User(Integer id, String userName, String userSex) {
        this.id = id;
        this.userName = userName;
        this.userSex = userSex;
    }
    //getter和setter方法
    //toString方法
}

步骤五:测试插入一个User

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootredisApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void testObj() throws Exception {
        User user=new User(1, "java的架构师技术栈", "man");
        ValueOperations<String, User> operations=redisTemplate.opsForValue();
        operations.set("fdd2", user);
        boolean exists=redisTemplate.hasKey("fdd2");
        System.out.println("redis是否存在相应的key"+exists);
        User getUser = (User)redisTemplate.opsForValue().get("fdd2");
        System.out.println("从redis数据库获取的user:"+getUser.toString());
    }
}

在上面这个例子中我们使用redisTemplate调用了opsForValue会得到一个ValueOperations操作。这个是专门操作String类型的数据,所以里面的键值对中键为String,而值是我们的User。当然redisTemplate还为我们提供了下面几个。

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

具体使用的时候,你可以根据自己的数据类型选择相应的方法即可,网上有各种RedisUtil工具类

### 回答1: Spring Boot可以通过Lettuce整合RedisLettuce是一个高性能的Redis客户端,支持异步、响应式和线程安全的操作。在Spring Boot中,我们可以通过添加Lettuce的依赖来使用它。然后,我们需要在application.properties文件中配置Redis的连接信息,包括主机名、端口号、密码等。最后,我们可以通过注入LettuceConnectionFactory来获取Redis连接,然后使用RedisTemplate或者ReactiveRedisTemplate来进行Redis操作。 ### 回答2: Redis是一种高效的NoSQL数据库,通过使用SpringBoot框架与Redislettuce进行集成,我们可以轻松地在应用程序中使用Redis实现缓存,定时任务和消息队列等功能。 1. 添加Redislettuce依赖 我们需要在项目的pom.xml文件中添加redislettuce的依赖项,以便能够在应用程序中使用redislettuce客户端。 ``` <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>x.x.x</version> </dependency> ``` 注:x为当前最新版本号 2. 配置redislettuce客户端 我们需要在应用程序中创建一个RedisConnectionFactory实例,通过该实例连接Redis数据库。我们可以使用LettuceConnectionFactory类来创建RedisConnectionFactory实例。 在我们的Spring Boot应用程序中,我们可以通过application.yml或application.properties文件配置Redis数据库的相关信息。 ``` spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= ``` 我们可以通过配置类将redislettuce客户端注册到Spring容器中,以便在应用程序中使用。 ``` @Configuration @EnableCaching public class RedisLettuceConfig { @Autowired private Environment env; @Bean public RedisConnectionFactory redisConnectionFactory() { LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() .useSsl().and() .commandTimeout(Duration.ofSeconds(2)) .shutdownTimeout(Duration.ZERO) .build(); RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration( env.getProperty("spring.redis.host"), Integer.parseInt(env.getProperty("spring.redis.port"))); return new LettuceConnectionFactory(serverConfig, clientConfig); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new JdkSerializationRedisSerializer()); return template; } } ``` 3. 使用redislettuce 我们可以在我们的Java代码中使用Spring缓存抽象缓存结果,Spring会根据其缓存配置自动缓存和加载数据。我们可以使用Spring的CacheAbstraction为存储在Redis中的数据创建缓存注解。 ``` @Cacheable(value="Category", key="‘category_cache_’+#root.args[0]") public Category getCategoryById(Long id) { // fetch category by id // if not found, return null return category; } @CachePut(value="Category", key="‘category_cache’+#root.args[0].id") public Category updateCategory(Category category) { // update category // return updated category } @CacheEvict(value="Category", key="‘category_cache’+#root.args[0]") public void deleteCategoryById(Long id) { // delete category by id } ``` 我们可以通过以下方式操作redis: ``` @Autowired private RedisTemplate<String,Object> redisTemplate; public void add(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } public void delete(String key) { redisTemplate.delete(key); } ``` 总结 使用Spring Boot框架与Redislettuce进行集成,我们可以轻松地在应用程序中使用Redis实现缓存,定时任务和消息队列等功能。步骤如下: 1. 添加Redislettuce依赖 2. 配置redislettuce客户端 3. 使用redislettuce 该应用程序允许简单的操作redis数据库。无论是在单个节点还是在集群中,redis集成都将非常实用。使用redislettuce的标准连接池大小和异步API支持,可以轻松地处理高负载、高并发的场景。 ### 回答3: Spring Boot是一个开源框架,用于构建可扩展和可配置的Java应用程序。它提供了一组流行的功能,在开发人员中广泛使用。Redis是一种基于内存的高性能键值数据存储系统,可以用于缓存和持久化数据。 Lettuce是一个高级的Redis客户端库,支持异步、可扩展、非阻塞、事件驱动模型。它还支持集群、TLS、Redis Sentinel等强大功能。在Spring Boot中,可以通过使用Lettuce来集成Redis。 下面是使用Spring Boot整合Redis Lettuce的步骤: 第一步是添加依赖项。在Maven项目中,我们需要添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>X.Y.Z</version> </dependency> ``` 请注意,`X.Y.Z`应替换为所需的Lettuce版本。 第二步是配置Redis连接。我们可以使用application.properties或application.yml文件来配置Redis连接。下面是一个简单的例子: ```yaml spring.redis.host=localhost spring.redis.port=6379 ``` 这里我们指定Redis服务器的主机和端口。 第三步是在应用程序中使用Redis。我们可以使用Spring Boot提供的`RedisTemplate`类来访问Redis。在以下示例中,我们向Redis中设置字符串,并在稍后检索它: ```java @Autowired private RedisTemplate<String, String> redisTemplate; public void setKey(String key, String value) { redisTemplate.opsForValue().set(key, value); } public String getKey(String key) { return redisTemplate.opsForValue().get(key); } ``` 请注意,`RedisTemplate`类使用Spring Boot自动配置中指定的Redis连接。我们可以通过调用`opsForValue()`方法来访问Redis字符串。 最后,我们需要确保Redis服务器已启动,并在应用程序启动时连接。 总之,通过上述步骤,我们可以轻松地在Spring Boot中集成Redis Lettuce,并使用Spring Boot提供的RedisTemplate来访问Redis。这些步骤可以提高应用程序的性能和可伸缩性,以满足不同业务场景的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hello_world!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值