Windows下SpringBoot连接Redis的正确使用姿势

2023-09-18 22:57:50

1. 安装Redis

1.1通过wsl安装redis

参考官方安装文档,需要在wsl2上安装redis服务。

注意我们启动redis的方式:

  1. First way:采用官方文档的方式:sudo service redis-server start,关闭wsl后redis在后台仍能运行,可以 sudo service redis-server status 查看redis状态,如果要终止redis服务,就用 sudo service redis-server stop
  2. Second way:如果不需要在后台运行,在wsl中我们直接使用 redis-server 启动redis服务就行了,如果要关闭redis服务,就 ctrl + z挂起任务 -> htop -> 找到要kill的redis-server -> F9 -> 发送 SIGKILL 信号
    在这里插入图片描述
    在这里插入图片描述
    我们可以在Windows终端查看redis运行情况:netstat -ano | findstr :6379 查看6379端口的监听情况

在这里插入图片描述

1.2 Windows下安装redis(不推荐)

redis并不是为Windows打造的,但是有版本较低的redis。在redis下载地址中找到Redis-x64-3.0.504.zip,解压后打开 redis-server.exe 即可。但是最好用wsl的方式,因为是官方推荐。

2. 配置redis

此次项目的Spring Boot版本3.0.10,Java版本17(springboot 3.0以上要求Java版本>=17),实现联系人的简单读取、存储、清空

引入redis依赖

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

配置类

@Configuration
@ComponentScan
public class ContactConfig {
    @Bean
    LettuceConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    RedisTemplate<String, Contact> getRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Contact> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        
        return template;
    }
}

自定义对象,需要序列化

  • 有个问题是如果自定义数据类没有实现Serializable接口,就会报错不能反序列化,网上给的教程是RedisTemplate设置GenericJackson2JsonRedisSerializer的序列化方式,但是报错NoClassDef。所以这里方便起见,我们就让自定义类实现Serializable接口
  • 扩展:如果Contact的成员有Object,那么这个Object也必须能序列化
public class Contact implements Serializable {
	private Long id;
	...
}

3. Redis操作

redis api

@Component
public class ContactRepositoryImpl implements ContactRepository {
    @Autowired
    private RedisTemplate<String, Contact> redisTemplate;

    @Override
    public List<Contact> findAll() {
        return redisTemplate.opsForList().range("contact", 0, -1);
    }

    @Override
    public void save(Contact contact) {
        redisTemplate.opsForList().rightPush("contact", contact);
    }

    @Override
    public void clear() {
        redisTemplate.delete("contact");
    }
}

4. redis小结

redis之所以使用广泛在于其性能高:

  1. 基于内存:Redis 将数据存储在内存中,这使得它能够提供非常快速的读取和写入操作。内存速度比磁盘快得多,因此 Redis 能够快速响应客户端请求。

  2. 单线程模型:虽然 Redis 使用单线程来处理请求,但它通过异步 I/O 和非阻塞操作来实现高并发。这使得 Redis 能够有效地处理数千个客户端同时的请求。

  3. 数据结构多样性:Redis 支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,每种数据结构都经过高度优化,以满足不同的使用场景。例如,有序集合在排名和排行榜应用中非常高效。

同时redis也有不足:

  1. 数据持久化存在延迟
  2. 非阻塞的单线程可能成为性能瓶颈
  3. 不能保证结构一致性,事务无论中途是否出现错误都会继续执行,不能回滚
更多推荐

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。以下是BubbleUPnP的一些主要特点:1.支持Chromecast和转码:Bubb

conda init 导致的 powershell 启动缓慢的问题(Loading personal and system profiles took xxxx ms.)

文章目录一、问题描述二、问题溯源三、解决方案3.1测试3.2方案一:不在powershell中使用conda3.2方案二:需要时再在powershell中使用conda(推荐)四、powershell7特点一、问题描述powershell启动缓慢:每次启动都会加载很久的配置文件:Loadingpersonalandsy

【Python】conda虚拟环境下使用pyinstaller打包程序为exe

文章目录一、为什么要用conda虚拟环境二、pyinstaller用法2.1安装PyInstaller2.2基本用法打包一个Python脚本2.21打包一个Python项目2.22打包选项2.3打包依赖项2.31导出依赖项列表2.32配置依赖项2.4自定义打包选项2.5打包完成后的文件2.6注意事项三、打包示例一、为什

uni-app tree(树状) 组件

先看效果:组件代码:<template><viewclass="next-tree"><viewclass="next-tree-mask":class="{'show':showTree}"@tap="_cancel"></view><viewclass="next-tree-cnt":class="{'show':

QT-day1

实现华清远见登陆界面#include"mywnd.h"#include<iostream>#include<QDebug>#include<QPushButton>#include<QLineEdit>#include<QLabel>MyWnd::MyWnd(QWidget*parent):QWidget(parent

C#+sqlserver+asp.net婚纱影楼管理系统

一、源码描述这是一款简洁十分美观的ASP.NET+sqlserver源码,界面十分美观,功能也比较全面,比较适合作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦二、功能介绍该源码功能十分的全面,具体介绍如下:婚纱影楼管理系统实现了以下功能1:套系管理,影楼的管理人员可以管理自己所提供的套系信息2:员工管理,影楼

【QT】day4

闹钟头文件:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QDebug>#include<QMouseEvent>//鼠标时间#include<QPaintEvent>//绘制时间#include<QPainter>//画家时间#include<QPix

优秀的golang开源框架

Web框架:Gin:高性能的Web框架,适用于构建RESTfulAPI和Web应用。Echo:快速和灵活的Web框架,适合构建微服务。Beego:全功能的Web框架,包括ORM、模板引擎等。Revel:全栈Web框架,提供了丰富的功能集。数据库ORM:GORM:强大的对象关系映射库,支持多种数据库。XORM:简单而强大

滚雪球学Java(30):多维数组:定义和初始化一次搞定

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!前言在前面的学习中,我们已经了解了Java数组的定义和操作,但是在实际开发中,我们往往需要用到多维数组来存储数据。在本文中,我们将学习如何定义和初始化多维数组。摘要本文将介绍

python+nodejs+php+springboot+vue 导师双选系统

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的导师功能如下。导师管理导师选择信息,管理项目,管理项目提交并对学员提交的项目进行指导。为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的学员功能如下。学员选择导师,查看项目,提交已完成的项目文件,查看导师对项目的指导信息。这部分内容在系统

华为OD机考算法题:分奖金

题目部分题目分奖金难度难题目说明公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得距离*数字差值的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖

热文推荐