对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

缓存和锁

要将MongoDB用作 Laravel 缓存和锁的后端,请在 config/cache.php 中指定 mongodb驱动程序以添加存储配置:

'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
'collection' => 'cache',
'lock_connection' => 'mongodb',
'lock_collection' => 'cache_locks',
'lock_lottery' => [2, 100],
'lock_timeout' => 86400,
],
],

要配置mongodb数据库连接,请参阅连接指南部分。

下表描述了缓存和锁选项及其默认值的列表:

设置
说明

driver

必需。 指定要使用的锁驱动程序。 必须是mongodb 。

connection

必需。 用于存储缓存项的数据库连接。 它必须是mongodb连接。

collection

默认cache 。 用于存储缓存项的 MongoDB 集合的名称。

lock_connection

默认为缓存connection 。 用于存储锁的数据库连接。 它必须是mongodb连接。

lock_collection

默认cache_locks 。 用于存储锁的 MongoDB 集合的名称。

lock_lottery

默认[2, 100] 。 修剪过期缓存项的概率为[chance, total] 。 设置为[0, 0]以禁用。

lock_timeout

默认86400 。 锁的生存时间(以秒为单位)。

The TTL indexes integrated into MongoDB automatically delete documents when they expire. Their use is optional with the mongodb driver, but recommended. The indexes provide better performance by delegating the deletion of expired documents to MongoDB instead of requiring the application to perform this task.

通过调用缓存和锁存储提供的createTTLIndex()方法的迁移来创建索引:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Cache;
return new class extends Migration
{
public function up(): void
{
$store = Cache::store('mongodb');
$store->createTTLIndex();
$store->lock('')->createTTLIndex();
}
};

然后运行迁移:

php artisan migrate

Alternatively, you can create the index by using MongoDB Shell (mongosh):

db.cache.createIndex(
/* Field that holds the expiration date */
{ expires_at: 1 },
/* Delay to remove items after expiration */
{ expireAfterSeconds: 0 }
)

如果使用锁,请通过将概率设置为 来禁用lock_lottery 0:

'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
'lock_lottery' => [0, 100], // Disabled
],
],

Laravel 缓存可用于存储任何使用Illuminate\Support\Facades\Cache门面的可序列化数据。

此示例将执行以下动作:

  • 使用mongodb存储获取缓存存储库

  • 尝试读取并返回名为 foo

  • 如果缺失,则调用闭包来计算值,永久存储该值并将其返回

use Illuminate\Support\Facades\Cache;
$value = Cache::store('mongodb')->get('foo', function () {
return [1, 2, 3];
});

默认情况下,缓存的对象不会过期。 但是,可以定义过期时间,如以下示例所示:

Cache::store('mongodb')->set('foo', 'abc', '1 day');

如果之前已初始化值,则还支持递增和递减该值。 以下示例将计数器初始化为3 、添加5和删除2 。

Cache::store('mongodb')->set('counter', 3);
Cache::store('mongodb')->increment('counter', 5);
Cache::store('mongodb')->decrement('counter', 2);

注意

Laravel 集成支持使用整数和浮点值进行递增和递减。

有关使用缓存的更多信息,请参阅 Laravel 缓存 文档。

要默认使用mongodb存储,请更改config/cache.php中的默认存储。

return [
'default' => env('CACHE_STORE', 'mongodb'),
'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
],
],
];

注意

在上一个示例中,我们故意省略了所有可选参数,因此应用了默认值。

可以在您的环境或.env文件中设置CACHE_STORE变量。 按如下方式更新或删除:

CACHE_STORE=mongodb

然后,您可以使用Illuminate\Support\Facades\Cache门面和自动注入:

use Illuminate\Support\Facades\Cache;
Cache::get('foo', 5);

以下示例展示了如何通过使用默认存储来自动注入缓存管理器。 该示例创建的控制器在每次调用时都会递增计数器。

<?php
namespace App\Http\Controllers;
use App\Contracts\CacheManager;
class CountController extends Controller
{
public function __construct(
private CacheManager $cache,
) {}
public function hit(): int
{
return $this->cache->increment('counter');
}
}

原子锁允许操作分布式锁,而不必担心争用条件。 以下示例实现了原子锁:

use Illuminate\Support\Facades\Cache;
$lock = Cache::store('mongodb')->lock('foo', 10);
if ($lock->get()) {
// Lock acquired for 10 seconds...
$lock->release();
}

有关使用锁的更多信息,请参阅Laravel 锁文档。

给本页内容打分