admin管理员组文章数量:1651767
文章目录
- 前言
- 一 Redis概述
- 1.1 Redis简介
- 1.2 Redis用途
- 1.3 Redis特性
- 1.4 Redis的IO模型
- 1.4.1 单线程模型
- 1.4.2 混合线程模型
- 1.4.3 多线程模型
- 1.4.4 Redis的IO模型优缺点总结
- 1.5 相关学习网站
- 1.6 补充【RDB,AOF】
- 三 旧版Redis安装【Window环境】
- 四 最新版Redis安装【Linux环境】
- 4.1 GCC安装
- 4.2 Redis下载和解压
- 4.3 Redis编译和安装
- 五 Redis启动与停止
- 5.1 前台启动式
- 5.2 停止进程的方式(一)
- 5.3 命令后台启动式
- 5.4 停止进程的方式(二)
- 5.5 配置式启动
- 六 客户端链接前的配置
- 6.0 提示
- 6.1 配置客户端IP
- 6.2 关闭保护模式
- 6.3 设置访问密码
- 6.4 禁止/重命名命令
- 七 客户端
- 7.1 命令行客户端
- 7.2 图形界面客户端
- 7.2.1 RESP【推荐】
- 7.2.2 Resp链接失败问题的解决【开放Redis默认端口】
- 7.2.3 RedisPlus
- 7.2.4 Java 代码客户端
前言
- 学习的环境为Linux环境下的Redis
一 Redis概述
1.1 Redis简介
- Redis(Remote Dictionary Server ):远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- 由意大利人 Salvatore Sanfilippo(又名 Antirez)开发
- redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
- Redis 之所以称之为字典服务,是因为 Redis 是一个 key-value 存储系统。支持存储的 value类型很多,包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等
1.2 Redis用途
- 总结:内存存储和持久化(RDB,AOF)
- redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
- 内存的弊端是断电即失,所以持久化格外重要!
- Redis 在生产中使用最多的场景就是做数据缓存。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了 RT,而且降低了 DBMS 的压力。
- 根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类:实时同步缓存,与阶段性同步缓存
- 实时同步缓存:DBMS 中数据更新后,Redis 缓存中的存放的相关数据会被立即清除,以促使再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis。
- 阶段性同步缓存:Redis 缓存中的数据允许在一段时间内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的过期时间。
1.3 Redis特性
- 多样的数据结构:Redis 是一个 key-value 存储系统。支持存储的 value 类型很多,包括String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等,还有 BitMap、HyperLogLog、Geospatial 类型。
- BitMap:一般用于大数据量的二值性统计。
- HyperLogLog:其是 Hyperlog Log,用于对数据量超级庞大的日志做去重统计。
- Geospatial:地理空间,其主要用于地理位置相关的计算。
- 持久化:Redis 内存中的数据可以进行持久化,其有两种方式:RDB 与 AOF。
- 高可用集群:Redis 提供了高可用的主从集群功能,可以确保系统的安全性。
- 强大的功能:Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持 Lua脚本扩展功能。
- 性能极高:Redis 读的速度可以达到 11w 次/s,写的速度可以达到 8w 次/s。
- Redis 源码非常精细(集性能与优雅于一身)
1.4 Redis的IO模型
- Redis 客户端提交的各种请求是如何最终被 Redis 处理的?
- Redis 处理客户端请求所采用的处理架构,称为 Redis 的 IO 模型。
- 不同版本的 Redis 采用的 IO 模型是不同的。
1.4.1 单线程模型
- 对于 Redis 3.0 及其以前版本,Redis 的 IO 模型采用的是纯粹的单线程模型。即所有客户端的请求全部由一个线程处理。
- Redis 的单线程模型采用了多路复用技术
- 补充内容:
- 对于多路复用器的多路选择算法常见的有三种:select 模型、poll 模型、epoll 模型。
- poll 模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是有延迟的。
- epoll 模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同,
又可分为 LT 模型与 ET 模型。
- 每个客户端若要向 Redis 提交请求,都需要与 Redis 建立一个 socket 连接,并向事件分发器注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个唯一的线程来处理。如果该线程还在处理多个任务,则将该任务写入到任务队列等待线程处理。
- 之所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交由不同的事件处理器去处理。
1.4.2 混合线程模型
- **从 Redis 4.0 版本开始,Redis 中就开始加入了多线程元素。****处理客户端请求的仍是单线程模型,但对于一些比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。**例如,持久化、对 AOF 的 rewrite、对失效连接的清理等。
1.4.3 多线程模型
- Redis 6.0 版本,才是真正意义上的多线程模型。因为其对于客户端请求的处理采用的是多线程模型
- 多线程 IO 模型中的“多线程”仅用于接受、解析客户端的请求,然后将解析出的请求写入到任务队列。而对具体任务(命令)的处理,仍是由主线程处理。这样做使得用户无需考虑线程安全问题,无需考虑事务控制,无需考虑像 LPUSH/LPOP 等命令的执行顺序问题。
1.4.4 Redis的IO模型优缺点总结
- 单线程模型
- 优点:
- 可维护性高,性能高。不存在并发读写情况,所以也就不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销。
- 缺点:
- 性能会受到影响,且由于单线程只能使用一个处理器,处理器的利用率较低。
- 优点:
- 多线程模型
- 优点:其结合了多线程与单线程的优点,避开了它们的不足
- 缺点:并非是一个真正意义上的“多线程”,因为真正处理“任务”的线程仍是单线程。其对性能有些影响!
1.5 相关学习网站
- Redis官网
- Redis中文网
- Redis下载地址
1.6 补充【RDB,AOF】
- RDB
- RDB是Redis的一种数据持久化到磁盘的策略,是一种以内存快照形式保存Redis数据的方式。所谓快照,就是把某一时刻的状态以文件的形式进行全量备份到磁盘,这个快照文件就称为RDB文件,其中RDB是Redis DataBase的缩写。
- AOF 😦 append only file )持久化以独立日志的方式记录每次写命令,并在 Redis 重启时在重新执行 AOF 文件中的命令以达到恢复数据的目的。AOF 的主要作用是解决数据持久化的实时性。
三 旧版Redis安装【Window环境】
- 下载安装包Redis下载地址
- 将下载下来的压缩包解压后放到,自定义
environment
目录下【这里以本人为例,当然放在一个规范的目录,以保持整洁也是十分重要的】
- 双击
redis-server.exe
运行redis
- 使用客户端连接Redis
四 最新版Redis安装【Linux环境】
4.1 GCC安装
- GCC【(GNU Compiler Collection)GNU 编译器集合】。
- **Redis 是由 C语言编写的,而从官网下载的 Redis 安装包是需要编译后才可安装的,所以对其进行编译就必须要使用相关编译器。**对于 C语言的编译器,使用最多的是gcc所以首先要安装GCC编译器。
- 安装
gcc
编译器命令# 这里提供两个安装的命令,任选其一即可 # 命令一: yum install -y gcc tcl # 命令二: yum -y install gcc gcc-c++
- 演示【作者使用的是命令一】
4.2 Redis下载和解压
- 在Redis下载地址下载Redis安装文件,并将压缩文件上传到
/usr
目录下 - 解压
- 解压的命令为
tar -zxvf redis-7.0.8.tar.gz
,
[root@kongyue ~]# cd /usr [root@kongyue usr]# tar -zxvf redis-7.0.8.tar.gz
- 解压的命令为
4.3 Redis编译和安装
- 编译和安装的命令可以在一块执行【进入到解压目录中,然后执行编译命令】
make && make install
- 如果想一步步执行也可以,请阅读下面的详细过程
- 编译过程是根据 Redis 解压包中
Makefile
文件进行的,所以可以直接进行编译
- 进入到解压目录中,然后执行编译命令
make
[root@kongyue redis-7.0.8]# make
- 编译成功标志
- 编译成功标志
- 对于编译过的安装包执行 make install 进行安装
[root@kongyue redis-7.0.8]# make install
- 查看
/usr/local/bin
目录[root@kongyue redis-7.0.8]# ll /usr/local/bin 总用量 21524 -rwxr-xr-x. 1 root root 5197776 2月 2 22:08 redis-benchmark lrwxrwxrwx. 1 root root 12 2月 2 22:08 redis-check-aof -> redis-server lrwxrwxrwx. 1 root root 12 2月 2 22:08 redis-check-rdb -> redis-server -rwxr-xr-x. 1 root root 5411112 2月 2 22:08 redis-cli lrwxrwxrwx. 1 root root 12 2月 2 22:08 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 11426776 2月 2 22:08 redis-server
- 通过
echo $PATH
可以看到,/usr/local/bin 目录是存在于该系统变量中这样这些命令就可以在任意目录中执行!!!
- 通过
五 Redis启动与停止
5.1 前台启动式
- 在任意目录执行
redis-server
命令即可启动Redis- 这种启动方式会占用当前命令行窗口
[root@kongyue redis-7.0.8]# redis-server
- 查看启动的进程
ps -aux|grep redis
5.2 停止进程的方式(一)
- 通过
Ctrl + C
命令可以停止Redis
5.3 命令后台启动式
nohup redis-server &
- 使用
nohup redis-server &
命令,使要启动的程序在后台以守护进程方式运行。 - 进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个 nohup.out 文件用于记录 Redis 的操作日志。
5.4 停止进程的方式(二)
- 通过
redis-cli shutdown
命令可以停止 Redis。
redis-cli shutdown
5.5 配置式启动
- 通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台启动的目的。
- redis.conf 文件在Redis 的安装目录根下
# 修改配置文件中的daemonize [root@kongyue /]# vim /usr/redis-7.0.8/redis.conf
- 将 daemonize 属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行
- 修改后再启动 Redis,就无需再键入 nohup 与&符了,但必须要指定启动所使用的 Redis配置文件
- 原因
- 使用 nohup redis-server &命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的默认值,Redis 会按照这些设置的参数进行启动。但这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件,这样,配置文件中的参数值将覆盖原默认值。
- Redis 已经给我们提供好了配置文件模板,是 Redis 安装目录的根目录下的 redis.conf 文件。由于刚刚对 redis.conf 配置文件做了修改,所以在开启 Redis 时需要显示指出要加载的配置文件。配置文件应紧跟在 redis-server 的后面。
- 注意:要进入Redis目录进行配置,否则命令无效
六 客户端链接前的配置
6.0 提示
- 这里的学习需要熟练使用 V i m Vim Vim编辑器,如果有所遗忘的话请移步Linux学习之常用基本命令【2】
- 常用命令
:set nu
显示行号/bind
查找bind字符串
6.1 配置客户端IP
- Redis 可以通过修改配置文件
redis.conf
来限定可以访问自己的客户端 IP - 允许所有客户端访问配置方法:将客户端IP限制注释掉
vim /usr/redis-7.0.8/redis.conf
6.2 关闭保护模式
- 默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。
- 但生产中应该关闭,以确保其它客户端可以连接 Redis。
- 通过修改配置文件
redis.conf
的protected-mode
的属性为no
6.3 设置访问密码
- 为 Redis 设置访问密码,可以对要读/写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis,但无法访问。
- 没有通过密码登录的用户,无法读/写 Redis
[root@kongyue /]# redis-cli 127.0.0.1:6379> set name yang (error) NOAUTH Authentication required. 127.0.0.1:6379> get name (error) NOAUTH Authentication required.
- 对于密码的使用,有两种方式:
- 登录时未使用密码,则访问时先输入密码;
127.0.0.1:6379> auth 111 OK 127.0.0.1:6379> set name yang OK 127.0.0.1:6379> get name "yang"
- 登录时直接使用密码登录,访问时无需再输入密码
redis-cli -a 111
- 退出时使用密码
[root@kongyue redis-7.0.8]# redis-cli -a 111 shutdown Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
6.4 禁止/重命名命令
- flushal 与 flushdb都是用于直接删除整个 Redis数据库的
- 若让用户可以随便使用它们,可能会危及数据安全。Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。
- 以下配置,禁用了
flushall
与flushdb
命令 - 在学习过程中暂时不禁用它们
七 客户端
- 记得先启动redis服务
7.1 命令行客户端
- Redis 提供了基本的命令行客户端。
- 打开命令行客户端的命令为
redis-cli
- -h:指定要连接的 Redis 服务器的 IP。
- -p:指定要连接的 Redis 的端口号。
- 若连接的是本机 Redis,且端口号没有改变,保持默认的 6379,则-h 与-p 选项可以省略不写
7.2 图形界面客户端
7.2.1 RESP【推荐】
- Redis Desktop Manager 2022下载
7.2.2 Resp链接失败问题的解决【开放Redis默认端口】
-
执行命令 查看端口状态
firewall-cmd --query-port=6379/tcp
[root@kongyue redis-7.0.8]# firewall-cmd --query-port=6379/tcp no
- 目前Linux的6379端口为关闭状态
-
开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
[root@kongyue redis-7.0.8]# firewall-cmd --zone=public --add-port=6379/tcp --permanent success
-
永久打开端口
firewall-cmd --reload
[root@kongyue redis-7.0.8]# firewall-cmd --reload success
-
再执行命令,查看端口状态,端口状态为yes说明成功
firewall-cmd --query-port=6379/tcp
[root@kongyue redis-7.0.8]# firewall-cmd --query-port=6379/tcp yes
-
重启虚拟机
reboot
-
启动redis服务
- 注意在
redis
目录下进行执行
redis-server redis.conf
- 注意在
7.2.3 RedisPlus
- RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux、Mac 三大系统平台,RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
- RedisPlus 下载地址
7.2.4 Java 代码客户端
- Java 代码客户端就是一套操作 Redis 的 API,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
- 对 Redis 操作的 API 很多,例如 jdbc-redis、jredis 等,但最常用也是最有名的是 Jedis。
版权声明:本文标题:Redis学习【2】之入门 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729566791a1206599.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论