目录
一、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 全称 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 等等。
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 复用技术可以让单个线程高效的处理多个连接请求。
性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;
命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。
我们知道,数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比:
名称 | 类型 | 数据存储选项 | 附加功能 |
---|---|---|---|
Redis | 基于内存存储的键值非关系型数据库 | 字符串、列表、散列、有序集合、无序集合 | 发布与订阅、主从复制、持久化存储等 |
Memcached | 基于内存存储的键值缓存型数据库 | 键值之间的映射 | 为提升性能构建了多线程服务器 |
MySQL | 基于磁盘的关系型数据库 | 每个数据库可以包含多个表,每个表可以包含多条记录; 支持第三方扩展。 | 支持 ACID 性质、主从复制和主主复制 |
MongoDB | 基于磁盘存储的非关系文档型数据库 | 每个数据库可以包含多个集合,每个集合可以插入多个文档 | 支持聚合操作、主从复制、分片和空间索引 |
Redis 基于内存来实现数据的存储,因此其速度非常快。但是我们知道,计算机的内存是非常珍贵的资源,所以 Redis 不适合存储较大的文件或者二进制数据,否则会出现错误,Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB。
总得来说,上述数据库各有优势,当我们选用数据库时,也要因地制宜,选择一款与业务场景最相符合的数据库。
缓存:合理的使用 缓存 能够明显加快访问的速度,同时降低数据源的压力。这也是 Redis
最常用的功能。Redis
提供了 键值过期时间(EXPIRE key seconds
)设置,并且也提供了灵活控制 最大内存 和 内存溢出 后的 淘汰策略。
排行榜:每个网站都有自己的排行榜,例如按照 热度排名 的排行榜,发布时间 的排行榜,答题排行榜 等等。Redis
提供了 列表(list
)和 有序集合(zset
)数据结构,合理的使用这些数据结构,可以很方便的构建各种排行榜系统。
计数器:计数器在网站应用中非常重要。例如:点赞数加 1
,浏览数 加 1
。还有常用的 限流操作,限制每个用户每秒 访问系统的次数 等等。Redis
支持 计数功能(INCR key
),而且计数的 性能 也非常好,计数的同时也可以设置 超时时间,这样就可以实现限流。
社交网络:赞/踩,粉丝,共同好友/喜好,推送,下拉刷新等是社交网站必备的功能。由于社交网站 访问量通常比较大,而且传统的数据库 不太适合保存这类数据,Redis
提供的 数据结构 可以相对比较容易实现这些功能。
消息队列:Redis
提供的 发布订阅(PUB/SUB
)和阻塞队列 的功能,虽然和专业的消息队列(RocketMQ/RabbitMQ,MQ全称:Message Queue)比,还不够强大,但对于一般的消息队列功能基本满足。
进入Index of /releases/对应版本的Redis服务,本篇文章使用的是redis-6.2.1
将下载的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
yum -y install gcc
# 切换目录
cd /usr/local/redis-6.2.1
# 编译
make && make install
编译完成情况
# 切换目录 cd /usr/local/bin ll
目录介绍:
redis-benchmark:性能测试工具,可以在自己本子允许,看看自己本子性能如何
redis-check-aof:修复有问题的AOF文件
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:redis集群使用
redis-server:redis服务器启动命令
redis-clit:客户端,操作入口
使用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
执行 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
在本机中手动创建一个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安装目录
cd /usr/local/redis-6.2.1
#修改redis.conf配置文件
vim redis.conf
#注释redis.conf的配置项
#bind 127.0.0.1
找到requirepass 一行去除注释,并添加密码
#requirepass foobared #修改前
requirepass 123456 #修改后
# 重启Redis服务
systemctl restart redis
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports