Redis 6将使用全新协议RESP3提供客户端缓存功能

Redis之父Salvatore Sanfilippo在自己的博客,解释Redis 6中新版的Redis协议RESP3,是他认为新版Redis最重要的改变,因为能为客户端提供更多的语义回复,用来开发旧协议难以实例的功能,像是其他数据库都有,但Redis还没提供的客户端缓存(Client Side Caching)功能。

当用户需要进行快速存储或是快速缓存操作时,便需要在客户端内存中存储一小部分消息,这是为了缴少应用程序截取数据时的延迟,这个想法在大规模应用上特别重要,因为摆放的数据越靠近应用程序,应用程序就能越缓存得需要的数据,Salvatore Sanfilippo提到,网络内存系统的下一步,就是要将大部分可以访问的数据,直接放在应用程序服务器的内存中,这个概念称为客户端缓存。

但这个做法有一个需要解决的问题是,控制数据的有效性的方法,在应用可以允许的状况下,虽然可以直接设置缓存数据的有效时间,让数据在一段时间后失效,但Salvatore Sanfilippo提到,大多数的应用程序无法接受提供过时的数据的风险,因此必须要找到一个更积极的方法,让存在客户端内存的数据失效。为此Salvatore Sanfilipp才在新版的Redis协议RESP3,加入了新功能来支持客户端缓存,让存储在客户端内存数据,在客户端收到来自服务器的失效消息时失效。

另外,当客户端与服务器端的连接中断,则客户端收不到数据失效消息,这可能导致应用服务发生问题,一般的做法是重新创建连接,并更新客户端目前的缓存,Salvatore Sanfilippo提到,可以一直保持连接确保失效消息传递顺畅是最好的情况,但是为了减少过时长据产生的风险,Redis服务器还会在与客户端连接中断时,将数据失效消息引导至其他客户端。

客户端缓存功能在不少数据库都有提供,但在Redis上迟迟尚未支持,而终于在Redis 6将会加入辅助服务器端的客户端缓存,这项功能的名称尚未完全确定,最后可能会被改称为关注(Tracking)。目前客户端缓存的功能只在Redis的不稳定版中提供,Salvatore Sanfilippo提到,在Redis 6候选版发布前,这些功能还能够调整,希望社群可以踊跃反馈想法,而由于客户端缓存只能在RESP3支持,他也正设法让RESP2能够激活该功能。