signed

QiShunwang

“诚信为本、客户至上”

Redis前言及安装

2021/3/21 3:06:48   来源:

前言

​ 对于所有网站来说,网站的数据是必须要持久化的,同时要为客户提供低延迟,快速的响应,单纯使用关系型数据库进行支持,随着网站的发展,数据量的日益增加,会导致数据查询数据读,极大的降低用户的体验。

​ 我们都知道,数据的查询限制于寻址与带宽,同时数据在磁盘上,与在内存中查询速度是存在极大的差别的(磁盘上数据的查询,要比内存中数据的查询慢10W倍),以MySQL为例,作为关系型数据库代表,MySQL的数据都是要写到磁盘上的,在于查询时,MySQL会通过维护的B+Tree数据结构,通过索引定位到磁盘的某一磁块上,但是索引依然是持久化在磁盘上的,所以会出现先读取索引,到内存进行计算,之后,通过索引读取数据,然而当数据量变大时,随着频繁的到磁盘的IO读取,受限于磁盘带宽等因素的影响,查询速度必然会急速下降,但是内存的寻址与带宽,要远高于数据库,所以我们可以将一些热数据存放在内存中,以提升查询数据,提升用户响应。

​ 从网络IO方面讲,每一次查询都是需要与数据库服务器建立连接,虽然这些连接可以复用,但是当大量查询达到时,在某一刻,连接数依然会被占满,只有数据库服务器对于连接内部数据的操作足够快,才可以更高效的对外提供服务,因为关系型持久化数据库,致力于数据的强一致性,所以当对关系型数据库进行增删改操作时,修改的不仅仅是数据,同时DBServer会修正索引,使得每次操作进行的并不是很快,所以现如今的系统设计架构,都是尽可能的使有效的、大量的请求,依次访问数据库,不会对数据库造成瞬间的并发请求,导致数据库宕机,其实可以实现这些的方法很多,例如:Redis(针对查询操作,也可以实现MQ的功能)、MQ(针对大量的写操作),分层架构,通过接入层进行分发等操作都可以实现。

​ 作为DB-Engine中key-value第一的Redis当然是在系统架构中必不可少的一个环节,学习使用redis是作为后端程序员必须掌握的技能

以下数据摘自 https://db-engines.com/en/ranking/key-value+store

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Redis 相关介绍

以下摘自Redis中文官网 http://redis.cn/

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

​ 通过以上简单介绍,可以了解到Redis不仅仅可以作为缓存存在,同时可以作为数据库(数据最终一致性的|持久化),内部提供了对数据数据的操作,可以实现计算向数据移动(网络IO的降低),提供了集群的支持,及分布式下高可用的实现,以及用户可以通过LUA脚本进行自定义操作。

Redis 安装

测试使用CentOS 7 Redis为redis-6.2.1版本

前置操作 下载安装数据包

  • 官网下载 https://download.redis.io/releases/redis-6.2.1.tar.gz

  • # 使用 wget 下载
    yum install -y wget
    wget https://download.redis.io/releases/redis-6.2.1.tar.gz
    

安装

1、Redis6.x 需要使用更高版本gcc,CentOS 7 自带gcc版本为4.8.5 需要升级gcc

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
gcc -v

2、解压

mkdir -p /opt/soft/redis
cd /opt/soft/redis
# wget 下载 或 上传安装包到服务器
tar xf redis-6.2.1.tar.gz
cd redis-6.2.1.tar.gz

3、常用目录|文件:

-rw-rw-r--.  1 root root   151 3月   2 14:14 Makefile		# make 指引文件
-rw-rw-r--.  1 root root  6888 3月   2 14:14 MANIFESTO
-rw-rw-r--.  1 root root 21594 3月   2 14:14 README.md	
-rw-rw-r--.  1 root root 92222 3月   2 14:14 redis.conf		# redis 默认配置文件
-rw-rw-r--.  1 root root 13768 3月   2 14:14 sentinel.conf 	# redis-sentinel 哨兵配置文件
drwxrwxr-x.  3 root root  4096 3月   2 14:14 src				# 源码包
drwxrwxr-x.  9 root root  4096 3月   2 14:14 utils			# 工具包

4、安装

# 如果make出错,可能需要清理缓存 make distclean 一般问题出在gcc版本低
make		 # 通过MAKEFILE指引执行 src/MAKEFILE 
# 将redis命令安装到 /usr/local/bin(默认路径)可以通过选项指定目录,或修改src/MAKEFILE下的PREFIX值修改安装路径
make install [PREFIX=path]
# 那么现在可以使用 redis-server 前台启动redis服务

5、可选操作,将Redis作为系统服务运行

# 因为redis是单处理进程,单实例的一个服务器可以使用不同的端口,不同的配置文件启动多个redis实例
# 我们更希望Redis作为后台系统进程进行运行,可以通过一下步骤操作
# 之后可以通过 systemctl 或 service 启动服务

# 首先需要修改 /etc/profile 文件 redis可执行文件路径
REDIS_HOME=/usr/local
export PATH=$PATH:$REDIS_HOME/bin
# 或者 source /etc/profile 刷新
. /etc/profile
cd ./utils
# 修改Redis提供的install_server.sh 文件
# 因为 CentOS 默认使用systemd 为系统的启动和管理提供一套完整的解决方案。
# 关于systemd介绍 : http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
vim install_server.sh
# 注释掉 78 ~ 83 行
 78 #if [ "${_pid_1_exe##*/}" = systemd ]
 79 #then
 80 #       echo "This systems seems to use systemd."
 81 #       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorr    y!"
 82 #       exit 1
 83 #fi
 
#  执行安装程序
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 			# 配置 redis_6379 实例端口
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] # redis_6379 配置文件路径
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] # redis_6379 日志
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] # redis_6379 数据存储目录 dump.rdb文件 application.aof文件存放路径 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] # 启动指令
# 输出所有配置
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! 
# 之后我们可以通过 systemctl [start|status|stop] redis_6379 或者 service redis_6379 [start|status|stop] 进行对 redis_6379 的操作
# 之后可以通过 这个 install_server.sh 文件配置多个redis实例
systemctl start redis_6379
systemctl status redis_6379

● redis_6379.service - LSB: start and stop redis_6379
   Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled)
   Active: active (exited) since 日 2021-03-21 01:07:19 CST; 879ms ago
     Docs: man:systemd-sysv-generator(8)
  Process: 24876 ExecStart=/etc/rc.d/init.d/redis_6379 start (code=exited, status=0/SUCCESS)

3月 21 01:07:19 yukun systemd[1]: Starting LSB: start and stop redis_6379...
3月 21 01:07:19 yukun redis_6379[24876]: /var/run/redis_6379.pid exists, process is already running or crashed
3月 21 01:07:19 yukun systemd[1]: Started LSB: start and stop redis_6379.

/var/run/redis_6379.pid exists, process is already running or crashed
3月 21 01:07:19 yukun systemd[1]: Started LSB: start and stop redis_6379.