当前位置: 首页 > news >正文

Redis常用操作及springboot整合redis

1. Redis和Mysql的区别

  • 数据模型:二者都是数据库,但是不同的是mysql是进行存储到磁盘当中,而Redis是进行存储到内存中.

  • 数据模型 : mysql的存储的形式是二维表而Redis是通过key-value键值对的形式进行存储数据.

  • 实际的应用的场景: Redis适合于需要快速读写的场景,如缓存、会话存储、计数器等,也适合于需要实时处理大量数据的应用,MySQL适合于需要进行复杂查询和事务处理的场景.

2. 连接Redis

  • 打开redis服务
  redis-server.exe redis.windows.conf,通过配置redis的配置文件进行启动redis服务
  • 启动redis客户端
redis-cli -h 地址 -p 端口号
// 例如 redis-cli -h localhost -p 6379
// redis-cli 默认进行连接本地的redis
  • 修改redis.windows.conf文件进行设置redis连接密码
requirepass 密码   // 通过修改requirepass 后面的fobared进行设置密码

3. Redisds常用数据类型

3.1 字符串

常用操作命令

-- =================字符串常用操作==========
-- 插入一条数据 set 键名 值
set name zhangshan
​
-- 获取指定键的值 结果: zhangshan
get name
​
-- 指定键值对的同时指定过期的时间 10s
-- 写法一
set name1 zhangshan ex 30
-- 写法二 set key time value
setex name2 10 zhangshan
​
-- 当某个key不存在的时间,进行设置值
setnx name3 zhangshan

字符串操作的时候,当默认对于key的值进行设置都是更新的操作.当使用setnx进行设置其值的时候,会进行判断这个key时候存在

3.2 哈希

Redis中hash是一个string类型的field和value的映射表.哈希适合进行存储对象类型的数据

key-value对应关系图: 这个类型图类似于是一个,对象进行存储数据的格式格式,key对应对象的名字,field对应属性,value为值.

hash常用操作

-- ==================hash类型相关操作============
-- 创建一个hash存储对象 对象名字为 student 其名字为张三
hset student name 张三
hset student age 18
​
-- 获取hash对象指定字段的值 结果: 张三
hget student name
​
-- 删除hash对象指定字段的值
hdel student age
​
-- 获取hash对象中所有的属性
hkeys student
​
-- 获取hash对象中指定字段的数量
hlen student
​
-- 获取hash对象表中所有字段和值
hgetall student

3.3 列表

Redisz中简单的字符串列表,按照插入的顺序进行排列。 key对应的列表的名字,value为这个列表。

-- ===============列表================
-- 插入 1 到 numList 中
lpush numList 1
-- 插入 2 3 到 numList 中
lpush numList 2 3
​
-- 获取 numList 的指定范围的值 0 -1 表示获取所有的值
-- lrange key start stop
lrange numList 0 -1
​
-- 删除列表中的最后一个元素
lpop numList
​
-- 查看列表中元素的个数
llen numList

3.4 集合

Redis中的集合Set是String类型的集合,并且其集合的成员是唯一的,无序的,不可重复。

-- ================集合================
-- 添加元素到 集合num 中
sadd num 1 2 3
​
-- 获取集合中的所有的成员 1 2 3
smembers num
​
-- 查询集合中的元素个数
scard num
​
-- 进行计算给定集合的交集
sadd num1 1 2 3 4 5
-- 结果 1 2 3
sinter num num1
​
-- 计算集合的并集 1 2 3 4 5
sunion num num1
​
-- 删除集合中的元素
srem num 1

3.5 有序集合

Redis中的有序集合也是String类型的集合,同样不允许有重复成员,不同的是每个元素都会关联double类型的分数.

数据结构类型示意图:
在这里插入图片描述
常用的操作命令

-- ============有序集合=====================
-- 添加元素到 有序集合num 中 zadd num sroce 字段名 [score 字段名]
zadd zset 1.0 a 2.0 b
​
-- 查询有序集合的成员 withscores 表示返回的元素包含分数
zrange zset 0 -1 withscores
​
-- 为某个元素增加分数 给a 增加 1.0分
zincrby zset 1 a
​
-- 删除有序集合中的元素 a
zrem zset a

4. Redis通用命令

-- ====================通用命令===============
-- keys pattern(匹配模式) keys * 表示获取所有的key
-- 进行获取num开头的key num*
keys num*
​
-- 判断某个key是否存在
exists name
​
-- 获取某个key的类型
type numList
​
-- 删除某个key
del name3

5. springboot整合Redis

5.1 引入依赖

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

5.2 在yml配置文件中进行配置Redis数据源

spring:redis:host: localhost # redis服务器地址port: 6379 # redis服务器端口password: 123456 # redis服务器密码database: 0 # redis数据库索引(默认为0)

5.3 编写Redis配置类

