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

2023-11-16

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. 不能保证结构一致性,事务无论中途是否出现错误都会继续执行,不能回滚
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows下SpringBoot连接Redis的正确使用姿势 的相关文章

  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析
  • 在哪里可以找到 Windows 7 UX 指南中推荐的图标/动画?

    Windows 7 UX 指南有很好的插图和图标示例 但我在 SDK 中确实找不到它们 他们藏在某个地方 还是找不到 如果您谈论的是常见的 UI 图标 那么您应该以编程方式获取它们 例如 您可以使用 var errIcon HICON be
  • 常见的 Windows 编译器上有哪些 std::locale 名称可用?

    该标准对于什么构成有效的语言环境名称几乎没有提及 只有传递无效的区域设置名称才会导致std runtime error 哪些语言环境名称可用于常见的 Windows 编译器 例如 MSVC MinGW 和 ICC 好吧 C 和 C 语言环境
  • Tensorflow 导入错误:没有名为“tensorflow”的模块

    我在 Windows Python 3 5 Anaconda 环境中安装了 TensorFlow 验证成功 有警告 tensorflow C gt python Python 3 5 3 英特尔公司 默认 2017 年 4 月 27 日 1
  • 用于创建计划任务的 VBScript

    我正在尝试创建一个 VBScript 它创建一个批处理文件 然后创建一个计划任务来运行该批处理文件 到目前为止 我尝试过的所有操作都创建了批处理文件 但没有创建计划任务 并且我没有收到任何错误 这是我到目前为止所拥有的 Option Exp
  • Sencha Cmd 5 + Java 8 错误

    在我的 Windows 构建服务器上安装 Java 8 JDK 后 执行以下命令时遇到以下错误sencha命令 C gt sencha Error Registry key Software JavaSoft Java Runtime En
  • 当我启动 Windows 命令提示符时,我做了什么导致环境变量发生更改?

    我使用的是 Windows 10 x64 我安装了 Anaconda3 如果我启动 C Windows system32 cmd exe 时没有运行任何其他内容 并且在我可以看到的后台中没有任何有趣的内容 则以下内容将添加到控制面板 UI
  • 将所有文件与指定目录(和子目录)中的所有文件进行二进制比较

    我需要将目录及其子目录中包含的所有文件与同一目录及其子目录中包含的所有其他文件进行比较 并将匹配文件的路径记录到文本文件或 CSV 我意识到有一些软件工具可以做到这一点 但除非它可以在 Windows 中开箱即用 否则我将不被允许在我的网络
  • 获取自动热键中的可用屏幕区域

    我正在尝试编写一些简单的 AutoHotkey 脚本来移动窗口 但在获取正确的屏幕尺寸值时遇到问题 我试图获取屏幕上可用区域的大小 通常是全屏分辨率减去任务栏 也许还有任何其他停靠窗口 如 Vista 中的侧边栏 我发现的获取屏幕宽度的方法
  • 在 Windows 中使用 PHP 创建受密码保护的 Zip 文件

    我正在 PHP 中创建给定文件的 zip 文件 下面是函数 function create zip file file name zip new ZipArchive zip name file name zip Zip name zip
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • 将 kinit 与 keytab 文件一起使用时会发生什么

    希望对kinit和keytab文件的使用有更多的了解 例如 如果我已经为某个服务生成了一个密钥表文件 该服务通过以下方式注册到活动目录 ktpass mapuser to someuseraccount ktab k mykeytab a
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • 将 OpenBLAS 链接到 MinGW

    我正在尝试链接OpenBLAS https www openblas net 图书馆与明GW w64 https mingw w64 org Windows 上的编译器 这是我的代码 include
  • 如何使用正则表达式验证带有可选百分比符号的小数?

    正如问题的标题 我需要使用以下值验证正则表达式 最多 2 个小数位和 9 个整数 带有可选的百分比符号 Valid 10 0 1111111 12 15 2 10 2 3 Invalid 12 02 123456789123 123 I t

