详解Spring Boot 访问Redis的三种方式

yizhihongxing

详解Spring Boot访问Redis的三种方式

Redis是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Spring Boot是一个非常流行的Java开发框架,它提供了多种方式来访问和操作Redis。

在本文中,我们将介绍Spring Boot访问Redis的三种方式,并提供相应的代码示例。

方式一:使用Spring Data Redis

Spring Data Redis是Spring框架提供的一个Redis客户端,它支持基本的Redis操作(如set、get、incr、decr等)以及高级操作(如事务、pub/sub、Lua脚本等)。

使用步骤:

  1. 引入Spring Data Redis依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置Redis连接信息
spring:
  redis:
    host: localhost
    port: 6379
    password: mypassword
  1. 创建RedisTemplate对象,进行操作
// 获取RedisTemplate对象
@Autowired
private RedisTemplate<String, String> redisTemplate;

// 设置值
redisTemplate.opsForValue().set("key", "value");

// 获取值
String value = redisTemplate.opsForValue().get("key");

示例说明

假设我们要在Redis中存储一个用户信息,包括姓名和年龄。我们可以使用Spring Data Redis将其存储为一个Hash类型的数据结构。

// 创建一个User类
@Data
public class User {
    private String name;
    private int age;
}

// 存储用户信息到Redis
@Autowired
private RedisTemplate<String, User> redisTemplate;

public void saveUser(User user) {
    String key = "user:" + user.getName();
    redisTemplate.opsForHash().put(key, "name", user.getName());
    redisTemplate.opsForHash().put(key, "age", String.valueOf(user.getAge()));
}

// 获取用户信息
public User getUser(String name) {
    String key = "user:" + name;
    User user = new User();
    user.setName(name);
    String ageStr = (String)redisTemplate.opsForHash().get(key, "age");
    int age = Integer.parseInt(ageStr);
    user.setAge(age);
    return user;
}

方式二:使用Jedis

Jedis是一个Java实现的Redis客户端,它提供了丰富的API接口,可以方便地进行Redis操作。

使用步骤

  1. 引入Jedis依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>
  1. 配置Jedis连接信息
@Bean
public Jedis jedis(RedisProperties redisProperties) {
    String host = redisProperties.getHost();
    int port = redisProperties.getPort();
    String password = redisProperties.getPassword();
    return new Jedis(host, port, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_DATABASE, password);
}
  1. 创建Jedis对象,进行操作
// 获取Jedis对象
@Autowired
private Jedis jedis;

// 设置值
jedis.set("key", "value");

// 获取值
String value = jedis.get("key");

示例说明

假设我们要使用Jedis操作Set类型的数据结构,存储一些用户ID。我们可以使用以下代码实现:

// 存储用户ID到Redis Set
@Autowired
private Jedis jedis;

public void addUserId(String userId) {
    jedis.sadd("user:id:set", userId);
}

// 获取所有用户ID
public Set<String> getUserIdSet() {
    return jedis.smembers("user:id:set");
}

方式三:使用Lettuce

Lettuce是一个基于Netty的高性能Redis客户端,它提供了异步API接口,可以同时操作多个Redis连接。

使用步骤

  1. 引入Lettuce依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-lettuce</artifactId>
</dependency>
  1. 配置Lettuce连接信息
spring:
  redis:
    host: localhost
    port: 6379
    password: mypassword
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
  1. 创建LettuceConnectionFactory对象,进行操作
// 获取LettuceConnectionFactory对象
@Autowired
private LettuceConnectionFactory lettuceConnectionFactory;

// 设置值
RedisConnection connection = lettuceConnectionFactory.getConnection();
connection.set("key".getBytes(), "value".getBytes());
connection.close();

// 获取值
RedisConnection connection = lettuceConnectionFactory.getConnection();
byte[] valueBytes = connection.get("key".getBytes());
connection.close();
String value = new String(valueBytes);

示例说明

假设我们要使用Lettuce操作ZSet类型的数据结构,存储一些文章ID和它们的阅读量。我们可以使用以下代码实现:

// 存储文章ID和阅读量到Redis ZSet
@Autowired
private LettuceConnectionFactory lettuceConnectionFactory;

public void addArticleReadCount(String articleId, int readCount) {
    RedisConnection connection = lettuceConnectionFactory.getConnection();
    connection.zAdd("article:read:zset".getBytes(), readCount, articleId.getBytes());
    connection.close();
}