@Configuration
public class RedisConfig {
​/*** 配置redis模版* @param connectionFactory* @return*/@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){// 创建redis模版RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(connectionFactory);// 设置key的序列化器是为了房子key乱码redisTemplate.setKeySerializer(new StringRedisSerializer()); // 字符串序列化器// 设置value的序列化器 为了解决value乱码redisTemplate.setValueSerializer(new StringRedisSerializer());// 设置hash的value的序列化器 解决hash值乱码redisTemplate.setHashValueSerializer(new StringRedisSerializer());// 设置hash的对象中的key的序列化器 解决hash的key乱码redisTemplate.setHashKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

上述配置类进行配置序列化器的目的是为了防止进行使用默认的序列化器,导致key和value乱码.

5.4 通过RedisTmplate对象操作Redis

// 测试类在test中的层级位置,必须要和main一致。
@SpringBootTest
public class SpringDateRedisTest {@Autowiredprivate RedisTemplate redisTemplate;
​/*** 通过RedisTemplate操作redis中的字符串数据类型*/@Testpublic void testString(){// set 插入数据redisTemplate.opsForValue().set("city","浙江");// get 获取数据String city = (String) redisTemplate.opsForValue().get("city");// 插入数据的同时设置有效期 TimeUnit.MINUTE为单位 分redisTemplate.opsForValue().set("city","杭州",3, TimeUnit.MINUTES);// 只能插入不存在的key 注意值只能输入字符串类型redisTemplate.opsForValue().setIfAbsent("num","1"); // trueredisTemplate.opsForValue().setIfAbsent("num","2"); // false}
​/*** 操作redis中的Hash数据类型*/@Testpublic void testHash(){// hset hget hdel hkeys hvals// 获取到hash数据类型操作器对象HashOperations hash = redisTemplate.opsForHash();// 对象名 属性名 属性值hash.put("user","name","张三");hash.put("user","age","18");// 获取user对象的指定属性的值String name = (String) hash.get("user","name");System.out.println(name); // 张三
​// 获取user对象的所有属性Object[] keys = hash.keys("user").toArray();Arrays.stream(keys).forEach(System.out::println);
​// 删除user对象的指定属性hash.delete("user","age");
​}
​/*** 列表类型*/@Testpublic void testList(){// lpush rpush lpopListOperations list = redisTemplate.opsForList();// 插入数据list.leftPushAll("list","1","2","3");// 获取数据List list1 = list.range("list", 0, -1);// 获取列表长度long size = list.size("list");}
​/*** 集合数据类型*/@Testpublic void testSet(){// sadd smembers sremSetOperations set = redisTemplate.opsForSet();// 插入数据set.add("set","1","2","3");set.add("set1","1","4","5","6");// 获取集合中所有的元素set.members("set");// 请集合的交集Set intersect = set.intersect("set", "set1");// 求集合的并集Set union = set.union("set", "set1");}
​/*** 有序集合数据类型*/@Testpublic void testZSet(){// zadd zrange zremrangeByRankZSetOperations zSet = redisTemplate.opsForZSet();// 插入数据zSet.add("zset","1",1);zSet.add("zset","2",2);// 获取集合中所有的元素Set zset = zSet.range("zset", 0, -1);// 为集合中的某个元素加上指定的分数zSet.incrementScore("zset","2",1);}
}

学习日结

今天学习了redis的基本操作,通过今天的学习,对于redis的基本的环境的配置,和对于数据库的操作和使用已经可以掌握了,因为rdis这个数据类型,其实是和java中的数据类型是非常的相似的,并且对于其操作也是极其的相似,所以在理解和进行操作上是没有什么问题的。

相关文章:

Redis常用操作及springboot整合redis

1. Redis和Mysql的区别 数据模型&#xff1a;二者都是数据库,但是不同的是mysql是进行存储到磁盘当中,而Redis是进行存储到内存中. 数据模型 : mysql的存储的形式是二维表而Redis是通过key-value键值对的形式进行存储数据. 实际的应用的场景: Redis适合于需要快速读写的场景&…...

动态规划day34|背包理论基础(1)(2)、46.携带研究材料(纯粹的01背包)、416. 分割等和子集(01背包的应用)

动态规划day34|背包理论基础&#xff08;1&#xff09;&#xff08;2&#xff09;、46.携带研究材料、416. 分割等和子集 背包理论基础&#xff08;1&#xff09;——二维背包理论基础&#xff08;2&#xff09;——一维46.携带研究材料(卡码网 01背包)1. 二维背包2. 一维背包 …...

pytorch优化器

在反向传播计算完所有参数的梯度后&#xff0c;还需要使用优化方法更新网络的权重和参数。例如&#xff0c;随机梯度下降法&#xff08;SGD&#xff09;的更新策略如下&#xff1a; weight weight - learning_rate * gradient 手动实现如下&#xff1a; learning_rate 0.01 …...

必备工具,AI生成证件照,再也不用麻烦他人,电子驾驶证等多种证件照一键生成

最近有一个生成证件照的开源项目很火&#xff0c;今天我们来学习一下。之前我生成证件照都是线下去拍照&#xff0c;线上使用也是各种限制&#xff0c;需要付费或看广告&#xff0c;而且效果也不是很理想&#xff0c; 今天要分享的这个 AI 证件照生成工具可以一键可以生成一寸…...

深度解析 MintRich 独特的价格曲线机制玩法

随着 Meme 币赛道的迅速崛起&#xff0c;NFT 市场也迎来了新的变革。作为一个创新的 NFT 发行平台&#xff0c;Mint.Rich 正掀起一场全民参与的 NFT 热潮。其简易的操作界面和独特的价格曲线设计&#xff0c;让任何人都能以极低的门槛发行和交易自己的 NFT&#xff0c;从而参与…...

实时数仓3.0DWD层

实时数仓3.0DWD层 DWD层设计要点&#xff1a;9.1 流量域未经加工的事务事实表9.1.1 主要任务9.1.2 思路9.1.3 图解9.1.4 代码 9.2 流量域独立访客事务事实表9.2.1 主要任务9.2.2 思路分析9.2.3 图解9.2.4 代码 9.3 流量域用户跳出事务事实表9.3.1 主要任务9.3.2 思路分析9.3.3 …...

路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于A*算法的往返式全覆盖路径规划的改进算法 matlab实现代码 往返式全覆盖路径规划&#xff0c;通过建立二维栅格地图&#xff0c;设置障碍物&#xff0c;以及起始点根据定义往返式路径规划的定义的优先级运动规则从…...

QT 串口上位机读卡显示

目录 一. QT创建工程 二. 软件更换图标 三. QT打包 一. QT创建工程 文件新建&#xff0c;选择创建一个桌面QT。 重命名RFID,并选择工程保存路径 RFID.pro QT core gui serialport #串行串口greaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET RFID TE…...

Chrome谷歌浏览器登录账号next无反应

文章目录 问题描述 我们的Chrome浏览器在更新之后&#xff0c;会出现登录谷歌账号的时候&#xff0c;当你输入你的谷歌邮箱之后&#xff0c;点击 n e x t next next,也就是下一步的时候&#xff0c;页面没有反应&#xff0c;也就是没有跳转到输入密码的页面。 分析 根据logs里…...

Android相关线程基础

线程基础 进程与线程 进程:可以被看做是程序的实体, 是系统进行资源分配和调度的基本单位. 线程:是操作系统调度的最小单元, 也叫轻量级进程 使用多线程的优点 可以减少程序的响应时间。如果某个操作很耗时, 能够避免陷入长时间的等待, 从而有着更好的交互性. 线程较之进…...

uniapp 如何自定义导航栏并自适应机型

如今的移动设备有各种不同的屏幕形状&#xff0c;如刘海屏、水滴屏等。这些异形屏会影响页面的布局&#xff0c;尤其是导航栏和底部栏的显示。通过获取安全区域信息&#xff0c;可以确保页面内容不会被异形屏的特殊区域遮挡。 在设计页面顶部导航栏时&#xff0c;可以根据 saf…...

Java高级Day43-类加载

117.类加载 静态和动态加载 反射机制是java实现动态语言的关键&#xff0c;也就是通过反射实现类动态加载 静态加载&#xff1a;编译时加载相关的类&#xff0c;如果没有则报错&#xff0c;依赖性太强 动态加载&#xff1a;运行时加载需要的类&#xff0c;如果运行时不用该类…...

【LeetCode 算法笔记】155. 最小栈

目录 问题描述单个栈实现双栈实现不开辟额外空间 问题描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop()…...

面试题 05.01. 插入

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。…...

稠密向量检索、稀疏向量检索、BM25检索三者对比

在当今的信息检索领域&#xff0c;随着人工智能和自然语言处理技术的发展&#xff0c;稠密向量检索和稀疏向量检索成为了两种主要的研究方向。稠密向量检索依托于高维空间中的向量表示&#xff0c;能够捕捉文档的深层语义信息&#xff0c;而稀疏向量检索则侧重于关键词的匹配&a…...

UEFI学习笔记(六):EDK II 模块:Libraries,DriversApplication

UEFI学习笔记&#xff08;六&#xff09;&#xff1a;EDK II Modules&#xff1a;Libraries&#xff0c;Application&Drivers 一、模块&#xff08;Modules&#xff09;的概念1、Library模块2、Application模块3、Driver模块4、Application和Driver的区别 二、EDK II 实现U…...

详解 Pandas 的透视表函数

Pandas 的透视表函数主要为 pivot() 和 pivot_table()&#xff0c;主要的功能为对 DataFrame 的行和列进行重新组合来重塑数据。 一、pivot 函数 pivot 函数只能对数据进行重塑&#xff0c;不能进行聚合 1. 数据准备 import pandas as pddf1 pd.DataFrame({department_id: […...

基于python+django+vue的农业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…...

动态内存管理之malloc,free,calloc和realloc函数

Hello&#xff0c;各位小伙伴们&#xff0c;小编在这里祝福各位中秋佳节快乐呀&#xff0c;今天让我们来学习一下动态内存管理吧&#xff01; 引言 像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间&#xff0c;或者使用数组来申请一段连续的空间&#xff…...

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...