Reids 的整合使用
大家好 , 我是苏麟 , 今天带来强大的Redis .
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
官方网站 : 雷迪斯 (redis.io)

好用的可视化工具 : Quickredis
下载地址 : QuickRedis 发行版 - Gitee.com

好用的可视化工具 : RedisDesktopManager
官方网站 : https://redisdesktop.com/download

开始使用 :
引入依赖
<!--springbot 整合 redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
序列化
/*** 序列化 让JDK原生序列化转成JSON*/
@Configuration
public class RedisConfig {@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> objectObjectRedisTemplate = new RedisTemplate<>();objectObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);//设置KEY 序列化使用 String 字符串objectObjectRedisTemplate.setKeySerializer(RedisSerializer.string());objectObjectRedisTemplate.setHashKeySerializer(RedisSerializer.string());GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//设置Value 序列化 格式objectObjectRedisTemplate.setValueSerializer(jsonRedisSerializer);objectObjectRedisTemplate.setHashValueSerializer(jsonRedisSerializer);return objectObjectRedisTemplate;}
}
操作
/*** 目标 : 在JAVA中操作redis spring date redis* spring date redis 中提供了一个高度封装了的一个类 RedisTemple 针对jedis客户端api进行了分类封装,将同一种类型封装成Operation接口* ValueOperation : 简单K-V操作* SetOperation : set类型数据操作* ZSetOperation : zset类型数据操作* HashOperation : Hash类型数据操作* ListOperation : List类型数据操作*/@SpringBootTest
class ItslRedisApplicationTests {@AutowiredRedisTemplate redisTemplate;/*** 目标 : 对5中不同类型数据进行操作* opsForValue* opsForHash* opsForList* opsForSet* opsForZSet*//*** 操作String类型数据*/@Testvoid testString() {//set操作redisTemplate.opsForValue().set("sl", "sl");//get操作System.out.println(redisTemplate.opsForValue().get("sl"));//setex操作 命令为指定的 key 设置值及其过期时间。//如果 key 已经存在, SETEX 命令将会替换旧的值。redisTemplate.opsForValue().set("ty", "sl", 100, TimeUnit.SECONDS);//setnx操作 命令在指定的 key 不存在时,为 key 设置指定的值。Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("ty", "ty");System.out.println(aBoolean);}/*** 目标 : 操作Hash数据类型*/@Testvoid testHash() {HashOperations hashOperations = redisTemplate.opsForHash();//存值hashOperations.put("002", "name", "sl");hashOperations.put("002", "age", 20);//取值System.out.println(hashOperations.get("002", "age"));System.out.println(hashOperations.get("002", "name"));//获得hash结构中的所有字段Set keys = hashOperations.keys("002");for (Object key : keys) {System.out.println(key);}//获得hash结构中的所有值List values = hashOperations.values("002");for (Object value : values) {System.out.println(value);}}/*** 目标 : 操作List数据类型*/@Testvoid testList() {ListOperations listOperations = redisTemplate.opsForList();//存值listOperations.leftPush("ykList", "a");listOperations.leftPushAll("ykList", "s", "b", "s", "t");//取值List ykList = listOperations.range("ykList", 0, -1);for (Object o : ykList) {System.out.println(o);}//获取长度int size = ykList.size();for (int i = 0; i < size; i++) {//出队Object ykList1 = listOperations.rightPop("ykList");System.out.println("出队的是 : " + ykList1);}}/*** 目标 : 操作Set数据类型*/@Testvoid testSet() {SetOperations setOperations = redisTemplate.opsForSet();//存值setOperations.add("ty", "a", "b", "v", "b");//取值Set ty = setOperations.members("ty");for (Object o : ty) {System.out.println("删除前 : " + o);}//删除成员setOperations.remove("ty", "a");//取值Set tys = setOperations.members("ty");for (Object o : tys) {System.out.println("删除后 : " + o);}}/*** 目标 : 操作ZSet数据类型*/@Testvoid testZSet() {ZSetOperations zSetOperations = redisTemplate.opsForZSet();//存值zSetOperations.add("myZset", "a", 10.1);zSetOperations.add("myZset", "b", 11.1);zSetOperations.add("myZset", "c", 12.1);zSetOperations.add("myZset", "d", 13.1);//取值Set myZset = zSetOperations.range("myZset", 0, -1);for (Object o : myZset) {System.out.println("删除前 : " + o);}//修改分数zSetOperations.incrementScore("myZset", "d", 25.4);//删除成员zSetOperations.remove("myZset", "a", "b");//取值Set myZsets = zSetOperations.range("myZset", 0, -1);for (Object os : myZsets) {System.out.println("删除后 : " + os);}}/*** 目标 : 通用操作*/@Testvoid testCommon() {//获取Redis中所有的keySet<String> keys = redisTemplate.keys("*");for (String key : keys) {System.out.println(key);}//判断某个key是否存在Boolean itcast = redisTemplate.hasKey("key");System.out.println(itcast);//删除指定keyredisTemplate.delete("key");//获取指定key对应的value的数据类型DataType dataType = redisTemplate.type("001");System.out.println(dataType.name());}
}
使用小技巧 :
登录态自动存储Redis中
开发中一个小用处 在分布式登录的时候用Seesion保存登录态 实现共享存储
第一步 :
引入依赖
<!--spring-session 整合 redis --><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>
第二步 :
在yml中配置
spring:session:#存储时间 86400 二个月timeout: 86400#自动存储到reidsstore-type: redis
这样就完成自动存储到Redis中!
这期就到这里下期再见 !
拜拜!
相关文章:
Reids 的整合使用
大家好 , 我是苏麟 , 今天带来强大的Redis . REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选…...
Vue3 —— watchEffect 高级侦听器
该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>,且包含 typescript 的基础用法 前言 Vue3 中新增了一种特殊的监听器 watchEffect,它的类型是: function watchEffect(effect: (onCleanup: OnCleanup) > void,o…...
Java异步子线程读取主线程参数的若干好玩场景
在开发过程中,我们难免会因为性能、实时响应等,需要异步处理的一些事务,并且在子线程中有时我们还需要获取主线程相关的参数。下面有若干方案可以实现上述场景,但会出现一定的问题。 场景1-基础场景 在主线程中开启子线程&#x…...
Android 视频开发
在 Android 平台上进行视频开发,您需要掌握以下关键知识点,以确保能够成功地开发和调试视频应用程序: Android视频架构: 了解 Android 的视频系统架构,包括视频捕获、编码、解码、渲染和显示等。 视频格式和编解码&am…...
【计算机网络篇】UDP协议
✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! UDP协议 1,UDP 简介 UDP(User Datagram Protocol)是一种无连…...
LeetCode 2682. 找出转圈游戏输家
【LetMeFly】2682.找出转圈游戏输家 力扣题目链接:https://leetcode.cn/problems/find-the-losers-of-the-circular-game/ n 个朋友在玩游戏。这些朋友坐成一个圈,按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i …...
数据结构单链表
单链表 1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 在我们开始讲链表之前,我们是写了顺序表,顺序表就是类似一个数组的东西࿰…...
自定义WEB框架结合Jenkins实现全自动测试
自定义WEB框架结合Jenkins实现全自动测试 allure生成 allure生成 1.allure–纯命令运行 -固定的–稍微记住对应的单词即可。2 安装,2个步骤: 1.下载allure包,然后配置环境变量。 https://github.com/allure-framework/allure2/releases/tag/2.22.4 2.在…...
PHP加密与安全的最佳实践
PHP加密与安全的最佳实践 概述 在当今信息时代,数据安全是非常重要的。对于开发人员而言,掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言,提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…...
SQL Server数据库无法连接
问题如下: 原因:sql server服务器未开启 解决方法:以管理员身份打开cmd,输入:net start mssqlserver。...
videojs 播放视频
背景:在项目中使用第三方插件videojs进行播放视频,点击事件更改播放的数据源。 一、视频相关理论 (一)、背景 网络流媒体的呈现形式分为两种:直播点播 (二)、流媒体的3种协议 分类:HTTPHLSRTMP定义:基于HTTP的流媒体…...
vue强制刷新变量
在前端开发中,我们经常需要变量的值实时响应到界面上。Vue就是一个非常强大的前端框架,它的数据绑定能够非常好地实现变量与界面的同步更新。但是有时候,我们需要强制刷新某个变量的值,以便界面能及时地反映出它的变化。本文将介绍…...
[QCA6174]QCA6174 5G WiFi DFS处理逻辑分析及雷达误检率高优化规避
DFS认证信息 WIFI DFS测试要求 Master设备需要测试的项目 4.6.2.1 Channel Availability Check 信道可用性检查 定义其作为雷达脉冲检测机制,当雷达脉冲出现时所占用的信道需要能被设备检测到已经被占用。当相关信道未被占用时,这些信道被称为Avaliable Channel可用信道 …...
预防SQL漏洞注入和规避网络攻击
前言: 虽然近些年SQL注入已经被各类的安全开发框架规避了绝大部分,但SQL注入作为一种最原始的攻击手段之一,破坏力仍然十分强大,因为它直捣黄龙数据中心。所以未雨绸缪,各位不可不重视。 预防SQL注入方法措施: 服务器…...
《Go 语言第一课》课程学习笔记(一)
配好环境:选择一种最适合你的 Go 安装方法 选择 Go 版本 一般情况下,建议采用最新版本。因为 Go 团队发布的 Go 语言稳定版本的平均质量一直是很高的,少有影响使用的重大 bug。可以根据不同实际项目需要或开源社区的情况使用不同的版本。 有…...
网络安全 Day29-运维安全项目-iptables防火墙
iptables防火墙 1. 防火墙概述2. 防火墙2.1 防火墙种类及使用说明2.2 必须熟悉的名词2.3 iptables 执行过程※※※※※2.4 表与链※※※※※2.4.1 简介2.4.2 每个表说明2.4.2.1 filter表 :star::star::star::star::star:2.4.2.2 nat表 2.5 环境准备及命令2.6 案例01:…...
SQL 复习 03
函数与关键字 用法说明round(x, n)四舍五入,x为浮点数,n为保留的位数ceil(x)向上取整floor(x)向下取整truncate(x, n)截断x,n为保留的位,该位之后的数值置零,位数表示示例:321.123,其中小数点前…...
出现 sudo: docker: command not found 的解决方法
目录 1. 问题所示2. 原理分析3. 解决方法3.1 未成功安装引起3.2 环境变量引起1. 问题所示 安装了docker,但是执行docker命令的时候,提示该问题: ubuntu@10-41-104-1:~$ sudo docker ps -a sudo: docker: command not foundubuntu@10-41-104-1:~$ sudo apt-get install doc…...
FastApi-1-结合sql 增/查demo
目录 FastAPI学习记录项目结构部分接口/代码展示感受全部代码 FastAPI学习记录 fastapi已经学习有一段时间,今天抽时间简单整理下。 官网介绍: FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Py…...
Spring学习笔记3
使用注解开发: Component 组件开发相当于 Value(“xxx”)可以对属性进行赋值 package pojo;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; //等价于<bean id"user" class"po…...
如何快速上手Archivy:5分钟搭建个人知识管理系统
如何快速上手Archivy:5分钟搭建个人知识管理系统 【免费下载链接】archivy Archivy is a self-hostable knowledge repository that allows you to learn and retain information in your own personal and extensible wiki. 项目地址: https://gitcode.com/gh_mi…...
从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比
从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比 神经科学研究中,脑网络连通性分析正成为理解认知功能与疾病机制的重要工具。其中,相位滞后指数(PLI)及其加权版本(wPLI)因…...
智能配置黑苹果:三步快速部署OpenCore自动化工具终极指南
智能配置黑苹果:三步快速部署OpenCore自动化工具终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果复杂的EFI配置而头疼…...
【AI 智能体时代的软件工程】12 信任工程:建立 AI 时代的“三维材料清单 (BOM)”
大家好,我是Tony Bai。欢迎来到微专栏 《AI 智能体时代的软件工程》的第十二讲。在前面的课程中,我们从单体智能体的“任务简报(Mission Brief)”,一路讲到了多智能体协同的“自动化流水线”,并在上一讲为你…...
从电赛真题到产品原型:深入解析单相全桥逆变三种SPWM调制策略(含效率与波形对比)
单相全桥逆变SPWM调制策略实战:从电赛到工业应用的深度解析 在电力电子领域,逆变技术作为直流-交流转换的核心环节,其性能优劣直接影响着整个系统的效率与可靠性。单相全桥逆变器凭借其结构简单、控制灵活的特点,成为电子设计竞赛…...
颗粒结构:基础但容易被忽视
在COMSOL中二氧化碳电化学还原过程中不同催化剂结构对离子传输的影响的模拟分析搞电化学的小伙伴们都知道,催化剂长得像撒了把芝麻似的颗粒结构最省事。但在COMSOL里建模时千万别直接右键画球体——试试这个骚操作:model.geom("geom1").featur…...
RGD-PEG-NH₂在肿瘤靶向治疗中的应用:从原理到临床
RGD-PEG-NH₂在肿瘤靶向治疗中的应用:从原理到临床来源:冰合试剂(ID:bhshiji)一、引言:肿瘤靶向的"黄金钥匙扣"在肿瘤靶向治疗领域,RGD肽是一个"明星"般的存在。这个仅由三…...
Vue+SpringBoot全栈项目搭建:手把手教你实现一个带分页和Swagger的CRUD应用
VueSpringBoot全栈开发实战:从零构建企业级CRUD应用 1. 全栈技术选型与项目初始化 在当今快速迭代的互联网开发领域,前后端分离架构已成为主流选择。Vue.js作为渐进式前端框架,以其轻量级和响应式数据绑定特性,成为构建用户界面…...
什么是SSE 流式推送
SSE 流式推送(Server-Sent Events,服务器发送事件),是一种基于 HTTP 协议、服务器主动向客户端单向推送实时数据流的 Web 技术(HTML5 标准)。 一、一句话理解 客户端(浏览器)用 Even…...
掌握Agentic RAG:动态智能代理,提升大模型学习与实战效率,CSDN小白程序员必收藏!
掌握Agentic RAG:动态智能代理,提升大模型学习与实战效率,CSDN小白程序员必收藏! Agentic RAG技术通过引入自主AI代理,解决了传统RAG系统依赖静态数据的局限性,实现实时检索最新数据,灵活调整策…...
