Redis 的安装 + SpringBoot 集成 Redis
1.安装 Redis
此处的 Redis 安装是针对 Linux 版本的安装, 因为 Redis 官方没有提供 Windows 版本, 只提供了 Linux 版本. 但是我们可以通过Windows 去远程连接 Redis.
1.1 使用 yum 安装 Redis
使用如下命令, 将 Redis 安装到 Linux 服务器:
yum -y install redis
1.2 启动 Redis
使用如下命令, 以后台运行的方式启动 Redis:
redis-server /etc/redis.conf &
/etc/redis.conf 表示使用 Redis 默认的配置文件
& 表示后台运行
做了这两个步骤之后, 就可以在本地远程操控 Redis 了, 不过需要修改配置文件, 1.4 演示.
1.3 操作 Redis
使用如下命令启动 Redis 客户端 :
redis-cli
这个操作就相当于在 Linux 上启动数据库客户端的命令 mysql -uroot 一样.
具体操作演示 >>
1.4 设置远程连接
将 Redis 配置文件下载到本地. 该配置文件为 Linux 下的 /etc/redis.conf.
1. 先 cd 到 Redis 配置文件的路径下.
2. 使用 sz 命令, 将文件下载到本地.
将 redis.conf 中的 "bind 127.0.0.1" 注释掉.
使用 VSCode 将配置文件打开, Ctrl f 搜索 "bind 127.0.0.1" >>
将 redis.conf 中的 :"protected-mode yes" 改为 "protected-mode no".
将修改后的 redis.conf 上传至 Linux 下的 /etc 目录.
1. rm -rf redis.conf -> 删除旧的配置文件
2. 将本地更新的配置文件拖拽到 xshell 中.
使用命令 "redis-cli shutdown" 先关闭 redis 服务, 再使用 "redis-server /etc/redis.conf &" 启动 redis 服务.
2. 安装 Redis 可视化工具
下载链接 : AnotherRedisDesktopManager
安装好了之后, 先把 6379 端口放开 (云服务器里没有值钱的东西) :
打开可视化工具, 新建一个连接.
1. Host 填自己云服务器的外网IP.
2. Port 填写 6379.
当连接建立成功之后, 我们在 redis 默认的数据库中可以看到刚才创建的键值对 username - zhangsan,
也可以在可视化界面操作 Redis 了.
通过命令操作 Redis 的官方文档 : https://redis.io/commands/
3. Redis 的数据类型和使用
Redis 有 5 大基础类型 >>
1. String - 字符串类型
2. Hash - 字典类型
3. List - 列表类型
4. Set - 集合类型
5. ZSet - 有序集合类型
这其中最常用的就是 字符串类型 和 字典类型.
3.1 字符串类型
Redis 中的字符串类型, 也叫作简单动态字符串, 它是以键值对 key-value 的形式进行存储的.
简单使用示例 >>
使用 ex(expires) 参数设置字符串的过期时间>>
set name zhangsan ex 500 # 设置 name 500s 后过期 (删除)
3.2 字典类型
字典类型 (Hash) 又被成为散列类型或者是哈希表类型,它是将一个键值 (key) 和一个特殊的“哈希表”关联起来,这个“哈希表”表包含两列数据:字段和值,它就相当于 Java 中的 Map<String,Map<String,String>> 结构。
具体结构如下 >>
从图中来看, 使用字典类型来存储键值对信息, 就无须手动序列化和反序列化数据了, 所以使用起来更加高效方便.
简单使用示例 >>
3.3 列表类型
列表类型 (List) 是一个使用链表存储的有序结构, 它元素的插入会按照先后顺序存储到链表结构中, 因此它的插入和删除操作的时间复杂度为 O(1), 当它的查询速度为 O(n).
简单的使用示例 >>
列表的典型使用场景有以下两个:
1. 消息队列:列表类型可以使用 rpush 实现先进先出的功能,同时又可以使用 lpop 轻松的弹出(查询并删除)第一个元素,所以列表类型可以用来实现消息队列;
2. 文章列表:对于博客站点来说,当用户和文章都越来越多时,为了加快程序的响应速度,我们可以把用户自己的文章存入到 List 中,因为 List 是有序的结构,所以这样又可以完美的实现分页功能,从而加速了程序的响应速度。
3.4 集合类型
集合类型 (Set) 是一个无序并唯一的键值集合.
集合类型的简单使用 >>
集合类型(Set)和列表类型(List)的区别:
列表可以存储重复元素,集合只能存储非重复元素;
列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的
3.5 有序集合类型
有序集合类型 (Sort Set) 相比于集合类型多了一个排序属性 score (分数 /权重), 也就是说每个有序集合存储的元素对应两个值, 一个是有序结合的元素值 , 一个是排序值 (权重). 并且有序集合存储的元素也是不能重复的, 但排序值可以重复.
存储结构 >>
4. SpringBoot 集成 Redis
4.1 添加 redis 依赖
4.2 配置 redis
以下是 .properties 的配置.
spring.redis.database=1
spring.redis.port=6379
spring.redis.host=43.139.1.94
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms
4.3 操作 redis
4.3.1 将字符串存储在 redis 中
@RestController
public class MyRedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;// 在 redis 中存储数据@RequestMapping("/setstr")public String setStr(String key, String value) {if(StringUtils.hasLength(key) && StringUtils.hasLength(value)) {stringRedisTemplate.opsForValue().set(key, value);return "redis 操作成功.";} else {return "redis 操作失败.";}}// 从 redis 中读取数据@RequestMapping("/getstr")public String getStr(String key) {String result = null;if(StringUtils.hasLength(key)) {result = stringRedisTemplate.opsForValue().get(key);}return "结果: " + result;}
}
验证setstr >> 127.0.0.1:8080/setstr?key=test_redis_1&value=Java
验证 getstr >> 127.0.0.1:8080/getstr?key=test_redis_1
客户端查看数据 >>
此处要注意客户端默认连接 redis 的是 DB0, 而前面在配置文件 中设置的数据库是 DB1, 所以客户端在DB0 中看不到数据的.
如果想要使用命令拿到程序中设置的 value, 使用如下命令 >>
1. select 1 -> 切换数据库
2. get test_redis_1 -> 获取值
4.3.2 将对象以字符串形式存储 redis
创建 User 类:
@Data
public class User {private int id;private String username;private String password;
}
代码示例 >>
@RestController
public class MyRedisController {private User user;@Autowiredprivate ObjectMapper objectMapper;private final String object_redis_key = "user_1";@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 使用双重校验锁来构建一个单例 User对象* @return*/public User getUser() {if(user == null) {synchronized (this) {if(user == null) {user = new User();user.setId(1);user.setUsername("张三");user.setPassword("123");}}}return user;}/*** 将对象存储在 redis 中* @return* @throws JsonProcessingException*/@RequestMapping("/setobj")public String setObj() throws JsonProcessingException {User user = getUser();String userStr = objectMapper.writeValueAsString(user);stringRedisTemplate.opsForValue().set(object_redis_key, userStr);return "操作成功! ";}/*** 从 redis 中读取对象* @return* @throws JsonProcessingException*/@RequestMapping("getobj")public User getObj() throws JsonProcessingException {String userStr = stringRedisTemplate.opsForValue().get(object_redis_key);User user = objectMapper.readValue(userStr, User.class);return user;}
}
验证 setobj >>
验证 getobj >>
4.3.3 将对象以字典类型存储 redis
// ... 省略相同代码private final String object_redis_key2 = "user_2";@Autowired
private StringRedisTemplate stringRedisTemplate;
/*** 将对象以字典类型存储 redis* @return*/
@RequestMapping("/sethash")
public boolean setHash() {User user = getUser();stringRedisTemplate.opsForHash().put(object_redis_key2, "id", String.valueOf(user.getId()));stringRedisTemplate.opsForHash().put(object_redis_key2, "username", user.getUsername());stringRedisTemplate.opsForHash().put(object_redis_key2, "password", user.getPassword());return true;
}@RequestMapping("/gethash")
public String getHash() {return stringRedisTemplate.opsForHash().get(object_redis_key2, "username").toString();
}
验证 setHash >> 127.0.0.1:8080/sethash
验证 getHash >> 127.0.0.1:8080/gethash
以 Hash 的形式存储 redis 的优点 >>
可以单独读取对象中的某一个成员, 不用将整个对象读取出来, 比较节省网络带框.
以 Hash 的形式存储 redis 的缺点 >>
存储对象会非常麻烦, 如果读取数据的时候, 需要将整个对象读出来, 也会非常麻烦.
相关文章:
Redis 的安装 + SpringBoot 集成 Redis
1.安装 Redis此处的 Redis 安装是针对 Linux 版本的安装, 因为 Redis 官方没有提供 Windows 版本, 只提供了 Linux 版本. 但是我们可以通过Windows 去远程连接 Redis.1.1 使用 yum 安装 Redis使用如下命令, 将 Redis 安装到 Linux 服务器:yum -y install redis1.2 启动 Redis使…...
为什么在容器中 1 号进程挂不上 arthas?
作者:卜比 本文是《容器中的 Java》系列文章之 4/n ,欢迎关注后续连载 😃 。 系列1:JVM 如何获取当前容器的资源限制? 系列2:Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题 系列3:让…...
23种设计模式之策略模式
一、概念 就是将一系列算法封装起来,并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算…...
不会做UI自动化测试?一起设计框架再实践吧
目的相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化UI测试自然也是广大测试同学职业道…...
数据分析实战项目3:RFM用户分群
目录1、RFM模型介绍2、Excel实际RFM划分案例3、RFM案例3.1 数据加载和基本信息查看3.2 数据预处理和RFM的初始值计算3.3 RFM区间和划分和分值计算3.4 RFM计算结果保存3.4.1 保存到excel3.4.2 保存到数据库3.5 RFM计算结果可视化3.6 结果分析(营销建议)3.…...
消息中间件概述
目录1.为什么学习消息队列2.什么是消息中间件3.消息队列应用场景3.1 应用解耦3.2 异步处理3.3 流量削峰3.4 什么是QPS,PV3.5 什么是PV,UV,PR4. AMQP 和 JMS4.1 AMQP4.2 JMS4.3. AMQP 与 JMS 区别5. 消息队列产品6. RabbitMQ6.1 RabbitMQ简介6.2 RabbitMQ 中的相关概…...
vue和js给后端接口返回的数据(如以json数据为元素的数组)添加新的json字段
文章目录vue和js给后端接口返回的数据(如以json数据为元素的数组)添加新的json字段1. res为后端接口的响应2. 获取后端接口返回的数据3. 向 tableData 添加字段3.1. 向 tableData 中添加一个新json元素( {"time", "2023-02-09"} )3.…...
负载均衡的方式
在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集…...
python(15)--函数设计
前言 函数是可重用的程序代码块。 函数的作用,不仅可以实现代码的复用,还可以保证修改函数的代码时,所有调用该函数的地方都能得到体现。目前我已知函数的作用是:对代码实现了封装、函数调用、传递参数、返回计算结果等。 正文 …...
手把手教你用Python做可视化数据,还能调节动画丝滑度
数据可视化动画还在用Excel做? 现在一个简单的Python包就能分分钟搞定! 而且生成的动画也足够丝滑,效果是酱紫的: 这是一位专攻Python语言的程序员开发的安装包,名叫Pynimate。 目前可以直接通过PyPI安装使用。 使用…...
湖南中创教育PMP项目管理——变更管理
【变更管理】包括 一、如何理解需求变更 二、如何控制需求变更 三、项目变更管理流程 四、如何应对“奇葩”变更 一、如何理解需求变更: 1、项目中发生变更是正常现象,变更无法回避 2、哪里都可能出现变更,任何人都有权提出变更 3、…...
IC真题 —— 刷题记录(1)
引言 记录一些 我自己刷的 IC行业招聘真题,不是每题记录,只记录一些值得记录的,写下自己的看法。主要是一些数字IC行业题目,偏前端。 1、有一个逐次逼近型 8位A/D 转换器,若时钟频率为250KHz,完成一次转换…...
【C++入门】命名空间,输出输入,缺省参数,函数重载
文章目录命名空间C输入与输出缺省参数函数重载命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标 识符的名称进行本地化࿰…...
cmu 445 poject 2笔记
2022年的任务 https://15445.courses.cs.cmu.edu/fall2022/project2/ checkpoint 1,实现b树,读,写,删 checkpoint 2, 实现b树,迭代器,并发读写删 本文不写代码,只记录遇到的一些思维盲点 checkp…...
梅开二度的 axios 源码阅读,三千字详细分享功能函数,帮助扩展开发思维
前言 第一遍看 axios 源码,更多的是带着日常开发的习惯,时不时产生出点联想。 第二遍再看 axios 源码,目标明确,就是奔着函数来的。 当有了明确清晰的目标,阅读速度上来了,思绪也转的飞快。 按图索骥&a…...
vcs仿真教程
VCS是在linux下面用来进行仿真看波形的工具,类似于windows下面的modelsim以及questasim等工具,以及quartus、vivado仿真的操作。 1.vcs的基本指令 vcs的常见指令后缀 sim常见指令 2.使用vcs的实例 采用的是全加器的官方教程,首先介绍不使用…...
java 自定义json解析注解 复杂json解析 工具类
java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...
类的 6 个默认成员函数
文章目录一、构造函数1. 构造函数的定义2. 编译器生成的构造函数3. 默认构造函数4. 初始化列表5. 内置成员变量指定缺省值(C11)二、析构函数1. 析构函数的定义2. 编译器生成的析构函数3. 自己写的析构函数的执行方式三、拷贝构造函数1. C语言值传递和返回值时存在 bug2. 拷贝构…...
基于Verilog HDL的状态机描述方法
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库…...
6年软件测试经历:成长、迷茫、奋斗
前言 测试工作6年,经历过不同产品、共事过不同专业背景、能力的同事,踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不…...
OpenMMLab AI实战营第五次课程
语义分割与MMSegmentation 什么是语义分割 任务: 将图像按照物体的类别分割成不同的区域 等价于: 对每个像素进行分类 应用:无人驾驶汽车 自动驾驶车辆,会将行人,其他车辆,行车道,人行道、交…...
【软考】系统集成项目管理工程师(二十)项目风险管理
一、项目风险管理概述1. 风险概念2. 风险分类3. 风险成本二、项目风险管理子过程1. 规划风险管理2. 识别风险3. 实施定性风险分析4. 实施定量风险分析5. 规划风险应对6. 控制风险三、项目风险管理流程梳理一、项目风险管理概述 1. 风险概念 风险是一种不确定事件或条件,一旦…...
2017-PMLR-Neural Message Passing for Quantum Chemistry
2017-PMLR-Neural Message Passing for Quantum Chemistry Paper: https://arxiv.org/pdf/1704.01212.pdf Code: https://github.com/brain-research/mpnn 量子化学的神经信息传递 这篇文献作者主要是总结了先前神经网络模型的共性,提出了一种消息传递神经网络&am…...
Python:每日一题之全球变暖(DFS连通性判断)
题目描述 你有一张某海域 NxN 像素的照片,"."表示海洋、"#"表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿…...
企业级安全软件装机量可能大增
声明 本文是学习大中型政企机构网络安全建设发展趋势研究报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 大中型政企机构是网络安全保护的重中之重,也是国内网络安全建设投入最大,应用新技术、新产品最多的机构…...
为什么要用频谱分析仪测量频谱?
频谱分析仪是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,可用以测量放大器和滤波器等电路系统的某些参数,是一种多用途的电子测量仪器。从事通信工程的技术人员,在很多时候…...
Python环境搭建、Idea整合
1、学python先要下载什么? 2、python官网 3、idea配置Python 4、idea新建python 学python先要下载什么? python是一种语言,首先你需要下载python,有了python环境,你才可以在你的电脑上使用python。现在大多使用的是pyt…...
HTTP请求返回304状态码以及研究nginx中的304
文章目录1. 引出问题2. 分析问题3. 解决问题4. 研究nginx中的3044.1 启动服务4.2 ETag说明4.3 响应头Cache-Control1. 引出问题 之前在调试接口时,代码总出现304问题,如下所示: 2. 分析问题 HTTP 304: Not Modified是什么意思? …...
【GD32F427开发板试用】使用Arm-2D显示电池电量
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:boc 【虽迟但到】 由于快递的原因,11月份申请的,12月1日才收到GD32F427开发板。虽然姗姗来迟,但也没有减少…...
TS第二天 Typesrcipt编译
文章目录自动编译tsconfig.json配置选项include 比较重要excludeextendsfilescompilerOptions 比较重要自动编译 手动模式:每次ts文件修改完,手动编译一次 tsc 01.ts监视模式:ts文件修改完,自动监视编译 tsc 01.ts -w编译所有文…...
做二手交易网站如何盈利/关键词排名优化怎么样
新装的Ubuntu或者Docker pull的Ubuntu镜像创建的容器没有ipconfig和ping命令 解决办法: 1、apt-get update 2、安装和ifconfig有关的工具 apt install net-tools 3、安装和ping有关的工具 apt install iputils-ping转载于:https://www.cnblogs.com/SH170706/p/10369…...
什么网站做微信公众账号/网络营销课程个人总结3000字
原因:音频编码原来为AMR,ios那边貌似不支持这种音频编码 VideoAbsActivity.java 加了 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 将音频录制格式从默认…...
移动应用开发女生学难不难/百度seo软件首选帝搜软件
人类都很难驾驭的漂移板,却被加州大学伯克利分校的双足机器人Cassie轻松实现,直行、转弯、高速行驶都不在话下。IEEE Spectrum对机器人设计团队进行了专访,为我们揭开Cassie背后的技术。机器人现在也可以驾驭漂移板了!新智元之前报道过媲美波…...
淄博网站制作定制改版/100大看免费行情的软件
1.下列筹资工具中,发行企业可能在债券筹资基础上,同时实现普通股筹资的是()。 A.可转换债券 B.认股权证 C.分离交易可转债 D.认沽权证 2.某公司用甲材料生产A产品,甲材料标准价格是50元/千克,用量标准为5千克/件。该公司上月投产…...
中文wordpress模版/软件推广平台
挑战1:安全性 自公共云出现以来,企业一直担心潜在的安全风险,并且没有发生变化。在RightScale调查中,这是受访者提出的头号挑战:77%的人表示云安全是一项挑战,其中29%的人称之为重大挑战。 与其他IT员工相…...
寻找南京帮助做网站的单位/南昌百度推广公司
在我们为 IDEA 等编辑器配置 svn 时,经常需要配置 svn.exe 文件的目录 C:\Program Files\TortoiseSVN\bin\svn.exe ; 但打开 svn.exe 文件的安装目录 C:\Program Files\TortoiseSVN\bin,却发现没有 svn.exe 文件,其原因是由于安…...