随机推荐

  • 第三周作业

    1 图文并茂说明raid0 raid1 raid10 raid01 raid5等原理 RAID 0 以chunk为单位并行读写数据 速度非常快 但是没有冗余容错能力 如果一块硬盘损坏的话 会导致所有数据的丢失 最少磁盘数 1 RAID 1
  • vector模板类的简单实现 C++

    学了模板类那一节 所以动手自己用C 简单实现了一下 vector 的几个简单函数 直接上代码吧 include
  • JVM内存溢出与内存泄露

    1 什么是内存溢出 当前创建的对象的大小大于可用的内存容量大小 发生内存溢出 2 什么是内存泄露 该回收的垃圾对象没有被回收 发生了内存泄露 垃圾对象越堆越多 可用内存越来越少 若可用内存无法存放新的垃圾对象 就导致内存溢出 内存泄露会导致
  • 华为云云耀云服务器L实例评测|redis漏洞回顾 & MySQL数据安全解决 搭建主从集群MySQL & 相关设置

    前言 最近华为云云耀云服务器L实例上新 也搞了一台来玩 期间遇到过MySQL数据库被攻击的情况 数据丢失 还好我有几份备份 没有造成太大的损失 后来有发现Redis数据库被攻击的情况 加入了redis密码初步解决问题 总之就是各种遭受毒打
  • 2023年网络与信息安全国际会议(NISecurity 2023)

    会议简介 Brief Introduction 2023年网络与信息安全国际会议 NISecurity 2023 会议时间 2023年10月13日 15日 召开地点 中国 杭州 大会官网 www nisecurity org 2023年网络
  • python之selenium-web自动化<一>

    python之web自动化 二 戳这里 一图了解整个代码驱动浏览器的过程 前提 Chrome浏览器驱动下载地址 http chromedriver storage googleapis com index html Firefox 火狐 浏
  • 【vscode单位转换】px、rem、rpx相互转换工具

    文章目录 一 px rem px rem rem px 我失效了 写个新的 二 px rpx 三 rpx px 重点 四 新 px rem px rem rem px 记录学习的轨迹 2022 06 20 之前写在wiki里 移植记录 具体
  • global lib dirs 在设置多个编译器时仍旧使用旧的编译器路径

    BB的地方 以前自己用arm linux gnueabihf的5 4 1的版本编译测试了虚拟键盘 全部都没有问题 突然呢 说不行 就要用厂家给的arm realarm的5 5版本 原本Qt用5 13 0 那不行 要用13 2的 那拜托你之前
  • springboot项目制作docker镜像,如何动态传递变量值?

    springboot项目制作成docker镜像后 如何给properties文件的变量动态传递值呢 步骤1 将properties文件设置为如下形式 serverUrl SERVER URL apiKey API KEY 步骤2 制作成do
  • 如何重启mysql服务?

    Mysql在修改my ini文件后 如修改字符集 需要重启服务才能生效 下面介绍如何重启mysql服务 1 Win R 输入cmd 确定后进入命令窗口 输入命令net stop mysql 停止当前mysql服务 2 如果出现如图所示错误
  • JAVA 获取指定月份的每周的开始日期和结束日期

    1 第一种情况 从1号开始到月份最后一天结束 代码如下 private DateTimeFormatter dateTimeFormatter DateTimeFormatter ofPattern yyyy MM dd public Li
  • Arduino和Python卡尔曼滤波对四元数进行姿态测定

    在本文中 我将演示使用EKF 扩展卡尔曼滤波 对四元数确定姿态的实现 并说明将多个传感器数据融合在一起以使系统正常工作的必要性 将要使用的传感器是陀螺仪 加速度计和磁力计 Arduino用于从传感器读取数据 但是数据处理将在python中完
  • 移动端开发框架

    总体概述 现在比较流行的移动APP开发框架有以下六种 网页 混合 渐进 原生 桥接 自绘 前三种体验与Web的体验相似 后三种与原生APP的体验相似 这六种框架形式 都有自己适用的范围 无所谓好坏 适用就是好 网页应用适用于传统网站APP化
  • 手写vue(三)模板渲染解析

    一 目标 创建一个Vue实例时 我们可以传入el配置项 去指定一个DOM元素作为Vue容器 而这个Vue容器中 可以使用例如插值表达式等Vue框架提供的语法 并且能够渲染到浏览器页面上 而浏览器并不能解析这些Vue语法 因此 Vue框架是通
  • python: How to Create a Python Package

    StudentScoreInfo py 学生成绩类 date 2023 06 16 edit Geovin Du geovindu 涂聚文 ide PyCharm 2023 1 python 11 import datetime impor
  • GAN生成手写数字实例讲解Colab使用教程

    Colab 全称Colaboratory 是谷歌提供的一个在线工作平台 可以与谷歌云盘协作使用 我们可以在Colab平台上运行代码 而且大部分常用的包都已经安装好 不需要再进行安装 也不需要进行环境配置 非常方便快捷 对于初学者来说非常友好
  • 颠覆传统逻辑的C程序

    1 在main之前运行的C代码 before main c include
  • k8s 部署spring cloud项目

    微服务架构是一项在云中部署应用和服务的新技术 大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务 而红帽说API应该是重点 微服务可以在 自己的程序 中运行 并通过 轻量级设备与HTTP型API进行沟通 关键在于该服务可以在
  • LouvainMethod分布式运行的升级之路

    1 背景介绍 Louvain是大规模图谱的谱聚类算法 引入模块度的概念分二阶段进行聚类 直到收敛为止 分布式的代码可以在如下网址进行下载 GitHub Sotera spark distributed louvain modularity
  • Windows下SpringBoot连接Redis的正确使用姿势

    1 安装Redis 1 1通过wsl安装redis 参考官方安装文档 需要在wsl2上安装redis服务 注意我们启动redis的方式 First way 采用官方文档的方式 sudo service redis server start