# 前言
紀錄 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