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/):
简单来说,最主要的新特性有以下几点:
(1)提供了多线程IO支持。Redis在执行用户命令时任然是采用了单线程的模式(作者认为Redis的瓶颈不在于内存操作,引入多线程反而提高了复杂度),在进行网络IO操作时采用了多线程模型。同时数据删除、持久化等操作也是采用了多线程的模型。
(2)提供ACL权限控制,我们可以指定单独用户的命令权限和数据权限
(3)客户端和服务端通讯协议升级为RESP3协议
(4)提供了许多新API的使用
(5)引入了客户端缓存的概念,Redis官网为我们原生实现了一套本地缓存+分布式缓存的方案,我们无需在自己实现
(6)新引入了集群代理模块,方便客户端与Redis集群通信