Spring Boot 中的 Redis 的数据操作配置和使用

news2024/11/17 13:42:57

Spring Boot 中的 Redis 的数据操作配置和使用

Redis 是一种高性能的 NoSQL 数据库,它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。Redis 还提供了丰富的命令,可以对数据进行快速的 CRUD 操作。Spring Boot 是一个基于 Spring 的快速开发框架,它提供了对 Redis 的集成支持。在本文中,我们将介绍如何在 Spring Boot 应用程序中配置和使用 Redis 的数据操作。

在这里插入图片描述

Redis 简介

Redis 是一款开源的高性能键值存储系统,它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。Redis 的优势在于其快速的读写速度和高效的内存管理,使其成为一个非常适合缓存和数据存储的工具。Redis 还提供了事务处理、发布订阅、Lua 脚本等丰富的功能,使其成为一个非常灵活的数据库。

Spring Boot 中的 Redis 数据操作

Spring Boot 提供了对 Redis 的支持,可以通过 Spring Data Redis 来进行数据操作。Spring Data Redis 是一个基于 Spring Data 的模块,提供了对 Redis 的集成支持。它可以通过注解或者 XML 文件来配置 Redis 的数据访问。

配置 Redis 连接池

在 Spring Boot 应用程序中使用 Redis,首先需要配置 Redis 的连接池。可以使用 Spring Boot 自带的 Lettuce 连接池,也可以使用 Jedis 连接池。这里我们选择使用 Lettuce 连接池。

@Configuration
public class RedisConfig {

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

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

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

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory() {
        RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration(host, port);
        redisConfiguration.setPassword(RedisPassword.of(password));
        return new LettuceConnectionFactory(redisConfiguration);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory());
        template.setDefaultSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        return template;
    }
}

在上面的代码中,我们定义了一个 RedisConfig 类,通过 @Value 注解读取配置文件中的 Redis 主机、端口、密码和超时时间。然后通过 LettuceConnectionFactory 创建 Redis 连接工厂,并将其注入到 Spring 容器中。在 RedisTemplate 中,我们定义了默认的序列化器为 Jackson2JsonRedisSerializer,这样我们就可以直接将 Java 对象序列化为 JSON 存储到 Redis 中。

数据操作示例

在 Spring Boot 应用程序中使用 Redis,可以通过 RedisTemplate 进行数据操作。下面是一个数据操作的示例代码。

@Service
public class UserService {

    private static final String KEY_USER = "user";

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void save(User user) {
        redisTemplate.opsForHash().put(KEY_USER, user.getId(), user);
    }

    public void delete(String id) {
        redisTemplate.opsForHash().delete(KEY_USER, id);
    }

    public User findById(String id) {
        return (User) redisTemplate.opsForHash().get(KEY_USER, id);
    }

    public List<User> findAll() {
        return redisTemplate.opsForHash().values(KEY_USER).stream()
                .map(obj -> (User) obj)
                .collect(Collectors.toList());
    }
}

在上面的代码中,我们定义了一个 UserService 类,使用 @Autowired 注解注入了 RedisTemplate。在该类中,我们定义了一些数据操作方法,如 save、delete、findById 和 findAll 等。这些方法直接调用 RedisTemplate 中封装的基本数据操作方法。

使用 Redis 注解

除了使用 RedisTemplate 进行数据操作外,Spring Data Redis 还提供了一些注解来简化数据操作。这些注解包括@Cacheable、@CachePut、@CacheEvict 和 @RedisHash 等。下面是一个使用 @Cacheable 注解的示例代码。

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Cacheable(value = "user", key = "#id")
    public User findById(String id) {
        return userRepository.findById(id).orElse(null);
    }
}

在上面的代码中,我们使用了 @Cacheable 注解来缓存 findById 方法的结果。这样,当下次调用 findById 方法时,如果传入的 id 值和之前查询的 id 值相同,则直接从缓存中获取结果,不需要再次执行数据库查询操作。

总结

本文介绍了在 Spring Boot 应用程序中配置和使用 Redis 的数据操作。首先,我们使用 Lettuce 连接池配置了 Redis 的连接。然后,我们使用 RedisTemplate 进行了基本的数据操作,包括 put、get、delete 和 values 等。最后,我们介绍了使用 @Cacheable 注解来简化数据操作的方法。通过本文的介绍,读者可以快速上手使用 Redis 进行数据存储和缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构--栈的引用--前中后缀表达式(前部分)

数据结构–栈的引用–前中后缀表达式(前部分) 常见的算数表达式 由三个部分组成: 操作数、运算符、界限符 \color{red}操作数、运算符、界限符 操作数、运算符、界限符 ps:界限符是必不可少的,反映了计算的先后顺序 波兰表达式(让计算机更容易识别的算数表达式) Reverse Po…

高性能分布式缓存Redis(一) 快速实战

一、缓存发展史&缓存分类 1.1、大型网站中缓存的使用 访问量越大&#xff0c;响应力越差&#xff0c;用户体验越差。 引入缓存、示意图如下&#xff1a; 读写策略&#xff1a; Cache Aside Pattern&#xff08;旁路缓存模式&#xff09;Read/Write Through Pattern&am…

AA-TransUNet github: 用于预测任务的注意力增强的TransUNet

文章目录 来源AA_TransUNet架构数据集和预训练模型使用作者 来源 github地址 AA_TransUNet架构 数据集和预训练模型 如果你对本文中使用的数据集&#xff08;降水图和云量数据集&#xff09;感兴趣&#xff0c;请访问SmaAt-UNet了解更多细节。 对于预训练的AA_TransUNet模型…

