唤醒手腕 Java 后端 Springboot 结合 Redis 数据库学习笔记(更新中)

news2024/12/26 11:05:16

Redis 基本介绍

Redis Introduction

The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

基本概念:redis 是一个开源的、使用 C 语言编写的、支持网络交互的、可基于内存也可持久化的 Key-Value 数据库(非关系性数据库)。

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis支持丰富的数据类型,支持string,list,sorted set,set,zset,hash等数据结构的存储。
  • 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。
  • 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

redis 数据类型

Redis data types

Overview of data types supported by Redis

Redis is a data structure server. At its core, Redis provides a collection of native data types that help you solve a wide variety of problems, from caching to queuing to event processing. Below is a short description of each data type, with links to broader overviews and command references.

Redis 远程连接配置

默认情况下 Redis 是无法在远程直接进行连接,如果想要强制远程连接需要进行更改配置文件。

配置 bind IP 0.0.0.0

在这里插入图片描述
关闭保护模式 protected-mode no

在这里插入图片描述
服务器放行 端口 6379

在这里插入图片描述
如果是宝塔面板(需要安全放行 6379 端口)

在这里插入图片描述

Springboot Redis

Redis 是我们 Java 开发中,使用频次非常高的一个 nosql 数据库,数据以 key-value 键值对的形式存储在内存中。redis 的常用使用场景,可以做缓存,分布式锁,自增序列等,使用 redis 的方式和我们使用数据库的方式差不多,首先我们要在自己的本机电脑或者服务器上安装一个 redis 的服务器,通过我们的java 客户端在程序中进行集成,然后通过客户端完成对redis的增删改查操作。

SpringBoot 中更常见的方式是集成 spring-data-redis,这是 spring 提供的一个专门用来操作redis的项目,封装了对 redis 的常用操作,里边主要封装了 jedis 和 lettuce 两个客户端。相当于是在他们的基础上加了一层门面。

添加redis所需依赖

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

常规配置如下: 在 application.yml 配置文件中配置 redis 的连接信息

spring:
  redis:
    host: localhost
    port: 6379
    password: root
    database: 0

application.properties

#Redis 服务器主机地址
spring.data.redis.host=127.0.0.1
#Redis 服务器连接端口
spring.data.redis.port=6379
#Redis 服务器连接密码(默认为空)
spring.data.redis.password=123456
#连接池最大连接数(使用负值表示没有限制)
spring.data.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.data.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.data.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.data.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.data.redis.timeout=30000

StringRedisTemplate

RedisTemplate 和 StringRedisTemplate 的区别?

两者的关系是 StringRedisTemplate 继承 RedisTemplate。

在这里插入图片描述

两者的数据是不共通的;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。

SDR默认采用的序列化策略有两种,一种是 String 的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate 默认采用的是 String 的序列化策略,保存的 key 和 value 都是采用此策略序列化保存的。

RedisTemplate 默认采用的是 JDK 的序列化策略,保存的 key 和 value 都是采用此策略序列化保存的。

那么就可以得出一个结论,如果你想使用默认的配置来操作 redis,则如果操作的数据是字节数组,就是用 redistemplate,如果操作的数据是明文,使用stringredistemplate。

当然在项目中真实使用时,一般是自定义 redistemplate 的 bean 实例,来设置具体的序列化策略,说白了就是 redistemplate 通过自定义 bean 可以实现和 stringredistemplate 一样的序列化,使用起来更加灵活。

Springboot web

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

Java Date 类时间格式化

在这里插入图片描述
详细代码:

package com.mslmsxp.redistest.service;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;


@RestController
@Slf4j
public class RedisService {

    @Autowired(required = false)
    private StringRedisTemplate redis;

    @GetMapping("/redis")
    public String GetRedisData() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd hh:ss:mm:SSS");
        String time = simpleDateFormat.format(new Date());
        redis.opsForValue().set("time", time);
        String name = redis.opsForValue().get("time");
        log.info("successfully add");
        return name;
    }
}

在这里插入图片描述

Reactive 反应式

反应式编程(Reactive Programming)对有些人来说可能相对陌生一点。反应式编程是一套完整的编程体系,既有其指导思想,又有相应的框架和库的支持,并且在生产环境中有大量实际的应用。在支持度方面,既有大公司参与实践,也有强大的开源社区的支持。

反应式编程出现的时间并不短,不过在最近的一段时间内,它得到了很大的关注。这主要体现在主流编程平台和框架增强了对它的支持,使它得到了更多的受众,同时也反映了其在开发中的价值。

