一、Redis入门概述
1.1 Redis 是什么?
Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案
1.2 Redis 有什么作用?
- 我们先介绍一下Redis数据库与传统数据库(MySQL)之间的关系:
Redis | MySQL |
一种NoSQL的key-value数据库 | 一种关系型数据库 |
存储在内存 | 存储在磁盘 |
Redis在某一些场景使用中要明显优于mysql,比如计数器、排行榜等方面
Redis通常用于一些特定场景,需要与Mysql一起配合使用
两者并不是相互替换和竞争关系,而是共用和配合使用
- 作用如下:
- 可以做分布式缓存,逻辑位置在MySQL之前,减轻MySQL访问(数据操作)压力
- 支持内存存储和持久化(RDB + AOF),Redis支持异步将内存中的数据写到磁盘上,不影响正常的服务
- 支持高可用架构搭配:单机、主从、哨兵、集群
- 也可以解决缓存穿透、击穿、雪崩等问题
- 支持分布式锁、队列等
1.3 Redis 作为数据库有哪些优势?
- Redis 读的速度可以达到 110000次/秒,写的速度可以达到 8100 次/秒 【高性能】
- 支持多种数据类型,例如:key-v,set,list,zsit,hash 等
- Redis 支持数据持久化,可以将内存中的数据写入磁盘中,重启的时候可以再次加载进行使用
- Redis 支持数据的备份 【master-slave模式的数据备份】
1.4 Redis 下载 与 Redis7新特性:
- 版本号第二位如果是奇数,则为非稳定版本 如2.7、2.9、3.1
- 版本号第二位如果是偶数,则为稳定版本 如2.6、2.8、3.0、3.2
- 从 Redis6 到 Redis7 的部分新特性介绍:
- Redis Functions
- Client-eviction
- Multipart AOF
- ACL V2
- 新增命令
- listpack 代替 ziplist 【在7.0版本已经没有了ziplist的相关配置】
- 底层性能提升
- 翻译为:
- 总体概述:大体和之前的redis版本保持一致和稳定,主要是自身底层性能和资源利用率上的优化和提高
多AOF文件支持 | 7.0 版本中一个比较大的变化就是 aof 文件由一个变成了多个,主要分为两种类型:基本文件(base files)、增量文件(incr files),请注意这些文件名称是复数形式说明每一类文件不仅仅只有一个。在此之外还引入了一个清单文件(manifest) 用于跟踪文件以及文件的创建和应用顺序(恢复) |
config命令增强 | 对于Config Set 和Get命令,支持在一次调用过程中传递多个配置参数。例如,现在我们可以在执行一次Config Set命令中更改多个参数: config set maxmemory 10000001 maxmemory-clients 50% port 6399 |
限制客户端内存使用 Client-eviction | 一旦 Redis 连接较多,再加上每个连接的内存占用都比较大的时候, Redis总连接内存占用可能会达到maxmemory的上限,可以增加允许限制所有客户端的总内存使用量配置项,redis.config 中对应的配置项// 两种配置形式:指定内存大小、基于 maxmemory 的百分比。maxmemory-clients 1gmaxmemory-clients 10% |
listpack紧凑列表调整 | listpack 是用来替代 ziplist 的新数据结构,在 7.0 版本已经没有 ziplist 的配置了(6.0版本仅部分数据类型作为过渡阶段在使用)listpack 已经替换了 ziplist 类似 hash-max-ziplist-entries 的配置 |
访问安全性增强ACLV2 | 在redis.conf配置文件中,protected-mode默认为yes,只有当你希望你的客户端在没有授权的情况下可以连接到Redis server的时候可以将protected-mode设置为no |
Redis Functions | Redis函数,一种新的通过服务端脚本扩展Redis的方式,函数与数据本身一起存储。简言之,redis自己要去抢夺Lua脚本的饭碗 |
RDB保存时间调整 | 将持久化文件RDB的保存规则发生了改变,尤其是时间记录频度变化 |
命令新增和变动 | Zset (有序集合)增加 ZMPOP、BZMPOP、ZINTERCARD 等命令,Set (集合)增加 SINTERCARD 命令LIST (列表)增加 LMPOP、BLMPOP ,从提供的键名列表中的第一个非空列表键中弹出一个或多个元素。 |
性能资源利用率、安全、等改进 | 自身底层部分优化改动,Redis核心在许多方面进行了重构和改进,主动碎片整理V2:增强版主动碎片整理,配合Jemalloc版本更新,更快更智能,延时更低,HyperLogLog改进:在Redis5.0中,HyperLogLog算法得到改进,优化了计数统计时的内存使用效率,7更加优秀,更好的内存统计报告,如果不为了API向后兼容,我们将不再使用slave一词…(政治正确) |
二、安装配置
2.1 准备工作
- 此处是通过 VMWare 创建 CentOS 虚拟机,然后再安装配置 Redis 为例 【默认电脑里面已经安装好了虚拟机】
- 安装 Redis 的前提是具备 gcc 编译环境:
- 我们可以通过
gcc -v
查看 gcc 的版本以及是否配备了 gcc 【推荐版本在 3.8.4 以上(不包括这个版本)】 - 通过
yum install gcc- c++
安装 c++ 编译环境 - 安装结束后,再次通过
gcc --version
查看
2.2 具体配置环节
我们要将下好的 Redis 的压缩包放到我们Linux操作系统的 /opt 目录下
- 如果是在 Windows 里下载的压缩包,那么如何传递到自己的虚拟机中呢?
- 此处我通过 Xftp 软件,将虚拟机与本地主机连接起来,实现文件拖拽快速传输
- 首先新建连接,输入我们虚拟机的 ip 【可以在终端中通过 ipconfig 查看】
- 然后输入我们的登录账户和密码,就可以创建连接
- 连接成功后可以直接把我们想要放到虚拟机中的文件发送过去
- 先通过
cd xxx
指令进入到我们Redis压缩包所在的目录 【先要使用su -
指令,然后输入管理员密码切换用户身份,以防后面操作权限不够】 - 通过
mv redis-7.0.10.tar.gz /opt
指令将文件移动到 /opt 目录下 - 然后通过
tar -zxvf redis-7.0.10.tar.gz
s 解压压缩包,解压成后通过cd redis-7.0.10
指令进入该目录 - 通过
make && make install
指令开始编译并进行默认路径安装 【默认路径为 /usr/local 相当于 Windows 中的 C:\ProgramFile】 - 我们需要通过
mkdir /myredis
指令创建一个存放配置文件的文件夹
- 然后通过
cp redis.config /myredis/redis7.config
指令将我们 redis-7.0.10 目录下的配置文件拷贝过去
- 接下来就是修改我们拷贝过来的配置文件:
- 通过
cd /myredis
指令来到我们的配置类目录 - 通过
vim redis7.config
来编辑修改我们的 redis 配置文件
- 进入配置文件后在键盘输入
:set nu
回车,可以显示行数 - 键盘按 i 开启编辑模式
- 来到 1036 行,将注释掉的 requirepass 取消注释,并指定我们的密码为 111111 【去掉#号】
- 默认daemonize no 改为 daemonize yes 【大约在几十行】
- 默认protected-mode yes 改为 protected-mode no 【大约在100多行】
- 默认 bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接 【大约在300多行】
- 先按 Esc, 然后键盘输入
:wq
退出并保存修改
- 输入
reboot
指令重启虚拟机,使配置生效
- 接下来我们启动 Redis 服务:
- 在 /user/local/bin 目录下 使用
redis-server /myredis/redis7.config
指令启动服务 【如果什么都没显示,说明启动成功】
- 出现以下情况,那么就删除我们拷贝的配置文件,重新拷贝并配置
- 连接我们的 Redis 客户端:
- 通过
redis-cli -a 111111
连接我们的客户端
- 关闭 Redis 的方式:
- 单实例关闭:
redis-cli -a 111111 shutdown
- 指定端口多实例关闭:
redis-cli -p 6379 shutdown
- 卸载 Redis 的方式:
- 先停止 Redis 的服务
- 然后删除/usr/local/lib 目录下 Redis 的相关文件
- 补充知识点:
- 安装完Redis后,我们可以来到 /usr/local/bin 目录下查看具体安装了什么?