Linux 系统安装 Redis7 —— 超详细操作演示!

内存数据库 Redis7

    • 一、Redis 概述
      • 1.1 Redis 简介
      • 1.2 Redis 的用途
      • 1.3 Redis 特性
      • 1.4 Redis 的IO模型
    • 二、Redis 的安装与配置
      • 2.1 Redis 的安装
      • 2.2 连接前的配置
      • 2.3 Redis 客户端分类
      • 2.4 Redis 配置文件详解
    • 三、Redis 命令
    • 四、Redis 持久化
    • 五、Redis 主从集群
    • 六、Redis 分布式系统
    • 七、Redis 缓存
    • 八、Lua脚本详解
    • 九、分布式锁

一、Redis 概述

1.1 Redis 简介

Redis Remote Dictionary Server ,远程字典服务, 由意大利人 Salvatore Sanfilippo (又名 Antirez 开发, 是一个使用 ANSI C 语言 编写、支持网络、可基于 内存 亦可 持久化日志型NoSQL 开源内存数据库 ,其提供多种语言的 API 。从 2010 年 3 月 15 日起, Redis 的开发工作由 VMware 主持。从2013 年 5 月开始, Redis 的开发由 Pivotal 赞助。

2008 年时 Salvatore Sanfilippo 自己开发一个叫 LLOOGG 的网站。

Redis 之所以称之为 字典服务,是因为 Redis 是一个 key-value 存储系统 。支持存储的 value 类型 有很多,包括 String(字符串) 、 List(链表) 、 Set(集合) 、 Zset(sorted set 有序集合) 和 Hash(哈希类型) 等 。

Redis 的国际知名用户有, Twitter 、 GitHub 、 Facebook 等,国内知名用户有,阿里巴巴、腾讯、百度、搜狐、优酷、美团、小米等。熟练使用和运维 Redis 已经成为开发运维人员的一个必备技能。

⭐️ NoSQL

  • NoSQL(“non relational”, “Not Only SQL”),泛指 非关系型的数据库。随着互联网 web2.0网站的兴起,传统的关系数据库在处理 web2.0 网站,特别是 超大规模高并发SNS (社交) 类型的 web2. 0 纯动态网站 已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL 数据库的产生就是为了解决 大规模数据集合 多重数据种类 带来的挑战,特别是大数据应用难题。

(1) 键值存储数据库

  • 就像 Map 一样的 key-value 对。典型代表就是 Redis

(2) 列存储数据库

  • 关系型数据库 是典型的 行存储数据库
    • 存在的问题是,按行存储的数据在 物理层面 占用的是 连续存储空间不适合海量数据存储
  • 而按 列存储 则可实现 分布式存储适合海量存储。典型代表是 HBase

(3) 文档型数据库

  • 其是 NoSQL关系型数据 的结合,最像关系型数据库NoSQL。典型代表是MongoDB
    • 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON

(4) 图形(Graph)数据库

  • 用于存放一个 节点关系 的数据库,例如描述不同人间的关系。典型代表是Neo4J

1.2 Redis 的用途

Redis 在生产中使用最多的场景就是 做数据缓存 。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了 RT ,而且降低了 DBMS 的压力。

在这里插入图片描述

根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类: 实时同步缓存阶段性同步缓存

  • 实时同步缓存 是指,DBMS 中 数据更新 后, Redis 缓存中的存放的相关数据会被 立即清除,以促使再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis 。
  • 阶段性同步缓存 是指,Redis 缓存中的数据允许在一段时间 (生存时长) 内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的 过期时间

1.3 Redis 特性

能够做缓存的技术中间件很多,例如,MyBatis 自带的二级缓存Memched 等。只所以在生产中做缓存的产品几乎无一例外的会选择 Redis ,是因为它有很多其它产品所不具备的特性。

  • 性能极高: Redis 读的速度可以达到 11w次/s ,写的速度可以达到 8w次/s 。只所以具有这么高的性能,因为以下几点原因:
      1. Redis 的所有操作都是在内存中发生的。
      1. Redis 是用 C 语言 开发的。
      1. Redis 源码非常精细集性能与优雅于一身)。
  • 简单稳定: Redis 源码很少。早期版本只有 2w 行左右。从 3.0 版本开始,增加了集群功能,代码变为了 5w 行左右。
  • 持久化: Redis 内存中的数据可以进行持久化,其有两种方式: RDBAOF
  • 高可用集群: Redis 提供了高可用的主从集群功能,可以确保系统的安全性。
  • 丰富的数据类型: Redis 是一个 key-value 存储系统 。支持存储的 value 类型很多,包括 String(字符串) 、 List(链表) 、 Set(集合) 、 Zset(sorted set 有序集合) 和 Hash (哈希类型)等,还有 BitMapHyperLogLogGeospatial 类型。
    • BitMap :一般用于 大数据量二值性统计
    • HyperLogLog :其是 Hyperlog Log ,用于对数据量超级庞大日志去重统计
    • Geospatial :地理空间,其主要用于地理位置相关的计算
  • 强大的功能: Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持 Lua 脚本扩展功能。
  • 客户端语言广泛: Redis 提供了简单的 TCP 通信协议,编程语言可以方便地的接入 Redis 。所以,有很多的开源社区、大公司等开发出了很多语言的 Redis 客户端。
  • 支持 ACL 权限控制: 之前的权限控制非常笨拙。从 Redis6 开始引入了 ACL 模块,可以为不同用户定制不同的用户权限

