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

相关推荐
BAGAE40 分钟前
tomcat,appche,nginix,jboss区别
java·linux·数据库·ubuntu·tomcat
枫叶_v1 小时前
【SpringBoot】28 API接口防刷(Redis + 拦截器)
spring boot·redis·后端
web130933203982 小时前
RabbitMQ 篇-深入了解延迟消息、MQ 可靠性(生产者可靠性、MQ 可靠性、消费者可靠性)
数据库·分布式·rabbitmq
一二小选手2 小时前
【Mybatis】动态SQL详解
数据库·sql·mybatis
.ccc.。2 小时前
mysql定位慢查询以及分析原因
数据库·mysql
半桶水专家2 小时前
MySQL遇到“ Access denied for user ”问题的解决办法
数据库·mysql·adb
Achou.Wang3 小时前
Redis中的消息订阅与发布
数据库·redis·缓存
2401_857026233 小时前
英语知识在线平台:Spring Boot框架实践
数据库·spring boot·后端
小狮子安度因3 小时前
Qt如何改变串口读取数据的频率
开发语言·数据库·qt