Redis6使用指南(一)

165 阅读3分钟

Redis大家都不陌生,作为一个NoSQL数据库,Redis目前活跃在软件工程的方方面面。无论是在实际工程开发中,或者在求职面试中,Redis都是后端工程师绕不过的一道坎。

 

本文主要基于Redis6.X版本,记录并分享Redis在工作中的使用。文章会分章节持续更新,主要包括内容:

(1)Redis6的简要介绍

(2)Linux下Redis的安装

(3)Redis的数据类型与开发规范

(4)基于Spring进行Redis相关开发的注意事项

(5)Redis的持久化机制

(6)Redis集群搭建实战

(7)Redis的常见面试题

 

 

首先我们思考下为什么要使用Redis?Redis究竟有什么魔力能在市场中脱颖而出?

假设目前市面上存在这样一种关系型数据库:它提供每秒100000次以上的读写能力,支持完整的数据库ACID特性,具有极强的可扩展性,能够实现自动的故障发现与转移,同时提供大量API功能用于简化开发。试想如果有这样的数据库,我们还需要Redis么?

当然理想很美好,现实很残酷,作为主流的关系型数据库,如Mysql,由于底层是基于磁盘的模式进行数据的存储,其读写能力相较于与基于内存的Redis数据库,要相差几个数量级。

因此使用Redis的一大基础理由就是Redis相较于关系型数据库,提供了更强的读写能力。同时Redis相较于同样是基于内存的Memcache而言,提供了持久化的能力,可以保证在大部分情况下,数据库不会因为宕机而丢失。

 

 

实际开发中使用Redis的典型场景有哪些?

1、充当热点数据的缓存

2、在某些高并发场景下用于替代Mysql等关系型数据库

3、提供数据集取交集、并集等能力(如查询共同好友信息)

4、充当临界资源,实现分布式架构下的分布式锁

 

 

目前生产上大量使用的Redis6版本提供了哪些新特性呢?

这里贴一张Redis官网的图片,各位可自行参考官网文档说明(redis.io/):

 

image.png

 

简单来说,最主要的新特性有以下几点:

(1)提供了多线程IO支持。Redis在执行用户命令时任然是采用了单线程的模式(作者认为Redis的瓶颈不在于内存操作,引入多线程反而提高了复杂度),在进行网络IO操作时采用了多线程模型。同时数据删除、持久化等操作也是采用了多线程的模型。

(2)提供ACL权限控制,我们可以指定单独用户的命令权限和数据权限

(3)客户端和服务端通讯协议升级为RESP3协议

(4)提供了许多新API的使用

(5)引入了客户端缓存的概念,Redis官网为我们原生实现了一套本地缓存+分布式缓存的方案,我们无需在自己实现

(6)新引入了集群代理模块,方便客户端与Redis集群通信