ACL,Access Control List ,访问控制列表,是一种 细粒度权限管理策略,可以针对 任意用户与组 进行权限控制

  • 目前大多数 Unix 系统与 Linux 2.6 版本已经支持 ACL 了。
  • Zookeeper 早已支持 ACL 了。
  • Unix与 Linux 系统默认使用是 UGO (User 、Group 、Other) 权限控制策略 ,其是一种 粗粒度权限管理策略。
  • 支持多线程 IO 模型: Redis 之前版本采用的是单线程模型,从 6.0 版本开始 支持多线程模型

1.4 Redis 的IO模型

Redis 客户端提交的各种请求是如何最终被 Redis 处理的?

  • Redis 处理客户端请求所采用的 处理架构,称为 Redis 的 IO 模型
  • 不同版本的 Redis 采用的 IO 模型 是不同的。

⭐️ 1)、单线程模型

  • 对于 Redis 3.0 及其以前版本, Redis 的 IO 模型采用的是 纯粹的单线程模型 。即所有客户端的请求全部由一个线程处理。

在这里插入图片描述

  • Redis 的单线程模型采用了 多路复用技术

对于多路复用器多路复用技术 常见的有三种: select 模型(数组)、 poll 模型(链表)、 epoll 模型。

  • select 模型底层是数组,性能较低,不常见。
  • poll 模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是 有延迟的
  • epoll 模型的选择算法:采用的是回调方式。 根据就绪事件发生后的处理方式的不同,又可分为 LT 模型与 ET 模型。
  • 每个客户端 若 要向 Redis 提交请求,都需要与 Redis 建立一个 socket 连接,并向 事件分发器 注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个 唯一的线程 来处理。如果该线程还在处理多个任务,则将该任务写入到任务队列等待线程处理。
  • 只所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交由不同的事件处理器去处理。

⭐️ 2)、混合线程模型

  • 从Redis 4.0 版本开始, Redis 中就开始加入了 多线程 元素 。处理客户端请求的仍是单线程模型,但对于一些 比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。
    • 例如,持久化、 对 AOFrewrite对失效连接的清理等。

⭐️ 3)、多线程模型

  • Redis 6.0版本,才是真正意义上的多线程模型。因为其对于客户端请求的处理采用的是多线程模型

在这里插入图片描述

  • 多线程 IO 模型中的 “多线程” 仅用于 接受解析客户端的请求,然后将解析出的请求写入到任务队列。而对具体任务(命令)的处理,仍是由主线程处理
  • 这样做 使得用户 无需考虑 线程安全问题无需考虑 事务控制无需考虑像 LPUSH/LPOP命令的执行顺序问题

⭐️ 4)、优缺点总结 (面试)

(1) 单线程模型

  • 优点:可维护性高,性能高。不存在 并发读写 情况,所以也就 不存在 执行顺序的不确定性,不存在 线程切换开销,不存在 死锁问题不存在 为了数据安全而进行的 加锁/解锁开销
  • 缺点:性能会受到影响,且由于单线程 只能使用一个处理器(现在都是多处理器),所以会形成 处理器浪费

