为什么Laravel Redis::scan('*')返回预期的键,而Redis::keys('*')不返回?

2024-04-20 01:52:36 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我使用Python代码向redis添加了一个值,当我尝试查询时使用的是Laravel

  • Redis::get('key_name')它返回null
  • Redis::keys('*')返回使用Laravel而不是Python创建的值
  • Redis::scan('*')返回所有值,即使是使用Python创建的值

研究:

问题:

为什么keys('*')不返回键,而scan('*')返回键,如果get('key_name')返回null,如何获取值

拉威尔:7.30.4

Python:3.8.3

Redis:6.0


Tags: key代码namehttpscomredis数据库get
1条回答
网友
1楼 · 发布于 2024-04-20 01:52:36

Laravel为创建的所有关键帧添加前缀。该前缀在database.php中的redis配置中定义

'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),

我还没有看过源代码,但很可能在laravel查找键时,它需要前缀,并将其附加到传递给keysget的内容中。因此,如果您传递了keys('key_name'),它将搜索prefix_key_name,这就是为什么get返回了null,而keys没有返回通过Python创建的密钥,而不是通过Laravel创建的密钥。我猜scan的工作方式有点不同,它返回所有键,而不管其前缀是什么

如果将前缀的默认值设置为null('prefix' => env('REDIS_PREFIX', null),则将返回密钥

像这样使用get并附加前缀Redis::get('prefix_key_name')是行不通的

相关问题 更多 >