从磁盘看 IO

计算机上的易失和非易失存储器 常见磁盘可以分为两类&#xff1a;机械磁盘和固态磁盘。 第一类&#xff0c;机械磁盘&#xff0c;也称为硬盘驱动器&#xff08;Hard Disk Driver&#xff09;&#xff0c;通常缩写为 HDD。机械磁 盘主要由盘片和读写磁头组成&#xff0c;数据就…

认识固态继电器及其工作原理

什么是固态继电器&#xff0c;有什么优缺点&#xff1f; 固态继电器 简称SSR&#xff0c;又被称之为“无触点开关”它利用电子元件&#xff08;如双向可控硅等半导体器件&#xff09;的开关特性&#xff0c;可到达无触点无火花地接通和断开电路。 固态继电器工作可靠&#…

1.3 Metasploit 生成SSL加密载荷

在本节中&#xff0c;我们将介绍如何通过使用Metasploit生成加密载荷&#xff0c;以隐藏网络特征。前一章节我们已经通过Metasploit生成了一段明文的ShellCode&#xff0c;但明文的网络传输存在安全隐患&#xff0c;因此本节将介绍如何通过生成SSL证书来加密ShellCode&#xff…

ChatGPT应用工具推荐

ChatGPT作为一种先进的自然生成技术&#xff0c;已经在各个领域展现出了其强大的应用能力&#xff0c;下面将给大家介绍一些ChatGPT的功能应用。 简介 此系统是基于likeadmin—PHP开发的智能对话系统&#xff0c;ChatGPT是一种基于人工智能技术的聊天机器人&#xff0c;它可以…

如何利用AI智能聊天机器人 10秒钟做出一个故事绘本的神奇插件

原文链接&#xff1a;如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件 C_h~at_&G&&P_T : 以下称为AI智能聊天机器人 一、AI智能聊天机器人4中集成“Stories”插件 对于已经熟悉使用AI智能聊天机器人4 的插件的朋友们&#xff0c;直接在应用市场里搜索…

vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK

目录 0 结果展示 1 cmake要点 2 编译报错解决 3 参考链接 0 结果展示 1 cmake要点 注意DCMTK_dcmtk_INCLUDE_DIR 2 编译报错解决 D:\Work\C\qt6Work\DCMTK\install\bin\dcmtkcharls.dll : fatal error LNK1107: 文件无效或损坏: 无法在 0x308 处读取 修改&#xff0c;从…

docker安装mysql并且进行连接

1、拉取镜像、在linux中执行命令 docker pull mysql 2、运行容器、在linux中执行命令 docker run -d --name mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD123456 mysql3、 进入容器、在linux中执行命令 docker ps -a docker exec -it 2a85f05d4090 /bin/bash 4、登录docker中的m…

MySQL日志详解

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

基于SpringBoot+vue的校园新闻网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

移动WEB开发之流式布局

css基础&#xff08;一&#xff09;css基础&#xff08;一&#xff09;_上半场结束&#xff0c;中场已休息&#xff0c;下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束&#xff0c;中场已休息&#xff0c;下半场ing的博客-CSDN博客css基础&#xff08;二&#xff09;c…

go语言学习笔记1

go语言简介 ​ GoLang是一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言&#xff1b;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性&#xff0c;还可以发挥多核处理器同步多工的优点&#xff0c;并可解决面向对象程序设计的麻烦&#x…

2.ThreadLocalRandom

Random类及其局限性 一般情况下&#xff0c;我们都会使用java.util.Random来生成随机数&#xff08;Math.random()也是使用Random实例生成随机数&#xff09;。 示例 public static void main(String[] args) {Random random new Random();for (int i 0; i < 10; i) {S…

热搜第一!携程宣布每生一个娃奖5万!

6月30日&#xff0c;在线旅游平台携程集团宣布&#xff0c;他们全新推出一项针对全球员工的生育补贴政策。 从2023年7月1日开始&#xff0c;入职满3年的全球员工&#xff0c;无论你是男是女&#xff0c;每生育一个孩子&#xff0c;就将为你获得每年一万元的现金补贴。而这份补贴…

从vue2学习vue3

vue3与vue2的区别 Vue 3在写法上与Vue 2有一些区别&#xff0c;以下是一些常见的区别&#xff1a;引入方式&#xff1a;Vue 2使用Vue全局对象进行引入&#xff0c;而Vue 3使用createApp函数创建应用实例。组件注册&#xff1a;Vue 2中使用Vue.component全局方法或在选项中使用…

Python用if-else实现【猜数字】

文章目录 Python 猜数字案例代码实现&#xff1a;运行效果&#xff1a; Python 猜数字案例 设置一个范围1-100的随机整数变量&#xff0c;通过while循环&#xff0c;配合input语句&#xff0c;判断输入的数字是否等于随机数 无限次机会&#xff0c;直到猜中为止每一次猜不中&am…

1.Springboot基础篇笔记

Springboot基础篇 1.快速上手Springboot 1.基础配置 1.parent 通过配置指定父工程依赖为spring-boot-starter-paerent实现了版本管理的功能&#xff0c;再导入springboot整合其他技术的jar包即可 作用&#xff1a;指定jar包版本信息信息&#xff0c;避免依赖版本冲突 这个s…

理解 flask中request中form、data、json、values属性的区别

flask的request对象中关于请求参数的获取有几个不同的属性,例如 args、form、data、json。估计大部分人一开始也分不清什么情况下哪个属性有值,哪个属性没值,这篇文章全面整理了这几个属性之间的区别和使用场景。 flask.request对象其实是对HTTP请求的一种封装,我们知道HT…