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中的数据类型是非常的相似的,并且对于其操作也是极其的相似,所以在理解和进行操作上是没有什么问题的。

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

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

相关文章

[Linux]:进程间通信(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. system V通信 前面我们所探究的通信方式都是基于管道文件的&#xff0c;而…

深入解析代理模式:静态代理、JDK 动态代理和 CGLIB 的全方位对比!

代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了对象的替身&#xff0c;即代理对象来控制对实际对象的访问。通过代理对象&#xff0c;可以在不修改目标对象的情况下&#xff0c;扩展或控制其功能。例如&#xff0c;代理模式可以用于延…

Cortex-A7的GIC(通用中断控制器):边沿触发和电平触发中断的区别

0 资料 ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification1 边沿触发和电平触发中断的区别 1.1 边沿触发和电平触发中断官方解释 边沿触发&#xff08;Edge-triggered&#xff09; This is an interrupt that is asserted on detectio…

DFS:深搜+回溯+剪枝实战解决OJ问题

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 排列、子集问题 1.1 全排列I 1.2 子集I 1.3 找出所有子集的异或总和 1.4 全排列II 1.5 字母大小写全排列 1.6 优美的排列 二 组合问题 2.1 电话号码的数字组合 …

物联网架构

1 三层架构 三层架构就像我们拿着一个设备&#xff0c;通过网络直接连接到服务器获取结果&#xff0c;步骤简单。 举个例子&#xff1a;智能家居的温度监控系统 1. 感知层&#xff08;设备与传感器&#xff09; 在智能家居系统中&#xff0c;温度传感器被安装在家里的各个房间…

战斗机检测系统源码分享

战斗机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

4.提升客户服务体验:ChatGPT在客服中的应用(4/10)

本文大纲旨在指导撰写一篇全面探讨ChatGPT如何通过优化客户服务流程、提供实际应用案例和用户反馈&#xff0c;以提升客户服务体验的深入博客文章。 引言 在当今竞争激烈的商业环境中&#xff0c;客户服务已成为企业成功的关键因素。优质的客户服务不仅能够增强客户满意度和忠…

第十一章 【后端】商品分类管理微服务(11.1)——创建父工程

第十一章 【后端】商品分类管理微服务 11.1 创建父工程 项目名称:EasyTradeManagerSystem:Easy 表示简单易用,Trade 表示交易,Manager 表示管理,System 表示系统,强调系统在商品交易管理方面的便捷性,简称 etms。 新建工程 yumi-etms yumi-etms 作为所有模块的父工程,…

1.使用 IDEA 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 IDEA 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&…

QT + WebAssembly + Vue环境搭建

Qt6.7.2安装工具 emsdk安装 git clone https://github.com/emscripten-core/emsdk.git cd emsdk emsdk install 3.1.50 emsdk activate 3.1.50 Qt Creator配置emsdk 效果 参考 GitHub - BrockReece/vue-wasm: Vue web assembly loader Emscripten cmake多版本编译-CSDN博客 …

vue使用TreeSelect设置带所有父级节点的回显

Element Plus的el-tree-select组件 思路&#xff1a; 选中节点时&#xff0c;给选中的节点赋值 pathLabel&#xff0c;pathLabel 为函数生成的节点名字拼接&#xff0c;数据源中不包含。 在el-tree-select组件中设置 props“{ label: ‘pathLabel’ }” 控制选中时input框中回…

如何使用ssm实现企业人事管理系统+vue

TOC ssm628企业人事管理系统vue 研究背景 自计算机发展以来给人们的生活带来了改变。第一代计算机为1946年美国设计&#xff0c;最开始用于复杂的科学计算&#xff0c;占地面积、开机时间要求都非常高&#xff0c;经过数十几的改变计算机技术才发展到今天。现如今已是电子时…

Holynix: v1

确认物理地址 00:0C:29:BC:05:DE ip扫描 arp-scan -l 端口扫描 nmap 192.168.48.167 访问一下80端口 burp抓包 找到一个登录框 想着burp抓包试试 将抓到的包放入kali中的文件中使用sqlmap注入试试 sqlmap 存在sql注入 sqlmap -r password --batch --random-agent 发现…

卷积神经网络经典模型架构简介

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;宋立林)【摘要 书评 试读】- 京东图书 (jd.com) ImageNet是一个包含超过1 500万幅手工标记的高分辨率图像的数据…

CAS 和 synchronized 的优化过程

&#x1f349; 目录 CAS 的实现 CAS 的工作原理 优化过程 CAS 的应用 1) 实现原子类 2&#xff09;实现自旋锁 CAS 的 ABA 问题 synchronized 的 原理 synchronized 基本特点 加锁工作过程 其他优化操作 1. 锁消除 2. 锁粗化 CAS&#xff08;Compare-And-Swap&…

2024ICPC网络赛第一场

A 最终答案与中国队能力值的排名有关&#xff0c;具体每个情况手推一下&#xff0c;用 if else 即可通过。 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(0);int t, a[40];cin >> t;while (t--) {int num 0;f…

Arduino IDE离线配置第三方库文件-ESP32开发板

简洁版可以使用uget等&#xff0c;将文件下载到对应文件夹下&#xff0c;然后安装。 esp32之arduino配置下载提速 录屏 Arduino IDE离线配置第三方库文件ESP32 资源 Linux https://download.csdn.net/download/ZhangRelay/89749063 第三方开发板 非默认支持的开发板 linu…

Ubuntu24.04部署docker

1、更新软件 apt update 2、安装curl apt install apt-transport-https curl 3、导入阿里云GPG秘钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 4、添加Docker阿里云仓库到Ubuntu 24.04的…

Python编码系列—Python适配器模式:无缝集成的桥梁

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

LLM - 理解 多模态大语言模型 (MLLM) 的指令微调与相关技术 (四)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142063880 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…