内存的响应时长(RT): 100 n s 100ns 100ns
Redis 每秒处理的读写请求数量应该可以达到 1 s / 100 n s = 1 0 9 n s / 100 n s = 1 0 7 = 1 k w 1s/100ns = 10^9ns/100ns = 10^7 = 1kw 1s/100ns=109ns/100ns=107=1kw
实际情况是,Redis 每秒可以处理 8 w − 11 w 8w - 11w 8w11w 的读写请求

(2) 多线程模型

  • 优点:其结合了 多线程单线程 的优点,避开了它们的所有不足。
  • 缺点:该模型没有显示不足。如果非要找其不足的话就是,其并非是一个真正意义上的 ”多线程”,因为 真正处理任务的线程 仍是单线程。所以,其对性能也是有些影响的

二、Redis 的安装与配置

这里是要将 Redis 安装到 Linux 系统中。

我的是 CentOS7,已经关闭防火墙,安装好了jdk,以及常用的命令工具。

2.1 Redis 的安装

⭐️ (2.1.1)、安装前的准备工作

1)、安装 gcc

  • 由于 Redis 是由 C/C++ 语言编写的, 而从官网下载的 Redis 安装包是需要 编译后 才可安装的, 所以对其进行编译就必须要使用相关编译器。对于 C/C++ 语言的编译器,使用最多的是 gccgcc-c++,而这两款编译器在 CentOS 7 中是没有安装的,所以首先要安装这两款编译器。
  • GCC, GNU Compiler Collection, GNU 编译器集合。
yum -y install gcc gcc-c++ 

2)、下载 Redis

  • Redis 的官网为: http://redis.io

在这里插入图片描述
在这里插入图片描述

3)、上传到 Linux

  • 将下载好的压缩包上传到 Linux 的 /opt/tools 目录中 。
    在这里插入图片描述

⭐️ (2.1.2)、安装 Redis

1)、解压 Redis

  • 将 Redis 解压到 /opt/apps 目录中。
tar -zxvf redis-7.2.1.tar.gz -C /opt/apps/

在这里插入图片描述

  • 进入到 /opt/apps 目录中 再将 Redis 解压包目录更名为 redis (不更名也无所谓,改名是为了简化目录名)。
mv redis-7.2.1/ redis

在这里插入图片描述

2)、编译

  • 编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以直接进行编译 了 。

在这里插入图片描述

  • 在解压目录下,执行编译命令 make 进行编译。

在这里插入图片描述

如果没有准备好C语言编译环境,make 会报错 — Jemalloc/jemalloc.h:没有那个文件
解决办法:

  • 首先看:gcc 是否安装成功,成功后
  • 运行 make distclean, 将编译文件清除掉,然后再在 redis 目录下再次执行 make 命令(只是编译好)
  • 当看到如下提示时,表示编译成功。

在这里插入图片描述

3)、安装

  • 在 Linux 中对于编译过的安装包执行 make install 进行安装。

在这里插入图片描述

  • 可以看到,共安装了三个组件: redis 服务器客户端 与 一个性能测试工具 benchmark

4)、查看 bin 目录

  • 安装完成后,打开 /usr/local/bin 目录,可以看到出现了很多的文件。

在这里插入图片描述

  • 通过 echo $PATH 可以看到,/usr/local/bin 目录是存在于该 系统变量 中的, 这样这些命令就可以在任意目录中执行了。

在这里插入图片描述

⭐️ (2.1.3)、Redis 启动与停止

1)、前台启动

  • 在任意目录执行 redis-server 命令即可启动 Redis 。 这种启动方式会 占用当前命令行窗口

在这里插入图片描述

  • 再开启 一个会话窗口,可以查看到当前的 Redis 进程,默认端口号为 6379
ps aux | grep redis

在这里插入图片描述

  • 通过 Ctrl + C 命令可以停止 Redis 。

2)、命令式后台启动

  • 使用 nohup 命令,最后再添加一个 & 符,可以使要启动的程序在后台以守护进程方式运行
 nohup redis-server &
  • 这样的好处是,进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个 nohup.out 文件用于记录 Redis 的操作日志。

在这里插入图片描述

