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
。只所以具有这么高的性能,因为以下几点原因:-
- Redis 的所有操作都是在内存中发生的。
-
- Redis 是用 C 语言 开发的。
-
- Redis 源码非常精细(集性能与优雅于一身)。
-
- 简单稳定: Redis 源码很少。早期版本只有 2w 行左右。从 3.0 版本开始,增加了集群功能,代码变为了 5w 行左右。
- 持久化: Redis 内存中的数据可以进行持久化,其有两种方式:
RDB
与AOF
。 - 高可用集群: Redis 提供了高可用的主从集群功能,可以确保系统的安全性。
- 丰富的数据类型: Redis 是一个
key-value
存储系统 。支持存储的value
类型很多,包括String
(字符串) 、List
(链表) 、Set
(集合) 、Zset
(sorted set
有序集合) 和Hash
(哈希类型)等,还有BitMap
、HyperLogLog
、Geospatial
类型。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 中就开始加入了 多线程 元素 。处理客户端请求的仍是单线程模型,但对于一些 比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。
- 例如,持久化、 对 AOF 的
rewrite
、对失效连接的清理等。
- 例如,持久化、 对 AOF 的
⭐️ 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 8w−11w 的读写请求
(2) 多线程模型
- 优点:其结合了 多线程 与 单线程 的优点,避开了它们的所有不足。
- 缺点:该模型没有显示不足。如果非要找其不足的话就是,其并非是一个真正意义上的 ”多线程”,因为 真正处理任务的线程 仍是单线程。所以,其对性能也是有些影响的。
二、Redis 的安装与配置
这里是要将 Redis 安装到 Linux 系统中。
我的是 CentOS7,已经关闭防火墙,安装好了jdk,以及常用的命令工具。
2.1 Redis 的安装
⭐️ (2.1.1)、安装前的准备工作
1)、安装 gcc
- 由于 Redis 是由 C/C++ 语言编写的, 而从官网下载的 Redis 安装包是需要 编译后 才可安装的, 所以对其进行编译就必须要使用相关编译器。对于 C/C++ 语言的编译器,使用最多的是
gcc
与gcc-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)、禁止 / 重命名命令
- 后面要学习两个非常危险的命令:
flushal
与flushdb
。- 它们都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。
- Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。
- 以下配置 ,禁用了
flushall 与 flushdb
命令。
当然,在学习过程中暂时不禁用它们。
⭐️ (2.2.5)、启动 Redis
- 当然,若要使客户端能够连接 Redis,则必须开启服务端的 Redis 。
redis-server /opt/apps/redis/redis.conf
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 )。
百度网盘链接( 0.8.8版本):https://pan.baidu.com/s/1xnmm4TMuNd8eqslJ0rRm9A?pwd=e316
提取码:e316
2)、RedisPlus
- RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux 、 Mac 三大系统平台, RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
- RedisPlus的官网地址为 https://gitee.com/MaxBill/RedisPlus 。
⭐️ (2.3.3)、Java 代码客户端
- 所谓 Java 代码客户端就是一套操作 Redis 的 API ,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
- 对 Redis 操作的 API 很多 ,例如
jdbc-redis
、jredis
等 ,但最常用也是最有名的是Jedis
。
2.4 Redis 配置文件详解
- Redis 的核心配置文件
redis.conf
在安装根目录下,默认包含 2000 多行。 这些内容根据功能被划分为了很多部分。下面将一些 重要部分 进行介绍。
学习的过程有问题可以:1、查阅官方文档;2、读英文注释;3、看源码
⭐️ (2.4.1)、基础说明
这部分主要是给出一些说明,包含三部分意思:
- 第 1-6 行用于说明,如果要 启动 Redis ,需要指出 配置文件的路径。
- 第 8-16 行用于说明当前配置文件中可以使用的的 容量单位 及 意义。
- 第 18 行用于说明这些 容量单位 没有大小写之分。
⭐️ (2.4.2)、includes
指定要在当前配置文件中包含的配置文件。 这样做的目的主要是便于 配置信息管理:
- 可以将 不同场景 的配置都进行 单独定义,
- 然后在当前 核心配置文件 中根据 不同场景 选择包含进不同的配置文件。
⭐️ (2.4.3)、modules
- Redis 配置文件中可以通过 加载 不同的第三方模块,来增强、扩展 Redis 的功能。
⭐️ (2.4.4)、network
Network 配置模块是 比较重要的部分,主要进行网络相关的配置。其中较重要的有:
- 1)、bind
指定可以访问当前 Redis 服务的客户端 IP ,默认只允许本地访问,即当前 Redis 自己访问自己。
为了使所有其它客户端都可访问,一般要将其注释掉。
- 2)、protected mode
默认保护模式是开启的。 其只允许本机的客户端访问,即只允许自己访问自己。
但生产中应该关闭,以确保其它客户端可以连接 Redis 。
- 3)、port
Redis 监听的连接端口号,默认 6379 。
- 4)、tcp-backlog
tcp-backlog
是一个 TCP 连接的队列,其主要用于解决 高并发 场景下客户端 慢连接 问题。
- 这里设置的值就是这个队列的长度。该队列与 TCP 连接的 三次握手 有关。
- 不同的 Linux 内核,
backlog
队列中存放的元素(客户端连接)类型是不同的。
- Linux 内核 2.2 版本之前 ,该队列中存放的是已完成了第一次握手的所有客户端连接,其中就包含已完成三次握手的客户端连接。当然,此时的
backlog
队列中的连接也具有两种状态:未完成三次握手的连接状态为SYN_RECEIVED
,已完成三次握手的连接状态为ESTABLISHED
。只有ESTABLISHED
状态的连接才会被 Redis 处理。- Linux 内核 2.2 版本之后 TCP 系统中维护了两个队列:
SYN_RECEIVED
队列与ESTABLISHED
队列。SYN_RECEIVED
队列中存放的是未完成三次握手的连接,ESTABLISHED
队列中存放的是已完成三次握手的连接。此时的backlog
就是ESTABLISHED
队列。
- 查看 Linux 内核版本:
uname -a
# 或
cat /proc/version
TCP 中的
backlog
队列的长度在 Linux 中由内核参数somaxconn
来决定。所以,在 Redis中该队列的长度由Redis 配置文件设置 与somaxconn
来共同决定:取它们中的最小值。
- 查看当前 Linux 内核中
somaxconn
的值。
cat /proc/sys/net/core/somaxconn
生产环境下(特别是高并发场景下),
backlog
的值最好要大一些,否则可能会影响系统性能。
- 修改
/etc/sysctl.conf
文件,在文件最后添加如下内容:net.core.somaxconn=2048
- 修改过后可以重启虚拟机,也可以通过执行如下命令来使新的修改生效。
sysctl -p # 内核在运行时,动态修改内核的运行参数
- 5)、timeout
空闲超时。当客户端与 Redis 间的 空闲时间 超过该时长后,连接自动断开。单位秒。默认值为 0,表示永远不超时 。
- 6)、tcp-keepalive
该配置主要用于设置Redis 检测 与 其连接的 所有客户端 的 存活性时间间隔,单位秒。一般是在空闲超时
timeout
设置为 0 时进行配置。(该方式会降低服务端的性能,还待商榷!)
如果连续检测 两次 都不在,则连接断开。
⭐️ (2.4.5)、general
- 1)、daemonize
该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。
yes
是采用后台启动。
- 2)、pidfile
该配置用于指定 Redis 运行时
pid
写入的文件,无论 Redis 是否采用守护进程方式启动,pid
都会写入到该配置的文件。
注意,如果没有配置pid
文件,不同的启动方式,pid
文件的产生效果是不同的:
- 采用 守护进程 方式启动(后台启动,
daemonize
为yes
):pid
文件为/var/run/redis.pid
。- 采用 前台启动(
daemonize
为no
):不生产pid
文件
- 3)、loglevel
配置日志的级别。 Redis 中共有四个级别,由低到高 依次是:
debug
:可以获取到很多的信息,一般在 开发 和 测试 时使用。verbose
:可以获取到很多不太有用的信息,但不像debug
级别那么多。notice
:可以获取到在生产中想获取到的 适当多的信息,默认级别。warning
:只记录 非常重要 / 关键 的信息。
- 4)、logfile
指定日志文件。如果设置为空串,则强制将日志记录到 标准输出设备(显示器)。
如果使用的是 守护进程 启动方式,设置为空串,则意味着会将日志发送到设备/dev/null
(空设备)。
- 5)、databases
设置数据库的数量。默认数据库是 0 号数据库。
可以使用select dbid
在每个连接的基础上选择一个不同的数据库,其中dbid
是介于0
和'databases'-1
之间的数字 。
⭐️ (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脚本详解
九、分布式锁
相关文章:

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 分布式…...

首次建站用香港服务器有影响没?
对于首次租用香港服务器的朋友来说,难免会对它没有一个很清晰的认知。因此,本文就从香港服务器适用人群,以及建站影响,选择技巧上做一个全方位的解答。 1. 哪一类人群适合使用香港服务器建站? 做外贸业务的网站。香港走的国…...

大数据Flink(九十八):SQL函数的归类和引用方式
文章目录 SQL函数的归类和引用方式 一、SQL 函数的归类...

Python文件共享+cpolar内网穿透:轻松实现公网访问
文章目录 1.前言2.本地文件服务器搭建2.1.Python的安装和设置2.2.cpolar的安装和注册 3.本地文件服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用&#…...

Flink之源算子Data Source
源算子Data Source 概述内置Data Source基于集合构建基于文件构建基于Socket构建 自定义Data SourceSourceFunctionRichSourceFunction 常见连接器第三方系统连接器File Source连接器DataGen Source连接器Kafka Source连接器RabbitMQ Source连接器MongoDB Source连接器 概述 Fl…...

在雷电模拟器9上安装magisk并安装LSPosed模块以及其Manager管理器(一)
环境:win10 64,雷电模拟器9.0.60(9),Android 9。 之前我都是用雷电模拟器版本4.0.78,Android版本7.1.2,为什么本篇要使用9了呢?先解答下这个问题。原因如下:经过我的测试,LSPosed不支…...

Apache atlas 元数据管理治理平台使用和架构
1、前言 Apache Atlas 是托管于 Apache 旗下的一款元数据管理和治理的产品,目前在大数据领域应用颇为广泛,可以很好的帮助企业管理数据资产,并对这些资产进行分类和治理,为数据分析,数据治理提供高质量的元数据信息。…...

MFF论文笔记
论文名称:Improving Pixel-based MIM by Reducing Wasted Modeling Capability_发表时间:ICCV2023 作者及组织:上海人工智能实验室,西门菲沙大学,香港中文大学 问题与贡献 MIM(Model Maksed Model)方法可以分为两部分…...

Leetcode 02.07 链表相交(链表)
Leetcode 02.07 链表相交(链表) 解法1 尾部对齐解法2:太厉害了,数学归纳推导的方法 很巧妙,这就是将链表的尾端对齐后再一起遍历,这样能满足题目的要求。因为相交之后两个链表到结束的所有节点都一样了&…...

Bootstrap的媒体对象组件(图文展示组件),挺有用的一个组件。
Bootstrap的.media类是用于创建媒体对象的,媒体对象通常用于展示图像(图片)和文本内容的组合,这种布局在展示新闻文章、博客帖子等方面非常常见。.media类使得创建这样的媒体对象非常简单,通常包含一个图像和相关的文本…...

Day2力扣打卡
打卡记录 无限数组的最短子数组(滑动窗口) 链接 思路:先求单个数组的总和,再对两个重复数组所组成的新数组上使用 不定长的滑动窗口 来求得满足目标的最小长度。 class Solution { public:int minSizeSubarray(vector<int>…...

项目经理每天,每周,每月的工作清单
很多不懂项目管理的伙伴问,项目经理每天每周每个月的工作是什么呢? 仿佛他们什么都管,但是又没有具体的产出,但是每天看他们比谁都忙,其实很简单,项目中的每个环节负责具体的事情,但是每个环节…...

Java —— 运算符
目录 1. 什么是运算符 2. 算术运算符 2.1 基本四则运算符: 加减乘除模( - * / %) 2.2 增量运算符 - * %与 自增/自减运算符 -- 3. 关系运算符 4. 逻辑运算符 4.1 逻辑与 && 4.2 逻辑或|| 4.3 逻辑非 ! 4.4 短路求值 5. 位运算符 5.1 按位与 & 5.2 按位或 5.3 按位…...

【C++ 中的友元函数:解密其神秘面纱】
友元函数,作为C中一个重要但常常被误解的概念,经常让初学者感到困惑。本文将带您逐步了解友元函数的含义、用途以及如何正确使用它们。 什么是友元函数? 在C中,友元函数是一种特殊的函数,它允许某个类或类的成员函数…...

YOLOv8涨点技巧:手把手教程,注意力机制如何在不同数据集上实现涨点的工作,内涵多种网络改进方法
💡💡💡本文独家改进:手把手教程,解决注意力机制引入到YOLOv8在自己数据集不涨点的问题点,本文提供五种改进方法来解决此问题; ContextAggregation | 亲测在血细胞检测项目中涨点,…...

牛客:FZ12 牛牛的顺时针遍历
FZ12 牛牛的顺时针遍历 文章目录 FZ12 牛牛的顺时针遍历题目描述题解思路题解代码 题目描述 题解思路 通过一个变量来记录当前方向,遍历矩阵,每次遍历一条边,将该边的信息加入到结果中 题解代码 func spiralOrder(matrix [][]int) []int {…...

函数防抖(javaScript)
防抖说明 (1)防抖的目的: 当多次执行某一个动作的时候,限制函数调用的次数,节约资源。 (2)防抖的概念: 函数防抖(debounce):就是指触发事件后&…...

日常学习记录随笔-redis实战
redis的持久化(rdb,aof,混合持久化) redis的主从架构以及redis的哨兵架构 redis的clusterredis 是要做持久化的,一般用redis会把数据放到缓存中为了提升系统的性能 如果redis没有持久化,重启的化数据就会丢失,所有的请…...

MySQL事务MVCC详解
一、概述 MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制机制。主要是通过数据多版本来实现读-写分离,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读,从而提高数据库并发性能。 MVCC只在已提交读(…...

SQL RDBMS 概念
SQL RDBMS 概念 RDBMS是关系数据库管理系统(Relational Database Management System)的缩写。 RDBMS是SQL的基础,也是所有现代数据库系统(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基础。 关系数据库管理系统(Relational Database Management Sy…...

onlyoffice的介绍搭建、集成过程。Windows、Linux
文章目录 什么是onlyoffice功能系统要求安装必备组件 windows搭建资源下载安装数据库onlyoffice安装测试 Linux搭建dockerdocker-compose 项目中用到的技术,做个笔记哈~ 什么是onlyoffice 在本地服务器上安装ONLYOFFICE Docs Community Edition Community Edition…...

37. 解数独
编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分空…...

git cherry-pick 合并某次提交
一、无冲突的情况 1、合并其它分支某次提交 切换到主分支,想把其他分支的某次commit修改 合并到主分支上, 可以用 git cherry-pick 命令 比如,其它分支,某次提交的commit Hash 是30e48158badc39801f1ce3cb375a07b872d6f220 &a…...

【面试HOT100】子串普通数组矩阵
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于LeetCodeHot100进行的,每个知识点的修正和深入主要参考…...

XPSpeak软件教程-科学指南针
在做X 射线光电子能谱(XPS)测试时,科学指南针检测平台工作人员在与很多同学沟通中了解到,好多同学仅仅是通过文献或者师兄师姐的推荐对XPS测试有了解,但是对于其软件操作还属于小白阶段,针对此,科学指南针检测平台团队…...

NLP算法面经 | 腾讯 VS 美团
作者 | 曾同学 编辑 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中 后台回复『面试』加入讨论组交流噢 lz从3月初脚因打球扭伤了开始,投递简历,接二连三的面试鞭尸又面试,昨天才终于上岸了,分享经验~ 腾讯PCG看点&…...

【广州华锐互动】塔吊多人安拆VR互动培训系统
塔吊多人安拆VR互动培训系统由广州华锐互动制作,是一种基于VR技术的模拟实训系统,专门用于培训塔吊驾驶员和操作员。 在现实生活中,塔吊操作具有一定的危险性,尤其是在培训过程中容易发生意外。而使用VR互动实训系统,学…...

Linux性能优化--性能工具:特定进程内存
5.0 概述 本章介绍的工具使你能诊断应用程序与内存子系统之间的交互,该子系统由Linux内核和CPU管理。由于内存子系统的不同层次在性能上有数量级的差异,因此,修复应用程序使其有效地使用内存子系统会对程序性能产生巨大的影响。 阅读本章后&…...

MyLife - Docker安装rabbitmq
Docker安装rabbitmq 个人觉得像rabbitmq之类的基础设施在线上环境直接物理机安装使用可能会好些。但是在开发测试环境用docker容器还是比较方便的。这里学习下docker安装rabbitmq使用。 1. rabbitmq 镜像库地址 rabbitmq 镜像库地址:https://hub.docker.com/_/rabbi…...

Leetcode刷题详解——长度最小的子数组
1. 题目链接:209. 长度最小的子数组 2. 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不…...