当前位置: 首页 > 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汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...