3)、Redis 的停止

  • 通过 redis-cli shutdown 命令可以停止 Redis 。

在这里插入图片描述

4)、配置式后台启动

  • 使用 nohup 命令可以使 Redis 后台启动,但每次都要键入 nohup& 符,比较麻烦。
  • 可以通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台启动的目的。
  • redis.conf 文件在 Redis 的安装目录根下。

在这里插入图片描述

  • daemonize 属性值由 no 改为 yes ,使 Redis 进程以守护进程方式运行
vim redis.conf
:set nu 	#显示行号
/daemonize 	#搜索daemonize

在这里插入图片描述

修改后再启动 Redis ,就无需再键入 nohup 与 符 &了,但必须要指定启动所使用的 Redis配置文件。 这是为什么呢?

  • 使用 nohup redis-server & 命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的默认值, Redis 会按照这些设置的参数进行启动。但这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件,这样,配置文件中的参数值将覆盖原默认值。
  • Redis 已经给我们提供好了配置文件模板,是 Redis 安装目录的根目录下的 redis.conf 文件。由于刚刚对 redis.conf 配置文件做了修改,所以在开启 Redis 时需要显示指出要加载的配置文件。配置文件应紧跟在 redis-server 的后面。
redis-server /opt/apps/redis/redis.confps aux | grep redis

在这里插入图片描述

2.2 连接前的配置

  • Redis 是一个内存数据库服务器,就像 MySQL 一样,对其操作也需要通过 客户端 进行。
  • 若要使 远程主机上的客户端 能够连接并访问到 服务端的 Redis ,则服务端首先要做如下配置。

⭐️ (2.2.1)、绑定客户端 IP

  • Redis 可以通过修改配置文件来限定可以访问自己的 客户端 IP

在这里插入图片描述

  • 以上设置后,只允许当前主机访问当前的 Redis ,其它主机均不可访问。 所以,如果不想限定访问的客户端,只需要将该行 注释掉 即可。

在这里插入图片描述

⭐️ (2.2.2)、关闭保护模式

  • 默认保护模式是开启的。 其只允许本机的客户端访问, 即只允许自己访问自己。但生产中应该关闭, 以确保其它客户端可以连接 Redis 。

在这里插入图片描述

#命令模式下输入
:noh 	#去掉搜索出来的黄标

⭐️ (2.2.3)、设置访问密码

  • 为 Redis 设置访问密码,可以对要读 写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis ,但无法访问

1)、密码设置

  • 访问密码的设置位置在 redis.conf 配置文件中。默认是被注释掉的,没有密码

在这里插入图片描述

  • 没有通过密码登录的用户,无法读/写 Redis

在这里插入图片描述

2)、使用密码

  • 对于密码的使用,有两种方式:登录时未使用密码,则访问时先输入密码;登录时直接使用密码登录,访问时无需再输入密码。
    • A、 登录时未使用密码

在这里插入图片描述

    • B、 登录时使用密码

在这里插入图片描述

    • C、 退出时使用密码

在这里插入图片描述

3)、注意

  • 为了方便后面的学习,我们这里就 不设置访问密码了,直接将其 注释掉 即可。

在这里插入图片描述

⭐️ (2.2.4)、禁止 / 重命名命令

  • 后面要学习两个非常危险的命令:flushalflushdb
    • 它们都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。
    • Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。
    • 以下配置 ,禁用了 flushall 与 flushdb 命令。
      当然,在学习过程中暂时不禁用它们。

在这里插入图片描述

⭐️ (2.2.5)、启动 Redis

  • 当然,若要使客户端能够连接 Redis,则必须开启服务端的 Redis 。

在这里插入图片描述

2.3 Redis 客户端分类

Redis 客户端也像 MySQL 客户端一样有多种类型:命令行客户端、图形界面客户端、 Java代码客户端。

⭐️ (2.3.1)、命令行客户端

  • Redis 提供了基本的命令行客户端。打开命令行客户端的命令为 redis-cli

在这里插入图片描述

  • -h :指定要连接的 Redis 服务器的 IP
  • -p :指定要连接的 Redis 的 端口号

若连接的是本机Redis ,且端口号没有改变,保持默认的 6379 ,则 -h-p 选项可以省略不写。

⭐️ (2.3.2)、图形界面客户端

