python - 为什么 Laravel Redis::scan ('*' ) 返回预期的 key ,但 Redis::keys ('*' ) 没有返回?

标签 python laravel redis

问题:

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

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

研究:

问题:

为什么 keys('*') 不返回 key ,但 scan('*') 却返回 key ,如果 get( 'key_name') 返回 null?

Laravel:7.30.4

Python:3.8.3

Redis:6.0

最佳答案

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

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

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

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

使用 get 并附加前缀,例如 Redis::get('prefix_key_name') 不起作用。

关于python - 为什么 Laravel Redis::scan ('*' ) 返回预期的 key ,但 Redis::keys ('*' ) 没有返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66139539/

相关文章:

javascript - ReactJS - 将发布数据传递到服务器

caching - 类似于标签缓存并查询它以建议他们使用 Redis

php - RedisLab 与 WordPress 集成错误:PHP 警告:Redis::select() 期望参数 1 为整数

python - pandas 获取多列上值的频率

php - Laravel 多表连接保存到变量并对其运行 foreach (搜索功能)

Python sqlite3 字符串格式化

Laravel 显示 "Failed to clear cache. Make sure you have the appropriate permissions"

amazon-web-services - 使用从属实例在 aws 之外访问 AWS elasticache?

python - 仅使用单个目标复制 waf 中的多个文件

python - Django 'type' 对象不可迭代