Redis(Remote Dictionary Server),即「远程字典服务」是一个使用 ANSI C 编写的、开源的、支持网络的、基于内存的、可选持久化的键值对存储系统。
在 2013 年 5 月之前,Redis 的开发由 VMware 赞助,2013 年 5 月至 2015 年 6 月,由 Pivotal 赞助,从 2015 年 6 月起,Redis 的开发由 Redis Labs 赞助。
根据数据库使用排行网站 db-engines.com 上的排名,Redis 是目前最流行的键值对存储系统。
Redis 由 Salvatore Sanfilippo 在 2009 年发布初始版本,开源后不断发展壮大,目前的最新版为 Redis 7.0
目前业内主要的缓存组件有:redis、memcached,主要特点如下:

用一句话总结:在性能相差不大的情况下,Redis 提供了更丰富的数据类型,同时,对可靠性以及扩展性也提供了较好的支持。
全称:Redis Serialization Protocol,即 Redis 序列化协议,有以下三个显著特点:
RESP2 协议如下:

是不是非常简单?
Redis6.0 版本开始,协议进行了升级,即 支持 RESP3 协议,相较于 RESP2 提供了更「语义化」能力,比如支持 double、boolean 等类型。
值得注意的是,在 Redis6.x 版本中同时支持 RESP2 和 RESP3,但在 Redis7.0 及之后的版本将不再支持 RESP2,届时,所有的客户端将进行全面升级(如果你需要使用7.0及之后的版本)
支持 RESP 协议、封装 Redis 命令的 SDK,其主要作用是帮助我们与服务端进行通信,目前已经提供了非常多的开源客户端实现,支持 C、Java、Python … 等多种语言。

笔者工作中主要用 Java 进行开发,这里主要列举 Java 相关的客户端 SDK。
1)目前常见的 Java 客户端工具库有:
2)Spring 体系:
例如:当你想用 spring-cache 注解能力并且底层要依赖 redis 时,你可以先添加依 spring-data-redis 包依赖,然后 spring 进行自动扫描就可以了。
3)其他:
这么多该如何选择?
工具不在于多,关键看你自身的场景下是否够用,比如你的项目可以只使用 jedis,当然,后面你可能还想使用「分布式锁」「限流器」等支持,可以再使用 redisson 。(搞懂核心问题,不迷路~
Redis Desktop Manager(RDM):一款好用的 Redis 桌面管理工具,支持命令控制台操作,以及常用查询 key、rename、delete 等操作:

RedisInsight:官方提供可视化工具,可用于查询、修改和分析数据。

选择一款用的顺手的可视化工具,提升效率~
Module 模块:Redis 提供的可自定义扩展的能力,支持灵活编写适用于自身场景的功能。
目前一些常见开源模块实现:RedisJson、RedisSearch、RedisBloom 等,使用其他和 Redis 命令风格一致,如:

如何实现自定义模块并使用?
最简单的例子:
#include "redismodule.h"
#include
int HelloworldRand_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModule_ReplyWithLongLong(ctx,rand());
return REDISMODULE_OK;
}
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
if (RedisModule_Init(ctx,"helloworld",1,REDISMODULE_APIVER_1)
== REDISMODULE_ERR) return REDISMODULE_ERR;
if (RedisModule_CreateCommand(ctx,"helloworld.rand",
HelloworldRand_RedisCommand, "fast random",
0, 0, 0) == REDISMODULE_ERR)
return REDISMODULE_ERR;
return REDISMODULE_OK;
}
该案例提供两个方法,其中 HelloworldRand_RedisCommand 是我们自定义的命令,用以输出随机数,实现了 redismodule.h 中的 RedisModule_ReplyWithLongLong 方法。
而 RedisModule_OnLoad 方法则是通过 RedisModule_Init 和 RedisModule_CreateCommand 将我们自定义的命令注册到 Redis。
两种加载方式:
另外我们还可以使用命令查看模块列表:
MODULE LIST
也可以卸载模块:
MODULE UNLOAD mymodule
目前代理有两种主要用途:
1)社区早期集群方案:Codis、Temproxy

特点:redis 服务节点间无交流、代理层做路由、需要单独部署高可用(如哨兵)
2)predixy:支持多种 redis 运行模式,对客户端友好

这种 proxy 便是代理「客户端能力」,将「与 redis 服务交互的部分能力」移到代理层处理。
对客户端来说,直接访问代理层,redis 服务如何变化无需感知,这是目前大多数云服务厂商常用的方式,对客户端十分友好。
工具:

可以看到,目前已经提供了多种语言的开源客户端、支持多种系统、同时也支持容器化部署 … ,其生态俨然十分强大了。