1)、Redis Desktop Manager

  • Redis 的图形界面客户端很多, 其中较出名的是 Redis Desktop Manager 的客户端。 不过,该软件原来是免费软件, 从 0.8.8 版本 后变为了商业化收费软件。
  • 官网为: https://resp.app/(原来是 http://redisdesktop.com )。

在这里插入图片描述

2)、RedisPlus

  • RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux 、 Mac 三大系统平台, RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
  • RedisPlus的官网地址为 https://gitee.com/MaxBill/RedisPlus 。

百度网盘链接:https://pan.baidu.com/s/1xnmm4TMuNd8eqslJ0rRm9A?pwd=e316
提取码:e316

⭐️ (2.3.3)、Java 代码客户端

  • 所谓 Java 代码客户端就是一套操作 Redis 的 API ,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
  • 对 Redis 操作的 API 很多 ,例如 jdbc-redisjredis 等 ,但最常用也是最有名的是 Jedis

2.4 Redis 配置文件详解

  • Redis 的核心配置文件 redis.conf 在安装根目录下,默认包含 2000 多行。 这些内容根据功能被划分为了很多部分。下面将一些重要部分进行介绍。

⭐️ (2.4.1)、基础说明

⭐️ (2.4.2)、includes

⭐️ (2.4.3)、modules

⭐️ (2.4.4)、network

⭐️ (2.4.5)、general

⭐️ (2.4.6)、security

⭐️ (2.4.7)、clients

⭐️ (2.4.8)、memory management

⭐️ (2.4.9)、threaded I/O

三、Redis 命令

四、Redis 持久化

五、Redis 主从集群

六、Redis 分布式系统

七、Redis 缓存

八、Lua脚本详解

九、分布式锁

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

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

相关文章

【C++基础】10. 指针

文章目录 【 1. 指针的定义 】【 2. 指针的调用 】【 3. NULL 空指针 】【 4. 指针的算术运算 】4.1 指针的递加4.2 指针的递减4.3 指针的比较 【 5. 指针与数组 】5.1 通过指针操作数组5.2 指针数组、数组指针 【 6. 指向指针的指针(多级间接寻址)】【 7. 传递指针给函数 】【…

B树、B+树详解

B树 前言   首先,为什么要总结B树、B树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/Tree作为索引结构(例如mysql的InnoDB引擎使用的B树),理解不透彻B树,则无法理解数据…

Ubuntu 23.10 Beta 镜像开放下载

导读Canonical放出了 Ubuntu 23.10 Beta 镜像,此外 Edubuntu、Kubuntu、Lubuntu、Ubuntu Budgie、Ubuntu Cinnamon、Ubuntu Kylin、Ubuntu MATE、Ubuntu Studio、Ubuntu Unity 和 Xubuntu 等风味版本也同步放出镜像。 近日消息,Canonical 放出了 Ubuntu …

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫:cross-attention layers – 交叉注意力层。 研究人员发现,对这关键部分进行微调就足以实现良好的训练。 上面黄色部分,QKV 部分就是&a…

K8S:Rancher管理 Kubernetes 集群

文章目录 一.Rancher 简介1.Rancher概念2.Rancher 和 k8s 的区别 二.Rancher 安装及配置1.安装 rancher2.登录 Rancher 平台3.Rancher 管理已存在的 k8s 集群4.Rancher 部署监控系统5.使用 Rancher 仪表盘管理 k8s 集群 三.拓展1.Rancher和kubesphere相比较2.K3S和K8S相比较 一…

Opencv——颜色模型+通道分离与合并

视频加载/摄像头调用 VideoCapture允许一开始定义一个空的对象 VideoCapture video VideoCapture(const String &filename,int apiPreferenceCAP_ANY) filename:读取的视频文件或者图像序列名称 apiPreference:读取数据时设置的属性,例如编码格式、是否调用Op…

转化限制+分析变量变化引起的答案变化:Gym - 104065D

https://vjudge.net/contest/587311#problem/H 先转化一波条件: p i ≥ 1 X p_i\ge \frac 1 X pi​≥X1​ p i ≤ 1 1 − Y p_i\le \frac 1 {1-Y} pi​≤1−Y1​ 所以我们按 p p p 排序, s u m x sum_x sumx​ 必然是后缀, s u m y sum_y …

