Ray Lee | 李宗叡
Learn or Die
Published in
Oct 10, 2023

# 前言

紀錄 upgrade sail-8.1 的 Redis version

更新:Laravel 10.25 開始,已支援 Redis 6.0,所以 sail 在 Redis extension 上也會很快有相應的更新

# 起因

使用 Redis::command('lmove', ['listA', 'listA', 'LEFT', 'RIGHT']) 時,竟然出現 Call to undefined method Redis::LMOVE() error,Redis 官方文件上可是明確標示 RPOPLPUSH 已經是 Deprecated,請使用 LMOVE

# 原因

根本原因是因為 sail 8.1 dockerfile 中的 redis extension 是透過 apt install php8.1-redis 來安裝的,而該版本的 redis 是 5.x,lmove 是 6.2 之後才有的功能

# solutions

# 使用 raw command

可以使用 raw command,例如 Redis::rawCommand('lmove', 'source', 'target', 'LEFT|RIGHT', 'LEFT|RIGHT'),不過因為 Laravel Redis facade 預設會有 prefix,定義在 config('database.redis.options.prefix'),所以若使用 rawCommand,key 前面要加上 prefix

# 安裝 6.x 的 redis extension

可以使用 pecl install redis 來安裝 6.x 版本的 redis extension,這樣就可以直接使用 Redis Facade 來呼叫 6.x 的 Redis method

可以在 dokerfile 中把 apt install php8.1-redis 拿掉,並且加入 pecl install redis

Ray Lee | 李宗叡
Learn or Die

It's Ray. I do both backend and frontend, but more focus on backend. I like coding, and would like to see the whole picture of a product.