就 Java 平台来说,几个突出的事件包括:Java 9中把反应式流规范以 java.util.concurrent.Flow 类的方式添加到了标准库中;Spring 5对反应式编程模型提供了内置支持,并增加了新的 WebFlux 模块来支持反应式 Web 应用的开发。在前端开发中,Angular 框架也内置使用了 RxJS。

反应式编程所涵盖的内容很多。本 Chat 作为反应式编程的入门,主要侧重在 Java 平台。与其他编程范式一样,反应式编程要求开发人员改变其固有的思维模式,以不同的角度来看问题。对于熟悉了传统面向对象编程范式的人来说,这样的思想转变可能并不那么容易。

反应式编程在解决某些问题时有其先天的优势。在对应用性能要求很高的今天,反应式编程有更大的用武之地。作为开发人员来说,根据项目的需求和特征,选择最适合的编程模型可以达到事半功倍的效果。这也是本 Chat 的出发点。

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

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

相关文章

没有资源没有人脉,23年跨境电商仍值得入局!

随着经济全球化的不断深入&#xff0c;越来越多人关注到跨境电商行业。作为新兴的贸易业态&#xff0c;跨境电商拥有多边化、交易链条短等传统电商无法比拟的优势&#xff0c;能够有效地推广更多中国优质产品到全球市场上&#xff0c;在促进国家经济发展过程中发挥着举足轻重的…

谷歌推出新优化器Lion:优化算法的符号发现

文章目录谷歌推出新优化器Lion&#xff1a;优化算法的符号发现Lion VS AdamW论文实验1.图像分类2.视觉语言对比学习3.扩散模型4.语言建模和微调5.与其他流行优化器的比较超参数设置小结谷歌推出新优化器Lion&#xff1a;优化算法的符号发现 优化器即优化算法&#xff0c;优化器…

加入蓝精灵协会的快速指南

了解使用蓝精灵协会应用程序所需的所有要点。 什么是蓝精灵协会&#xff1f; 蓝精灵协会是唯一一个由蓝精灵官方品牌支持的 PFP 项目。 我们目前正处于这个交互式项目的第二阶段&#xff0c;重点是通过游戏化的 Web3 体验建立一个大型社区。下面是参与游戏的基本步骤&#xff0…

C++进阶:二叉搜索树

文章目录1 二叉搜索树概念2 二叉搜索树的实现2.1 结点的定义2.2 二叉搜索树的插入2.2 二叉搜索树的查找2.3 二叉搜索树的删除2.4 二叉搜索树的默认成员函数2.4.1 拷贝构造2.4.2 析构函数2.4.3 赋值重载3 二叉搜索树的应用3.1 k模型3.2 kv模型4 二叉搜索树的性能分析1 二叉搜索树…

【字典转模型 Objective-C语言】

一、点按钮,弹出的这个效果,这实际上是个Label, 这实际上是一个Label,点按钮弹出的这个效果, 设置一个Label的背景色、前景色、透明度、等等, 让它加进来,然后通过动画让它隐藏掉, 这就是,这个效果的实现思路, 咱们这个效果,先稍微往后放一放, 这个并不是重点…

匈牙利算法学习笔记

匈牙利算法学习笔记1. 前言1.1 二分图1.2 二分图匹配2. 匈牙利算法(Hungarian Algorithm)2.1 基础概念2.2 实现步骤参考链接&#xff1a;1. 14-4&#xff1a;匈牙利算法 Hungarian Algorithm1. 前言 1.1 二分图 二分图通常针对无向图问题。假设G(V,E)G(V,E)G(V,E)是一个无向图…

Linux搭建gitlab服务器

第一步&#xff1a;切换到root用户 sudo root或者 sudo -i第二步&#xff1a;执行以下命令 yum install curl openssh-server openssh-clients postfix cronie -y​systemctl start postfix.servicechkconfig postfix onlokkit -s http -s ssh第三步&#xff1a;添加Gitlab&…

如何理解 Python 的赋值逻辑

摘要&#xff1a; 如果你学过 C 语言&#xff0c;那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异&#xff1a;好像差不多&#xff0c;但又好像哪里有点不太对劲。 本文比较并解释了这种赋值逻辑上的差异。回答了为什么需要这种赋值逻辑以及如何使用这种赋值逻辑…

Acer新蜂鸟Swift3电脑开机总是蓝屏错误怎么办?