线性回归原理

1、 线性回归的原理 1.1 线性回归应用场景 房价预测 销售额度预测 金融:贷款额度预测、利用线性回归以及系数分析因子1.2 什么是线性回归 1.2.1定义与公式 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的…

VMware和Debian下载

文章目录 ⭐️写在前面的话⭐️一、VMware二、Debain三、建立虚拟机🚀 先看后赞,养成习惯!🚀🚀 先看后赞,养成习惯!🚀 ⭐️写在前面的话⭐️ CSDN主页:程序员好冰 目前在…

模型UV纹理设置工具

1、什么是模型UV纹理? 模型的UV纹理是将二维纹理图映射到三维模型表面的过程。UV纹理可以为模型赋予颜色、纹理、细节和其他效果,使其看起来更加逼真。 2、UV纹理的原理 下面是模型UV纹理的详细原理介绍: UV坐标系统:UV坐标系统…

乐器经营商城小程序的作用是什么

乐器产品覆盖的人群非常广,小学生、老年人都有不小需求,也因此市场中的从业商家相对较多,产品丰富可供消费者选购,然而在实际经营中,线上线下面临痛点不少。 通过【雨科】平台搭建乐器小程序商城,将所有产品…

DarkGate恶意软件通过消息服务传播

导语 近日,一种名为DarkGate的恶意软件通过消息服务平台如Skype和Microsoft Teams进行传播。它冒充PDF文件,利用用户的好奇心诱使其打开,进而下载并执行恶意代码。这种攻击手段使用了Visual Basic for Applications(VBA&#xff0…

JavaSE学习值之--认识异常

💕"有效知识的前提是承认知识边界,承认我们对边界那边的一切无可奉告。"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--认识异常 一.什么是异常? 异常就是程序在运行的时候产生的不正常的行为 …

多机器人三角形编队的实现

文章目录 前言一、机器人编队前的准备二、配置仿真环境2.编写机器人编队.cpp文件 三、三角形编队测试 前言 前阵子一直想要实现多机器人编队,找到了很多开源的编队代码,经过好几天的思索,终于实现了在gazebo环境中的TB3三角形机器人编队。 一…

SQL Server远程登录失败

SQL Server远程登录失败 检查SQL SERVER 是否允许远程访问. 具体步骤: 1)在远端SQL Server主机上,打开SSMS并连接数据库 2)在相应”数据库”上单击右键,选择”属性” 3)选择”连接”选项卡,检查”远程服务器连接”下,RPC服务是否选择. 设置SQL Server相关TCP连接 1.打开SQL Se…

Netty 入门 — 亘古不变的Hello World

这篇文章我们正式开始学习 Netty,在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣? 用官方的话说:Netty 是一款异步的、基于事…

KMP 算法 + 详细笔记

给两个字符串,T"AAAAAAAAB",P"AAAAB"; 可以暴力匹配,但是太费时和效率不太好。于是KMP问世,我们一起来探究一下吧!!! (一)最长公共前后缀 D[i] p[…

Java架构师缓存性能优化

目录 1 缓存的负载策略2 缓存的序列化问题3 缓存命中率低4 缓存对数据库高并发访问5 缓存数据刷新的策略5.1. 实时策略5.2. 异步策略5.3. 定时策略6 何时写缓存7 批量数据来更新缓存8 缓存数据过期的策略9 缓存数据如何恢复10 缓存数据如何迁移11 缓存冷启动和缓存预热想学习架…

解决react样式组合时css module动态样式失效的问题

现象&#xff1a; <button disabled{invalid} className{ "btn btn-primary btn-lg" invalid ? styles.btnDisabled : "" } > 注册 </button> 上面采用字符串拼接的方式&#xff0c;组合class&#xff0c;但是css module的动态样式style…

【Java零基础入门到就业】第一天:java简介和cmd窗口的一些常见命令

1、java简介 Java是一种基于类的、面向对象的编程语言&#xff0c;它被设计成具有尽可能少的实现依赖。它旨在让应用程序开发人员编写一次&#xff0c;并在任何地方运行(WORA)&#xff0c;这意味着编译后的Java代码可以在所有支持Java的平台上运行&#xff0c;而无需重新编译。…