// 获取阅读量排名前N的文章ID
public List<String> getTopArticleIds(int n) {
    RedisConnection connection = lettuceConnectionFactory.getConnection();
    Set<byte[]> articleBytesSet = connection.zRevRange("article:read:zset".getBytes(), 0, n - 1);
    connection.close();
    List<String> articleIdList = new ArrayList<>();
    for (byte[] articleBytes : articleBytesSet) {
        articleIdList.add(new String(articleBytes));
    }
    return articleIdList;
}

总结

在本文中,我们介绍了Spring Boot访问Redis的三种方式,并提供了相应的代码示例。使用Spring Data Redis可以方便地进行基本操作和高级操作,使用Jedis可以获得更为丰富的API接口,使用Lettuce可以得到更高的性能和更好的并发支持。根据实际需求选择相应的方式即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring Boot 访问Redis的三种方式 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • IntelliJ IDEA引入第三方jar包或查看Java源码的时候报decompiled.class file bytecode version:52.0(java 8)错误的解决办法

    当我们在使用 IntelliJ IDEA 引入第三方jar包或查看Java源码的时候,有时会出现以下错误提示信息: Error: java: decompiled.class file bytecode version:52.0 (java 8) 这是因为项目使用的Java版本与第三方jar包或源码使用的Java版本不一致导致的。要解决此问题,我们需要采取以…

    Java 2023年5月20日
    00
  • 微信小程序实现横屏手写签名

    微信小程序可以通过使用第三方库实现横屏手写签名功能。以下是一些示例来演示如何实现这一功能。 预备知识 在实现横屏手写签名功能前,必须具备以下的预备知识: 了解Canvas绘图的基本概念。 了解怎样创建并运用自定义小程序组件。 了解JavaScript语言,并熟悉使用第三方JavaScript库。 实现步骤 创建一个新的小程序页面,例如名为“Signature…

    Java 2023年5月23日
    00
  • MyBatis运行找不到xml资源文件

    MyBatis运行找不到xml资源文件 运行报错: 报错原因:程序运行后,没有将 src/main/java 目录下的资源文件(xml、properties等等)导出到 target工作目录下,所以程序找不到 java目录: 运行后的target目录:可以看到并没有 MonsterMapper.xml文件 解决方法: Maven项目在 pom.xml 文件中…

    Java 2023年4月23日
    00
  • 详解SpringMVC重定向传参数的实现

    接下来我将为你讲解“详解SpringMVC重定向传参数的实现”的完整攻略。 标题 介绍 在SpringMVC中,有时候需要在重定向跳转的时候把一些参数传递过去,以便在下一个请求中使用。本文将详细讲解如何在SpringMVC中实现重定向传参数。 实现步骤 第一步:使用RedirectAttributes添加Flash属性 SpringMVC提供了Redirec…

    Java 2023年6月15日
    00
  • 本地方法栈的作用是什么?

    本地方法栈(Native Method Stack)是Java虚拟机中的一块内存区域,用于存储本地方法的参数、返回值和局部变量等信息。本地方法是指使用本地语言(如C或C++)编写的方法,可以通过Java Native Interface(JNI)调用。本地方法栈是线程私有的,每个线程都有自己的本地方法栈。本地方法栈的大小可以通过虚拟机参数-Xss进行设置。 …

    Java 2023年5月12日
    00
  • java上乘武功入门–反射

    Java 上乘武功入门——反射的完整攻略 什么是反射 Java 中的反射(Reflection)是指程序可以在运行期间获取其本身的信息的一种机制。Java 反射机制允许程序在运行期间进行自我检查操作,比如检查自身的属性和方法,或者动态地执行方法。反射机制广泛应用于 Java 框架开发中,通过反射机制可以大大提升编码的灵活性和通用性。 反射机制的原理 Java…

    Java 2023年5月26日
    00
  • Springboot启动后执行方法小结

    SpringBoot启动后执行方法是开发SpringBoot应用程序时经常涉及到的一个知识点。本文将详细讲解SpringBoot启动后执行方法的完整攻略,包括执行方式、参数解析和应用场景。 一、执行方式 SpringBoot启动后执行方法有两种执行方式,分别为实现CommandLineRunner接口和使用ApplicationRunner接口。 1.1 实…

    Java 2023年5月31日
    00
  • Java中print、printf、println的区别 原创

    Java中print、printf、println的区别 在Java中,我们经常使用print、printf、println这三种输出内容的方法,虽然它们都可以用于输出内容,但是其实它们有着不同的用法和表现形式。 print方法 print方法是Java中最基本的输出方法,它的作用是直接输出内容,不会换行。该方法是以字符串形式输出,可以接受多个参数,参数之间…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部