经过前面的学习,我们已经基本了解了redis常见的五种数据结构,以及每种结构的常见命令和基本用法,不过最终我们实现业务,还是要用编码的方式来实现。
在Redis官网中提供了各种语言的客户端供我们使用,地址:https://redis.io/docs/clients/
当然作为Java程序员,我们要关注的肯定是Java语言的客户端其中Java客户端也包含很多:
标记为❤的就是推荐使用的java客户端,包括:
-
Jedis(java和redis组成的单词)和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装,因此我们后期会直接以SpringDataRedis来学习。
并且它以Redis命令作为方法名称,例如SET命令对应的方法就是set,GET命令对应的方法就叫get,MSET命令对应的方法就叫mset,因此学习成本低,简单实用。
但是Jedis实例是线程不安全的,也就是说你创建一个线程实例,多线程并发运行的时候是有线程安全问题的,因此多线程使用时必须为每一个线程创建独立的Jedis连接,那么就必须使用连接池的方式来使用了。
-
Lettuce是基于Netty实现的,Netty是高性能的网络编程框架,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。所以这种模式跟Spring的编程模式结合的比较好,并且响应式编程、异步编程的吞吐能力也高一点。因此spring官方默认兼容的就是Lettuce客户端。
-
Redisson的特点不在于对redis的基本操作,而是在于它底层是一个基于Redis实现了一系列的工具,例如分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、 Semaphore(信号量)、AtomicLong(原子整形)等这些类,这些类可以保证我们平常使用的时候做数据存储、线程控制都非常方便。
但是这些东西它们都有一个特点:它们都是单机的,如果是在分布式环境下,它们往往就失去作用了。
-
而Redission就是基于Redis重新实现了这一系列的东西,以至于它们可以在分布式环境下同样能够使用。因此如果你有在分布式环境下使用的需求,就不需要重新造轮子了,而是直接使用Redission。
Redisson:是在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map.Queue等,而且支持跨进程的同步机制:Lock.Semaphore等待,比较适合用来实现特殊的功能需求。
-
Spring Data Redis:兼容了jedis和lettuce
一般作为普通Redis来实现业务逻辑,用Jedis、Lettuce这两种会相对来讲比较方便一些,因此这两种应该都掌握。
但是spring最擅长的就是整合,因此后面会学习 Spring Data Redis
,它底层可以兼容 Jedis
和 lettuce
,即既可以用 Jedis
实现,也可以用 lettuce
实现,未来学完了它,就等于这两个客户端都会了。
但是有些企业还是喜欢使用旧的Jedis,因为它的命令就是方法名,学习成本低,因此我们会把Jedis的原生API也会讲一下,然后再学习Spring Data Redis。