目录
一、Redis简介
1.什么是Redis
2.特点
3.优势
4.数据库对比
5.应用场景
二、 安装与配置
1.下载
2.上传解压
3.安装gcc
4.编译
5.查看安装目录
6.后端启动
7.测试
8.系统服务配置
三、Redis远程访问
1.修改访问IP地址
2.设置登录密码
3.重启Redis服务
4.配置服务器防火墙
5.使用Redis桌面管理工具连接
一、Redis简介
1.什么是Redis
Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。
NoSQL = Not Only SQL 不仅仅是SQL,非关系型数据库
Redis 遵守 BSD 协议,实现了免费开源,其最新版本是 7.0+,常用版本包括 3.0 、4.0、5.0、6.0。自 Redis 诞生以来,它以其超高的性能、完美的文档和简洁易懂的源码广受好评,国内外很多大型互联网公司都在使用 Redis,比如腾讯、阿里、Twitter、Github 等等。
2.特点
-
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 的底层是一个单线程模型,单线程指的是使用一个线程来处理所有的网络事件请求,这样就避免了多进程或者多线程切换导致的 CPU 消耗,而且也不用考虑各种锁的问题。虽然是单线程,但可以开多实例弥补
Redis 为了充分利用单线程,加快服务器的处理速度,它采用 IO 多路复用模型来处理客户端与服务端的连接,这种模型有三种实现方式,分别是 select、poll、epoll。Redis 正是采用 epoll 的方式来监控多个 IO 事件。当客户端空闲时,线程处于阻塞状态;当一个或多个 IO 事件触发时(客户端发起网路连接请求),线程就会从阻塞状态唤醒,并同时使用epoll
来轮询触发事件,并依次提交给线程处理。
注意:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路 IO 复用技术可以让单个线程高效的处理多个连接请求。
3.优势
-
性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
-
多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;
-
命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
-
可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
4.数据库对比
Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。
我们知道,数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比:
名称 | 类型 | 数据存储选项 | 附加功能 |
---|---|---|---|
Redis | 基于内存存储的键值非关系型数据库 | 字符串、列表、散列、有序集合、无序集合 | 发布与订阅、主从复制、持久化存储等 |
Memcached | 基于内存存储的键值缓存型数据库 | 键值之间的映射 | 为提升性能构建了多线程服务器 |
MySQL | 基于磁盘的关系型数据库 | 每个数据库可以包含多个表,每个表可以包含多条记录; 支持第三方扩展。 | 支持 ACID 性质、主从复制和主主复制 |
MongoDB | 基于磁盘存储的非关系文档型数据库 | 每个数据库可以包含多个集合,每个集合可以插入多个文档 | 支持聚合操作、主从复制、分片和空间索引 |
Redis 基于内存来实现数据的存储,因此其速度非常快。但是我们知道,计算机的内存是非常珍贵的资源,所以 Redis 不适合存储较大的文件或者二进制数据,否则会出现错误,Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB。
总得来说,上述数据库各有优势,当我们选用数据库时,也要因地制宜,选择一款与业务场景最相符合的数据库。
5.应用场景
-
缓存:合理的使用 缓存 能够明显加快访问的速度,同时降低数据源的压力。这也是
Redis
最常用的功能。Redis
提供了 键值过期时间(EXPIRE key seconds
)设置,并且也提供了灵活控制 最大内存 和 内存溢出 后的 淘汰策略。 -
排行榜:每个网站都有自己的排行榜,例如按照 热度排名 的排行榜,发布时间 的排行榜,答题排行榜 等等。
Redis
提供了 列表(list
)和 有序集合(zset
)数据结构,合理的使用这些数据结构,可以很方便的构建各种排行榜系统。 -
计数器:计数器在网站应用中非常重要。例如:点赞数加
1
,浏览数 加1
。还有常用的 限流操作,限制每个用户每秒 访问系统的次数 等等。Redis
支持 计数功能(INCR key
),而且计数的 性能 也非常好,计数的同时也可以设置 超时时间,这样就可以实现限流。 -
社交网络:赞/踩,粉丝,共同好友/喜好,推送,下拉刷新等是社交网站必备的功能。由于社交网站 访问量通常比较大,而且传统的数据库 不太适合保存这类数据,
Redis
提供的 数据结构 可以相对比较容易实现这些功能。 -
消息队列:
Redis
提供的 发布订阅(PUB/SUB
)和阻塞队列 的功能,虽然和专业的消息队列(RocketMQ/RabbitMQ,MQ全称:Message Queue)比,还不够强大,但对于一般的消息队列功能基本满足。
二、 安装与配置
1.下载
进入Index of /releases/对应版本的Redis服务,本篇文章使用的是redis-6.2.1
2.上传解压
将下载的redis-6.2.1.tar.gz压缩包上传至服务器
# 切换目录
cd /usr/local/mytools
# 上传
rz redis-6.2.1.tar.gz
# 解压
tar -zxf redis-6.2.1.tar.gz -C /usr/local
3.安装gcc
yum -y install gcc
4.编译
# 切换目录
cd /usr/local/redis-6.2.1
# 编译
make && make install
编译完成情况
5.查看安装目录
# 切换目录 cd /usr/local/bin ll
目录介绍:
redis-benchmark:性能测试工具,可以在自己本子允许,看看自己本子性能如何
redis-check-aof:修复有问题的AOF文件
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:redis集群使用
redis-server:redis服务器启动命令
redis-clit:客户端,操作入口
6.后端启动
使用vi或者vim命令修改/usr/local/redis-6.2.1/redis.conf
中的配置,将后台启动设置daemonize改为yes,如下:
启动redis
redis-server /usr/local/redis-6.2.1/redis.conf
查看进程
ps -ef | grep redis
操作截图
关闭redis服务 注:此处启动Redis后无需停止服务
# 方式一:
kill -9 pid
# 方式二:
redis-cli shutdown
7.测试
执行 redis-cli 即可进入redis命令窗口,然后就可以执行redis命令了
[root@192 bin]# cd /usr/local/bin/
[root@192 bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
[root@192 bin]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
8.系统服务配置
在本机中手动创建一个redis.service服务文件
# 切换到指定目录
cd /usr/lib/systemd/system/
# 上传redis.service服务文件
rz redis.service
修改redis.service配置:
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#修改redis-server和redis.conf的路径
ExecStart=/usr/local/redis-6.2.1/src/redis-server /usr/local/redis-6.2.1/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重载、自启动及启停服务
# 重载服务
systemctl daemon-reload
# 自启动服务
systemctl enable redis
# 禁用自启动服务
systemctl disable redis
# 启动服务
systemctl start redis
# 停止服务
systemctl stop redis
# 重启服务
systemctl restart redis
操作过程如下:
三、Redis远程访问
1.修改访问IP地址
#跳转到redis安装目录
cd /usr/local/redis-6.2.1
#修改redis.conf配置文件
vim redis.conf
#注释redis.conf的配置项
#bind 127.0.0.1
2.设置登录密码
找到requirepass 一行去除注释,并添加密码
#requirepass foobared #修改前
requirepass 123456 #修改后
3.重启Redis服务
# 重启Redis服务
systemctl restart redis
4.配置服务器防火墙
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports