Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念

关系型数据库是典型的行存储数据库,存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。

Redis在生产中使用的最多的是用作数据缓存。

服务器先在缓存中查询数据,查到则返回,查不到则到DB中查找。

2.1 缓存数据的分类

(1)实时同步数据:要求缓存中的数据必须与DB中的数据保持一致。即只要DB中的数据发生了变更,缓存中的数据立即消失。

(2)阶段性同步数据:没有必要与DB的数据时刻保持一致,只要大差不差就行。实现方法是为缓存数据添加了生存时长属性。

2.2 特点

(1)Redis的所有操作是在内存中进行的;

(2)Redis的数据可以支持持久化(包括RDB和AOF两种方式);

(3)Redis提供了高可用的主从集群功能,可以确保系统的安全性;

(4)丰富的数据类型:String、List、Set、Zset和Hash,还有BitMap、HyperLoglog、Geospatial。

BitMap:一般用于大数据量的二值性统计;

HyperLoglog:用于对数据量超级庞大的日志做去重统计;

Geospatial:主要用于地理位置相关的计算。

(5)数据过期功能、发布/订阅功能、简单事务功能、脚本扩展功能。

(6)ACL(Access Control List)权限功能,可以为不同的用户定制不同的用户权限。

(7)支持多线程IO模型。

二、Redis的IO模型

多线程IO模型(不是一个纯粹的多线程模型,主任务还是单线程)中的"多线程"仅用于接受、解析客户端的请求,然后将解析出的请求写入到任务队列中,而对具体任务(命令)的处理,仍是由主线程(单线程)处理,这样做使得用户无需考虑线程安全的问题,无需考虑事务控制,无需考虑像LPUSH/LPOP等命令的执行顺序问题。

三、多路选择算法

每个客户端若要向Redis提交请求,都需要与Redis建立一个socket连接,并向事件分发器注册一个事件,一旦该事件发生就表明连接已经就绪,而一旦连接就绪,事件分发器就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个唯一的线程来处理。事件分发器会根据不同的就绪事件将任务交由不同的事件处理器去处理。

Redis的单线程模型采用了多路复用技术(从多个socket连接请求中选择一个放到人物队列给线程处理)。对于多路复用器的多路选择算法常见的有三种:select模型、poll模型、epoll模型。
select模型和poll模型 的选择算法:两个本质上事一样的,只是select使用的是数组,poll使用的是链表。采用的是轮询算法,该模型对客户端的就绪处理是有延迟的。
epoll模型的选择算法:采用的是回调方式,监听到就绪就处理(也是使用队列的)。根据就绪事件发生后的处理方式不同又分为LT模型和ET模型。

四、redis的安装与启停

4.1 安装

下载

powershell 复制代码
 wget http://download.redis.io/releases/redis-6.2.1.tar.gz

解压

powershell 复制代码
tar -zxvf redis-6.2.1.tar.gz -C /opt/apps

编译

进入安装目录

使用make指令编译:

安装

powershell 复制代码
make install

4.2 启动

补充:后台启动方式

powershell 复制代码
nohup redis-server &

补充:配置式后台启动方式

修改配置文件:

搜索:

改为yes(配置为守护进程):

停止

powershell 复制代码
redis-cli shutdown

4.3 连接前的配置

使其可以监听所有接口:

关闭保护模式:

requirepass行改成下面:

五、redis的各类客户端

5.1 图形界面客户端

5.2 图形界面客户端Redis Desktop Manager

相关推荐
夕泠爱吃糖34 分钟前
MySQL中的部分问题(1)
数据库·mysql
百度Geek说36 分钟前
Redis 数据恢复的月光宝盒,闪回到任意指定时间
数据库
秃了也弱了。1 小时前
DBSyncer:开源数据库同步利器,MySQL/Oracle/ES/SqlServer/PG/
数据库·mysql·开源
玄辰星君1 小时前
PostgreSQL 入门教程
数据库·postgresql
泽韦德2 小时前
【Redis】笔记|第9节|Redis Stack扩展功能
数据库·redis·笔记
喜欢踢足球的老罗2 小时前
使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库
数据库·spring boot·mysql
文牧之2 小时前
PostgreSQL 的扩展pg_prewarm
运维·数据库·postgresql
行星0082 小时前
Postgresql字符串操作函数
数据库·postgresql
Wang's Blog3 小时前
Monorepo架构: Nx Cloud 扩展能力与缓存加速
缓存·架构
·云扬·3 小时前
【PmHub面试篇】PmHub 整合 TransmittableThreadLocal(TTL)缓存用户数据面试专题解析
缓存·面试·职场和发展