Acer新蜂鸟Swift3电脑开机总是蓝屏错误怎么办&#xff1f;有用户使用的Acer新蜂鸟Swift3电脑一开机的时候&#xff0c;没过几秒电脑桌面就变成了蓝屏的了&#xff0c;通过强制重启之后依然会重复这个问题&#xff0c;那么这个问题要怎么去进行解决了&#xff0c;今天将你怎么重…

Android 反序列化漏洞攻防史话

Java 在历史上出现过许多反序列化的漏洞&#xff0c;但大部分出自 J2EE 的组件。即便是 FastJSON 这种漏洞&#xff0c;似乎也很少看到在 Android 中被实际的触发和利用。本文即为对历史上曾出现过的 Android Java 反序列化漏洞的分析和研究记录。 序列化和反序列化是指将内存数…

k8s-kubectl命令

文章目录一、kubectl 基本命令1、陈述式资源管理方法:2、声明式资源管理办法二、基本信息查看三、项目的生命周期创建kubectl run命令四、金丝雀发布(Canary Release)——陈述式管理方法五、声明式管理方法kubectl create 和 kubectl apply区别一、kubectl 基本命令 1、陈述式…

交叉验证 | 机器学习

1、交叉验证 1.1概念 交叉验证的核心思想&#xff1a;对数据集进行多次划分&#xff0c;对多次评估的结果取平均&#xff0c;从而消除单次划分时数据划分得不平衡而造成的不良影响。因为这种不良影响在小规模数据集上更容易出现&#xff0c;所以交叉验证方法在小规模数据集上更…

Profinet转ModbusTCP网关连接昆仑通态触摸屏配置案例

本案例是模拟将Modbus TCP 设备数据接入到西门子PROFINET 网络中。 使用设备为西门子 S7-1500 型 PLC, Profinet转ModbusTCP网关。MODBUS 从站昆仑通态触摸屏。 配置方法&#xff1a; 打开博图&#xff0c;新建项目并添加站点。 添加1513PLC。 设置好IP并处于联网状态 导入Pr…

【前端】小程序开发入门:安装开发工具、目录结构与项目配置

文章目录前期准备目录结构app.jsonpageswindow其他前期准备 开发小程序要先申请一个对应的AppID&#xff1a;微信小程序 (qq.com) 微信官方小程序开发文档&#xff1a;微信开放文档 (qq.com) 然后安装一个小程序开发工具&#xff1a; 选择稳定版&#xff1a; 安装后打开&…

组合由于继承

目录 前言&#xff1a; 1.什么是继承&#xff1f; 2.继承的劣势、问题&#xff1f; 3.组合相比继承有哪些优势&#xff1f; 4、如何判断该用组合还是继承&#xff1f; 参考资料 前言&#xff1a; 我们在平时日常开发设计的过程中&#xff0c;经常会有人提到一条经典的设…

音视频基础之封装格式与音视频同步

封装格式的概念 封装格式(也叫容器&#xff09;就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中&#xff0c;便于播放软件播放。 一般来说&#xff0c;视频文件的后缀名就是它的封装格式。 封装的格式不一样&#xff0c;后缀名也就不一样。 比如&a…

MMPBSA结合自由能计算原理

MMPBSA结合自由能计算原理 计算结合自由能的方法有很多&#xff0c;例如&#xff0c;热力学积分&#xff08;Thermodynamic Integration&#xff0c;TI&#xff09;、自由能微扰&#xff08;Free Energy Perturbation&#xff0c;FEP&#xff09;、MM/PB(GB)SA、线性相互作用能…

安科瑞消防应急照明和疏散指示系统在城市隧道的应用分析

【摘要】&#xff1a;随着城市的发展&#xff0c;交通量越来越大&#xff0c;交通状况越来越复杂&#xff0c;城市隧道的修建也随之变多。当隧道照明正常时&#xff0c;隧道内路面有足够的照度&#xff0c;隧道中快速行驶的汽车&#xff0c;大部分司机不用打开车灯或只需打开车…

Swift 周报 第二十三期

前言 本期是 Swift 编辑组自主整理周报的第十四期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff0c;欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布&#xff0c;欢迎志同道合的朋友一起加入周报整理。 勇敢是即便知道好结局不会每每降临在…

项目中异常信息的统一处理以及JSR03校验

在项目中&#xff0c;我们经常会对前端传过来的数据判断是否有一些错误&#xff0c;比如&#xff1a;id是否为空&#xff0c;传过来的名称是否合格&#xff0c;如果不符合我们通常会抛出异常&#xff0c;那么小的项目可能每次抛出异常也不是很麻烦&#xff0c;但是对于一个大型…