2.Redis介绍
- Redis 是由意大利人 Salvatore Sanfilippo 使用 C语言编写,它遵守 BSD 开源协议,实现了免费开源,拥有超高的性能、完美的文档和简洁易懂的源码,并且对多种编程语言提供了良好的 API 支持,比如 Java,C/C++,C#,PHP,JavaScript,Perl,Python,Ruby 等,之后会说明 Python、Java、PHP 这三种编程语言如何使用 Redis。
- Redis(Remote Dictionary Server)译为“远程字典服务”,它是一款高性能基于内存实现的键值型、日志型非关系(NoSQL)数据库,支持网络分布式,通常也被称为数据结构服务器,这是因为它可以存储多种数据类型,比如 string(字符串),hash(哈希散列),list(列表),set(集合)和 sorted set(有序集合)等。
- Redis官网(https://redis.io/)提供了完善的社区环境、文档说明,以及更新支持。现在最新稳定版是7.0.5。自 2010 年 3 月 15 日起,Redis 的开发工作由 VMware(威睿)公司主持。关于 Redis 数据库下载和安装,目前官方网站,只提供了 Linux 版本的下载安装包。Windows 系统可以下载安装非官方的 Redis 版本,不过其使用性能远不如 Linux 系统。
常见的内存型数据库,除 Redis 之外,还有 Oracle Berkeley DB(甲骨文旗下的一款产品)、SQlite(轻量级内存数据库)、Memcache(键值型分布式缓存数据库)、Altibase(基于内存的高性能数据库)。
buffers(缓冲)和 cached(缓存)的区别:
cached 是给读取数据时加速的,buffers 是给写入数据加速的。cached 是指把读取出来的数据保存在内存中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程;buffers 是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度后再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。
-
与其他内存型数据库相比,Redis 具有以下特点:
- Redis支持数据的持久化: 不仅可以将数据完全保存在内存中,还可以通过磁盘实现数据的持久存储,重启的时候能够再次加载进行使用
- Redis 支持丰富的数据类型,包括 string、list、set、zset、hash 等多种数据类型,因此它也被称为“数据结构服务器”;
- Redis 支持主从同步支持数据的备份,即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;
- Redis 支持多种编程语言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等语言。
-
与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默认使用 0 库)。在同一个库中,key 是唯一存在的、不允许重复的,它就像一把“密钥”,只能打开一把“锁”。键值存储的本质就是使用 key 来标识 value,当想要检索 value 时,必须使用与 value 相对应的 key 进行查找。
-
Redis 数据库没有“表”的概念,它通过不同的数据类型来实现存储数据的需求,不同的数据类型能够适应不同的应用场景,从而满足开发者的需求。
-
Redis体系架构主要分为两个部分:
- Redis服务端
- Redis客户端
-
客户端和服务端可以位于同一台计算机上,也可以位于不同的计算机上。服务端是整个架构的“大脑”,能够把数据存储到内存中,并且起到管理数据的作用。
-
Redis 的优势:
- 性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
- 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
- 取最新N个数据的操做,如:能够将最新的10条评论的ID放在Redis的List集合里面
- 多用途工具: Redis 有很多的用途,比如可以用作数据库、高速缓存、消息队列发布订阅系统、搭建 Redis 集群、地图信息分析、计时器、计数器、对象缓存存储(会过期)等;模拟相似于HttpSession这种须要设定过时时间的功能
-
命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
- 可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
-
Redis应用场合:Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗的较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。
-
数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比:
名称 | 类型 | 数据存储选项 | 附加功能 |
---|---|---|---|
Redis | 基于内存存储的键值非关系型数据库 | 字符串、列表、散列、有序集合、无序集合 | 发布与订阅、主从复制、持久化存储等 |
Memcached | 基于内存存储的键值缓存型数据库 | 键值之间的映射 | 为提升性能构建了多线程服务器 |
MySQL | 基于磁盘的关系型数据库 | 每个数据库可以包含多个表,每个表可以包含多条记录; 支持第三方扩展。 | 支持 ACID 性质、主从复制和主主复制 |
MongoDB | 基于磁盘存储的非关系文档型数据库 | 每个数据库可以包含多个集合,每个集合可以插入多个文档 | 支持聚合操作、主从复制、分片和空间索引 |
-
Redis 基于内存来实现数据的存储,因此其速度非常快。但是计算机的内存是非常珍贵的资源,所以 Redis 不适合存储较大的文件或者二进制数据,否则会出现错误,Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB。
-
学习 Redis 相关资源推荐:
- Redis 官网:https://redis.io/
- Redis 中文网:http://www.redis.cn/
- Redis 命令在线测试:http://try.redis.io/
- Redis 命令参考:http://c.biancheng.net/redis_command/(英文)http://www.redis.cn/commands.html(中文)
2.1 win下载Redis
-
虽然 Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载 Windows 版 Redis 安装包(停更较久、兼容问题),下载地址:点击前往。Windows 安装包是根据 Redis 源码改造的,并非 Redis 官方网站提供。在 Windows 系统下安装 Redis 要比 Linux 系统安装稍微复杂一些。
-
从上诉链接下载Redis 的免安装包zip,也可以下载安装程序msi。Redis 支持 32 位和 64 位的 Window 系统。
-
解压zip文件夹,打开解压包文件目录:
2.2 创建Redis临时服务
- 启动服务端程序:双击 Redis 服务端启动程序 redis-server.exe,会看到以下界面:
显示一些 Redis 的相关信息,比如 Redis 的版本号以及默认端口号(6379)。注意,为了实现后续操作,保持服务端开启状态,否则客户端无法正常工作。
6379:来源于以为明星的名字,具有粉丝效应
- 启动客户端程序:双击客户端启动程序 redis-cli.exe,得到如下界面:
显示该界面,说明 Redis 本地客户端与服务端连接成功。
2.3 命令创建Redis服务
-
通过命令启动 Redis 服务端,并将 Redis 服务添加到 Windows 资源管理器,实现开机后自动启动。
-
注册Redis服务:通过 CMD/git bash 命令行工具进入 Redis 安装目录,将 Redis 服务注册到 Windows 服务中,执行以下命令:
redis-server.exe --service-install redis.windows.conf --loglevel verbose
执行完后,得到以下输出,说明注册成功。
- 启动Redis服务:执行以
下命令启动 Redis 服务,命令如下:
redis-server --service-start
此时 Redis 已经被添加到 Windows 服务中,因此不会再显示 Redis 服务端的相应的信息,如下图所示:
- 将 Redis 加入到环境变量中,根据自己的安装路径添加环境变量。如下所示:
- 启动Redis客户端:在 CMD/git bash 命令行输出 redis-cli 命令启动客户端,如下所示:
-
同样:输出
PING
命令来测试客户端和服务端是否成功连接。若返回PONG
则证明成功连接。 -
win平台安装Redis安装过程中涉及到的命令进行总结,主要包括以下命令:
安装服务:redis-server --service-install
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
停止服务:redis-server --service-stop
服务端启动时重命名:redis-server --service-start --service-name Redis1
2.4.linux下载安装Redis
-
相比于 Windows 系统而言,Redis 更适合于在 Linux 系统上使用,这是由 Redis 的底层机制决定的。
-
Redis 版本号采用国际标准惯例,即“主版本号
.
副版本号.
补丁级别”。副版本号是偶数表示一个标准发行版本,比如3.0,4.2,5.0,副版本号为奇数表示非标准发行版,例如 2.9.x 版本是 Redis 3.0 标准版本的非标准发行版本。版本号为偶数的相对比较稳定,而奇数一般是偶数版的测试版本。 -
Ubuntu 终端安装 Redis步骤:执行相应的命令:
#列出所有可更新的软件清单命令:
$sudo apt-get update
#安装指定的软件
$sudo apt-get install redis-server
- 启动Redis服务端:在终端输入以下命令:
$redis-server
- 启动Redis客户端:在终端输入以下命令
#若设置了密码,使用如下格式启动
$redis-cli -h [ip] -p [port] -a [password]
#简单格式
$redis-cli
#输入后,返回提示如下:
redis 127.0.0.1:6379>
注意:127.0.0.1 是本地计算机的 IP 地址,6379 是运行 Redis 服务器的默认端口号。
- 验证是否成功安装:在终端输出
PING
命令,返回如下输出:
redis 127.0.0.1:6379> ping
PONG
上述输出说明 Redis 已成功安装在计算机上。
2.5 Linux源码包安装
- centos8在 Redis 官网下载源码包进行安装,下载地址:https://redis.io/download。下载完成后执行以下命令:官网下载地址:redis或者是redis7.0.5
#进入源码包目录
[root@VM-0-3-centos ~]# cd /usr/lcoal/src
#下载redis-7.0.5.tar.gz版本
[root@VM-0-3-centos src]# wget http://download.redis.io/releases/redis-7.0.5.tar.gz
#解压安装包
[root@VM-0-3-centos src]# tar -zxvf redis-7.0.5.tar.gz
#进入解压后的文件目录
[root@VM-0-3-centos src]# cd redis-7.0.5
#这两个文件后续会用到
#redis.conf 此文件是 Redis 启动必需的一个配置文件。
#utils/redis_init_script 此文件是 Redis 的启动、中止脚本。
#编译
[root@VM-0-3-centos redis-7.0.5]# make
#若因缺少环境而编译失败,在安装c、c++后执行以下命令清除失败后的残留文件,之后在重新编译
make distclean
#安装到/usr/local/redis目录,不指定地址则安装到/usr/local/bin
[root@VM-0-3-centos redis-7.0.5]# make PREFIX=/usr/local/redis install
#配置redis环境变量,在文件 /etc/profile 的PATH追加以下redis安装目录下的bin目录位置:
[root@VM-0-3-centos ~]# vim /etc/profile
#$PATH不能丢,是linux自己的环境变量指向了/root/bin,丢了后命令无法生效
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/redis/bin
#设置环境变量生效
[root@VM-0-3-centos bin]# source /etc/profile
#查看环境变量
[root@VM-0-3-centos bin]# echo $PATH
/usr/share/Modules/bin:...:/usr/local/redis/bin
#验证环境变量
[root@VM-0-3-centos redis-7.0.5]# which redis-cli
/usr/local/redis/bin/redis-cli
- make编译前,系统需要有C语言环境,需安装C/C++
yum install gcc yum install gcc-c++
- 安装时关键字 PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径。现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。
- 测试redis-server能否启动
#在redis安装目录创建配置文件目录
[root@VM-0-3-centos redis-7.0.5]# mkdir /usr/local/redis/conf
#将redis.conf文件从解压包中复制到安装目录
[root@VM-0-3-centos redis-7.0.5]# cp /usr/local/src/redis-7.0.5/redis.conf /usr/local/redis/conf/
#进入redis安装文件配置目录
[root@VM-0-3-centos redis-7.0.5]# cd /usr/local/redis/conf
#启动redis服务端,通过指定的配置文件启动服务
[root@VM-0-3-centos conf]# redis-server redis.conf
- 出现该图说明redis安装成功,之后便是要在服务器防火墙上开放6379端口
#查看服务器开启了那些端口
[root@VM-0-3-centos ~]# firewall-cmd --list-ports
3306/tcp 80/tcp 8080/tcp
#在防火墙开放6379
[root@VM-0-3-centos ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
#添加端口后刷新防火墙
[root@VM-0-3-centos ~]# firewall-cmd --reload
success
#查询6379端口是否开放
[root@VM-0-3-centos ~]# firewall-cmd --query-port=6379/tcp
yes
-
如果是腾讯云或者阿里云,需要开放6379的端口
-
修改配置实现redis后台运行、远程连接访问,在redis的安装目录conf找到redis.conf配置文件进行修改
#进入redis的安装目录conf找到redis.conf配置文件
[root@VM-0-3-centos ~]# cd /usr/local/redis/conf
[root@VM-0-3-centos conf]# ll
total 112
-rw-r--r-- 1 root root 88 Nov 13 10:31 dump.rdb
-rw-r--r-- 1 root root 106545 Nov 13 10:17 redis.conf
#编辑redis.conf配置文件
[root@VM-0-3-centos conf]# vim redis.conf
#注释掉bind绑定的ip
#bind 127.0.0.1 -::1
#修改保护模式,不修改保护模式也是只能内网访问的 protected-mode yes 改成 protected-mode no
#daemonize no 改为yes 后台一直运行
daemonize no
//设置密码,建议设置密码,否则可能会发生一些预料不到的事情,因为6379端口有漏洞
#requirepass "你的密码"
#设置密码 为了安全一定要设,而且这里如果不绑定ip也不设密码的话,redis是默认保护模式,只能本虚拟机访问,不允许其他ip访问
- 之后在启动redis就可以远程连接redis了,在redis安装目录执行./redis-server …/redis.conf即可启动redis
[root@VM-0-3-centos conf]# pwd
/usr/local/redis/conf
#在redis安装目录执行,或直接在conf目录执行,只要加载到redis.conf配置文件即可
[root@VM-0-3-centos conf]# cd ..
#配置了redis环境变量可以直接执行redis-server命令
[root@VM-0-3-centos redis]# redis-server conf/redis.conf
#查看redis-server服务进程信息
[root@VM-0-3-centos redis]# ps aux | grep redis
root 1151504 0.0 0.4 62636 7192 ? Ssl 17:30 0:00 redis-server *:6379
root 1151865 0.0 0.0 12140 1048 pts/0 S+ 17:33 0:00 grep --color=auto redis
- 启动客户端并测试
-
- redis-cli --启动客户端(默认配置可以使用这个命令
- 没有设置为全局变量要加./ 即./redis-cli
- redis-cli -h 服务端地址 -p 端口号 – 启动客户端(指定地址和端口号) -a [password]
- ping --测试客户端,输出PONG表示成功
- exit /ctrl+c --退出客户端
[root@VM-0-3-centos redis]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
[root@VM-0-3-centos redis]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set id 123456
OK
127.0.0.1:6379> get id
"123456"
#redis-cli -h 127.0.0.1 -p 6379 -a 密码
注意:127.0.0.1 是本地计算机的 IP 地址,6379 是运行 Redis 服务器的默认端口号。
- 关闭Redis服务端
-
- 方式1:在redis客户端外关闭服务端
redis-cli shutdown
-
- 方式2:在redis客户端内关闭服务端
shutdown
#方式2
[root@VM-0-3-centos redis]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> shutdown
not connected>
#查看redis-server服务进程信息
[root@VM-0-3-centos redis]# ps aux | grep redis
root 1153119 0.0 0.0 12140 1160 pts/0 S+ 17:41 0:00 grep --color=auto redis
#启动redis
[root@VM-0-3-centos redis]# redis-server conf/redis.conf
[root@VM-0-3-centos redis]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
[root@VM-0-3-centos redis]# redis-cli shutdown
[root@VM-0-3-centos redis]# ps aux | grep redis
root 1153464 0.0 0.0 12140 1060 pts/0 S+ 17:44 0:00 grep --color=auto redis
- 设置 Redis 开机自启动
-
- 将上面提到的文件 utils/redis_init_script 复制到 Linux 的启动目录 init.d 中,并重命名为 redis。然后对其添加执行权限。
#redis-7.0.5/utils/redis_init_script文件 复制到 Linux 的启动目录 init.d 中
[root@VM-0-3-centos redis]# cp /usr/local/src/redis-7.0.5/utils/redis_init_script /etc/rc.d/init.d/redis
#添加执行权限。
[root@VM-0-3-centos redis]# chmod +x /etc/rc.d/init.d/redis
-
- 修改 文件 /etc/rc.d/init.d/redis
#EXEC:将 EXEC 行的路径改为 /usr/local/redis/bin/redis-server。
#CLIEXEC:将 CLIEXEC 行的路径改为 /usr/local/redis/bin/redis-cli。
#CONF:将 CONF 行的路径改为 “/usr/local/redis/conf/redis.conf”。
[root@VM-0-3-centos redis]# sudo vim /etc/rc.d/init.d/redis
...
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/conf/redis.conf"
#保存后,设置 Redis 开机自启动
[root@VM-0-3-centos redis]# chkconfig redis on
- 重启系统,重启后查看redis进程信息
Last login: Tue Nov 15 17:41:12 2022 from 110.19.110.205
[root@VM-0-3-centos ~]# ps aux |grep redis
root 829 0.0 0.5 62632 9936 ? Ssl 18:01 0:00 /usr/local/redis/bin/redis-server *:6379
root 2229 0.0 0.0 12140 1176 pts/0 S+ 18:02 0:00 grep --color=auto redis
说明设置 Redis 开机自启动成功