Linux - redis下载以及基础使用

1.简介

1.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 等等。

提示:Redis官网(https://redis.io/)提供了完善的社区环境、文档说明,以及更新支持。

常见的内存型数据库,除 Redis 之外,还有 Oracle Berkeley DB(甲骨文旗下的一款产品)、SQlite(轻量级内存数据库)、Memcache(键值型分布式缓存数据库)、Altibase(基于内存的高性能数据库)。

面试题:Memcache/Redis/MongoDB的区别

1.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 复用技术可以让单个线程高效的处理多个连接请求。

1.3.优势

  • 性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;

  • 多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;

  • 命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;

  • 可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。

1.4.数据库对比

Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。

我们知道,数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比:

名称 类型 数据存储选项 附加功能
Redis 基于内存存储的键值非关系型数据库 字符串、列表、散列、有序集合、无序集合 发布与订阅、主从复制、持久化存储等
Memcached 基于内存存储的键值缓存型数据库 键值之间的映射 为提升性能构建了多线程服务器
MySQL 基于磁盘的关系型数据库 每个数据库可以包含多个表,每个表可以包含多条记录; 支持第三方扩展。 支持 ACID 性质、主从复制和主主复制
MongoDB 基于磁盘存储的非关系文档型数据库 每个数据库可以包含多个集合,每个集合可以插入多个文档 支持聚合操作、主从复制、分片和空间索引

Redis 基于内存来实现数据的存储,因此其速度非常快。但是我们知道,计算机的内存是非常珍贵的资源,所以 Redis 不适合存储较大的文件或者二进制数据,否则会出现错误,Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB。

总得来说,上述数据库各有优势,当我们选用数据库时,也要因地制宜,选择一款与业务场景最相符合的数据库。

1.5.应用场景

  • 缓存: 合理的使用 缓存 能够明显加快访问的速度,同时降低数据源的压力。这也是 Redis 最常用的功能。 Redis 提供了 键值过期时间EXPIRE key seconds )设置,并且也提供了灵活控制 最大内存 内存溢出 后的 淘汰策略

  • 排行榜: 每个网站都有自己的排行榜,例如按照 热度排名 的排行榜,发布时间 的排行榜,答题排行榜 等等。 Redis 提供了 列表list )和 有序集合zset)数据结构,合理的使用这些数据结构,可以很方便的构建各种排行榜系统。

  • 计数器: 计数器在网站应用中非常重要。例如:点赞数1浏览数 1。还有常用的 限流操作 ,限制每个用户每秒 访问系统的次数 等等。 Redis 支持 计数功能INCR key ),而且计数的 性能 也非常好,计数的同时也可以设置 超时时间 ,这样就可以实现限流

  • 社交网络: 赞/踩,粉丝,共同好友/喜好,推送,下拉刷新等是社交网站必备的功能。由于社交网站 访问量通常比较大 ,而且传统的数据库 不太适合保存这类数据, Redis 提供的 数据结构 可以相对比较容易实现这些功能。

  • 消息队列: Redis 提供的 发布订阅PUB/SUB )和阻塞队列 的功能,虽然和专业的消息队列(RocketMQ/RabbitMQ,MQ全称:Message Queue)比,还不够强大,但对于一般的消息队列功能基本满足。

2.安装与配置

2.1.下载

进入redis官网下载对应版本的Redis服务,本次课程使用的是redis-6.2.1。

2.2.上传解压

将下载的redis-6.2.1.tar.gz压缩包上传至服务器。

复制代码
# 切换目录
cd /usr/local/redis
# 上传
rz  redis-6.2.1.tar.gz
# 解压
tar -zxvf redis-6.2.1.tar.gz -C /usr/local

2.3.安装gcc

复制代码
yum -y install gcc make

2.4.编译

复制代码
cd /usr/local/redis/redis-6.2.1

make && make install

2.5.查看安装目录

复制代码
cd /usr/local/bin

目录介绍:

  • redis-benchmark:性能测试工具,可以在自己本子允许,看看自己本子性能如何

  • redis-check-aof:修复有问题的AOF文件

  • redis-check-dump:修复有问题的dump.rdb文件

  • redis-sentinel:redis集群使用

  • redis-server:redis服务器启动命令

  • redis-clit:客户端,操作入口

2.6.后端启动

使用vi或者vim命令修改/usr/local/redis-6.2.1/redis.conf中的配置,将后台启动设置daemonize改为yes,如下:

复制代码
vim /usr/local/redis/redis-6.2.1/redis.conf

设置redis密码

复制代码
requirepass 123456

2.7.测试

执行 redis-cli 即可进入redis命令窗口,然后就可以执行redis命令了。

复制代码
[root@localhost bin]# redis-cli -a 123456
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

关闭redis服务

复制代码
# 方式一:
ps -ef | grep redis

kill -9 pid

# 方式二:
redis-cli -a 123456 shutdown

2.8.系统服务配置

复制代码
# 切换到指定目录
cd /usr/lib/systemd/system/

# 上传redis.service服务文件
vim redis.service

修改redis.service配置:

复制代码
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/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

注释:ExecStart那里后面跟着的是你自己的安装路径

重载、自启动及启停服务

复制代码
# 重载服务
systemctl daemon-reload
# 自启动服务
systemctl enable redis

# 启动服务
systemctl start redis

# 重启服务
systemctl restart redis
相关推荐
ElfBoard1 小时前
ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现GPIO功能复用
linux·人工智能·单片机·嵌入式硬件·物联网·机器人
wanhengidc8 小时前
云手机的适配性怎么样?
运维·服务器·安全·智能手机·云计算
jimy19 小时前
安卓里运行Linux
linux·运维·服务器
川贝枇杷膏cbppg9 小时前
Redis 的 RDB 持久化
前端·redis·bootstrap
哟哟耶耶9 小时前
js-fetch流式实现中断重连
运维·服务器
爱凤的小光10 小时前
Linux清理磁盘技巧---个人笔记
linux·运维
源代码•宸10 小时前
goframe框架签到系统项目(BITFIELD 命令详解、Redis Key 设计、goframe 框架教程、安装MySQL)
开发语言·数据库·经验分享·redis·后端·mysql·golang
川贝枇杷膏cbppg10 小时前
Redis 的 AOF
java·数据库·redis
耗同学一米八10 小时前
2026年河北省职业院校技能大赛中职组“网络建设与运维”赛项答案解析 1.系统安装
linux·服务器·centos
知星小度S11 小时前
系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析
linux