插件窝 干货文章 laravel redis用法有哪些

laravel redis用法有哪些

Redis 可以 使用 key 379    来源:    2025-03-18

在 Laravel 中使用 Redis 主要有以下几种常见的用法:

1. 缓存

Redis 是 Laravel 默认支持的缓存驱动之一。你可以使用 Redis 来存储缓存数据,以提高应用程序的性能。

// 设置缓存
Cache::store('redis')->put('key', 'value', $minutes);

// 获取缓存
$value = Cache::store('redis')->get('key');

// 删除缓存
Cache::store('redis')->forget('key');

2. Session 存储

你可以将 Redis 用作 Laravel 的 Session 存储驱动,以便在分布式环境中共享 Session 数据。

.env 文件中配置:

SESSION_DRIVER=redis

3. 队列

Laravel 的队列系统支持使用 Redis 作为队列驱动。Redis 队列非常适合处理高并发的任务。

.env 文件中配置:

QUEUE_CONNECTION=redis

然后你可以使用 dispatch 函数将任务推送到队列中:

dispatch(new App\Jobs\ProcessPodcast($podcast));

4. 发布/订阅

Redis 支持发布/订阅模式,你可以使用 Laravel 的 Redis 客户端来实现消息的发布和订阅。

// 发布消息
Redis::publish('channel-name', json_encode(['message' => 'Hello World']));

// 订阅消息
Redis::subscribe(['channel-name'], function ($message) {
    echo $message;
});

5. 数据存储

你可以直接使用 Redis 作为数据存储,存储键值对、列表、集合、有序集合等数据结构。

// 存储字符串
Redis::set('key', 'value');

// 获取字符串
$value = Redis::get('key');

// 存储列表
Redis::lpush('list-key', 'item1');
Redis::lpush('list-key', 'item2');

// 获取列表
$list = Redis::lrange('list-key', 0, -1);

6. 分布式锁

Redis 可以用来实现分布式锁,确保在分布式系统中同一时间只有一个进程可以执行某个操作。

$lock = Redis::lock('resource-key', 10);

if ($lock->get()) {
    // 获取锁成功,执行操作
    $lock->release();
} else {
    // 获取锁失败
}

7. 限流

你可以使用 Redis 来实现限流功能,限制某个操作的频率。

$key = 'rate-limit-key';
$limit = 100;
$expire = 60; // 60秒

if (Redis::incr($key) > $limit) {
    // 超过限制
} else {
    Redis::expire($key, $expire);
    // 执行操作
}

8. HyperLogLog

Redis 的 HyperLogLog 数据结构可以用来进行基数统计,适合统计大量数据的唯一值。

Redis::pfadd('hll-key', 'item1', 'item2', 'item3');
$count = Redis::pfcount('hll-key');

9. 地理位置

Redis 支持地理位置数据的存储和查询,适合用于地理位置相关的应用。

Redis::geoadd('locations', $longitude, $latitude, 'location-name');
$locations = Redis::georadius('locations', $longitude, $latitude, $radius, 'km');

10. 事务

Redis 支持事务操作,你可以使用 MULTIEXEC 命令来执行一系列操作。

Redis::multi();
Redis::set('key1', 'value1');
Redis::set('key2', 'value2');
Redis::exec();

11. 管道

Redis 管道可以一次性发送多个命令,减少网络往返时间。

Redis::pipeline(function ($pipe) {
    for ($i = 0; $i < 1000; $i++) {
        $pipe->set("key:$i", $i);
    }
});

12. Lua 脚本

你可以使用 Lua 脚本来执行复杂的 Redis 操作。

$script = "
    return redis.call('get', KEYS[1])
";
$result = Redis::eval($script, 1, 'key');

13. 连接管理

你可以配置多个 Redis 连接,并在代码中选择使用哪个连接。

// 默认连接
Redis::connection()->set('key', 'value');

// 指定连接
Redis::connection('other-connection')->set('key', 'value');

14. 监控

你可以使用 Redis 的 MONITOR 命令来实时监控 Redis 的操作。

Redis::monitor(function ($monitor) {
    echo $monitor;
});

15. 备份与恢复

你可以使用 Redis 的 SAVEBGSAVE 命令来备份数据,并使用 RESTORE 命令来恢复数据。

Redis::save(); // 同步保存
Redis::bgsave(); // 异步保存

16. 配置

config/database.php 文件中,你可以配置 Redis 的连接参数。

'redis' => [
    'client' => 'predis',
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],
],

总结

Laravel 提供了丰富的 Redis 功能支持,涵盖了缓存、队列、Session 存储、发布/订阅、数据存储等多种场景。通过合理使用 Redis,你可以显著提升应用程序的性能和可扩展性。