精华内容
下载资源
问答
  • 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的...
  • 本文实例讲述了Laravel框架使用Redis的方法。分享给大家供大家参考,具体如下: 安装 laravel使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件...
  • laravel的缓存类的store的redis实现,位于命名空间 Illuminate\Cache\RedisStore 其中实现了LockProvider,可获取锁实例,锁实例为Illuminate\Cache\RedisLock类的实例,RedisLock类是Illuminate\Cache\Lock抽象类的...

    laravel的缓存类的store的redis实现,位于命名空间

    Illuminate\Cache\RedisStore
    

    其中实现了LockProvider,可获取锁实例,锁实例为Illuminate\Cache\RedisLock类的实例,RedisLock类是Illuminate\Cache\Lock抽象类的实现
    调用方法get()获取锁时(RedisLock->get()),首先调用$this->acquire(),具体代码为

    public function acquire()
    	{
    	    $result = $this->redis->setnx($this->name, $this->owner);
    	
    	    if ($result === 1 && $this->seconds > 0) {
    	        $this->redis->expire($this->name, $this->seconds);
    	    }
    	
    	    return $result === 1;
    	}
    

    其中使用redis的setnx命令,只有当key不存在时才能设置成功,通过此种方式实现分布式锁的获取,当get()方法中传入过期时间(秒数)时,此时会设置过期时间,以避免意外造成死锁的情况

    当需要等待锁释放时,可以使用这个类中的block方法,该方法具体代码为:

    public function block($seconds, $callback = null)
    {
        $starting = $this->currentTime();
    
        while (! $this->acquire()) {
            usleep(250 * 1000);
    
            if ($this->currentTime() - $seconds >= $starting) {
                throw new LockTimeoutException;
            }
        }
    
        if (is_callable($callback)) {
            try {
                return $callback();
            } finally {
                $this->release();
            }
        }
    
        return true;
    }
    

    可见该方法大约每秒尝试获取锁4次,超时即报错,其第二个参数为回调函数,当其有值时,执行完成后自动释放锁
    当具体使用时,可直接利用门面类Illuminate\Support\Facades\Cache来进行操作,例如:

    $lock = Cache::lock('lockName', 10);
    

    来获取锁,前提是你的config(‘cache.default’)的值为redis或memcached等支持锁的驱动,如果使用了文件,数组等不支持锁的驱动将会报错,因为它们的store实现没有实现LockContract接口

    展开全文
  • 浏览器访问 http://image_lib.airmb.test/publish-article  配置redis队列 每当用户成功发贴,就将这一事件写入队列,我们使用Redis作为队列驱动器 首先安装相应扩展 nrk/predis $ composer require predis/predis...

    有些任务并不需要及时运行,就可以将其写入队列,从而不影响主业务逻辑的进程。如:用户发帖成功后推送消息给其关注的用户。如果一个用户是大v,有几百万的粉丝,肯定不能将发贴与推送通知的逻辑捆绑在一起,不然分分钟卡死。

    image

    以下用一个场景来模拟队列:

    模拟用户发贴

    新建路由:routes/web.php

     

    Route::get('/publish-article', 'HomeController@publish')->name('home.publish-article');
    

    浏览器访问 http://image_lib.airmb.test/publish-article

     

    配置redis队列

    每当用户成功发贴,就将这一事件写入队列,我们使用Redis作为队列驱动器

    首先安装相应扩展 nrk/predis

     

    $ composer require predis/predis
    

    修改 .envQUEUE_CONNECTION

     

    QUEUE_CONNECTION=redis
    

    任务失败重试表

    有时候队列中的任务会失败。Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。我们可以使用 queue:failed-table 命令来创建 failed_jobs 表的迁移文件:

     

    $ php artisan queue:failed-table
    

    生成 failed_jobs 表:

     

    $ php artisan migrate
    

    生成任务类

     

    $ php artisan make:job Notice
    Job created successfully.
    

    自动生成 app/Jobs/Notice.php,将该文件改为:

     

    namespace App\Jobs;
    use App\User;
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Foundation\Bus\Dispatchable;
    class Notice implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
        protected $user;
        public function __construct(User $user)
        {
            $this->user = $user;
        }
        public function handle()
        {
            $content = $this->user->name . "发表了新文章" . time() . "\n";
            file_put_contents('./notice.txt', $content, FILE_APPEND);
        }
    }
    

    任务分发

    app/Http/Controllers/HomeController.php 进行任务分发:

     

    # ...
    use App\User;
    # ...
    public function publish(User $user)
    {
        $user = User::query()->first();
        $this->dispatch(new Notice($user));
        dd('文章发布成功');
    }
    

    测试

    命令行开启队列监听:

     

    $ php artisan queue:listen
    

    浏览器访问:http://image_lib.airmb.test/publish-article

     

    $ php artisan queue:listen
    [2019-03-27 16:23:02][2184] Processing: App\Jobs\Notice
    [2019-03-27 16:23:02][2184] Processed:  App\Jobs\Notice
    

    结果:

     

    $ cat ./notice.txt
    test发表了新文章1553674982
    

    任务运行失败时,会显示 failed

     

    $ php artisan queue:listen
    [2019-03-27 16:23:02][2184] Processing: App\Jobs\Notice
    [2019-03-27 16:23:02][2184] Processed:  App\Jobs\Notice
    

    到数据表failed_job查看程序的详细报错

    展开全文
  • laravel使用redis

    2017-12-13 15:41:42
    1、首先通过composer安装predis/predis,进入到自己...[root@localhost MRedis]# composer require predis/predis 2、配置,在.env下,密码为自己的密码REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=63793、

    1、首先通过composer安装predis/predis,进入到自己的目录

    若composer未安装点击这里点击打开链接

    [root@localhost MRedis]# composer require predis/predis

    2、配置,在.env下,密码为自己的密码

    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379
    3、或在config/database.php下配置,如果没有密码,有事默认的

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

    4、测试

    (1)首先在自己的文件中引入redis的门脸类

    use Illuminate\Support\Facades\Redis;
    (2)然后就可以随意玩耍了

    Redis::get('name');



    展开全文
  • 1、linxu挂起队列监听 nohup ... 2、发现问题(日志) ... The process has been sinaled with signal "1". 3、查询资料(linux信号中断) ...键盘的退出键被按
  • $redis = app('redis.connection'); //添加成员的经纬度信息 $redis->rawCommand("geoadd",'cafes', 120.172132, 30.255636, "a-cafe"); $redis->rawCommand("geoadd",'cafes', 120.171409, 30.258959, "b-...
    <?php
     
    //添加成员的经纬度信息
    Redis::geoAdd('cafes', 120.172132, 30.255636, "a-cafe");
    Redis::geoAdd('cafes', 120.171409, 30.258959, "b-cafe");
    Redis::geoAdd('cafes', 120.189619, 30.263217, "c-cafe");
    Redis::geoAdd('cafes', 120.169024, 30.26573, "d-cafe");
    Redis::geoAdd('cafes', 120.177016, 30.257867, "e-cafe");
    
    //获取两个地理位置的距离,单位:m(米,默认), km(千米), mi(英里), ft(英尺)
    var_dump(Redis::geodist('cafes', 'a-cafe', 'c-cafe'));
    var_dump(Redis::geodist('cafes', 'a-cafe', 'c-cafe', 'km'));
     
    //获取成员的经纬度
    var_dump(Redis::geopos('cafes', 'a-cafe'));
     
    //获取成员的经纬度hash,geohash表示坐标的一种方法,便于检索和存储
    var_dump(Redis::geohash('cafes', 'a-cafe', 'c-cafe'));
     
    //基于经纬度坐标的范围查询
    //查询以经纬度为114,30为圆心,100千米范围内的成员
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km'));
     
    //WITHCOORD表示获取成员经纬度
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km',['WITHCOORD']));
     
    //WITHDIST表示获取到圆心的距离
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km', ['WITHDIST']));
     
    //WITHHASH表示获取成员经纬度HASH值
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km', ['WITHHASH']));
     
    //COUNT 数量,表示限制获取成员的数量
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km', ['COUNT'=>3]));
     
    // ASC 根据圆心位置,从近到远的返回元素
    // DESC 根据圆心位置,从远到近的返回元素
    var_dump(Redis::georadius('cafes', '120.169024', '30.26573', '100', 'km', ['ASC']));
     
    //基于成员位置范围查询
    //查询以a-cafe为圆心,100千米范围内的成员
    var_dump(Redis::georadiusbymember('cafes', 'a-cafe', '1', 'km'));
    
    展开全文
  • Laravel使用Redis缓存

    千次阅读 2019-08-23 16:43:49
    上一篇:Windows下下载安装使用Redis 一、背景 就在今天的昨天,我以为我研究的Redis的下载使用没有用,因为发现Cache就能满足我的需求,但是今天发现,并不像我所想白忙一场,我发现Cache的Redis驱动也需要下载...
  • 今天主要写的是:使用redis做订阅/发布 代码-主要逻辑模块 <?php /** * 主要逻辑模块 * Created by PhpStorm. * User: Moer * Date: 2019/12/26 * Time: 11:08 */ namespace App\Services\Redis; use...
  • 主要介绍了Laravel框架实现redis集群的方法,简单分析了Laravel框架redis数据库集群功能设置步骤、相关操作技巧与注意事项,需要的朋友可以参考下
  • 安装 通过 Composer 安装 predis/predis 包(项目根目录下运行): ... 'host' => env('REDIS_HOST', '127.0.0.1'), //redis连接地址  'password' => env('REDIS_PASSWORD',null), //redis密码  
  • laravel 使用 redis 队列推送消息

    千次阅读 2019-05-16 11:38:01
    场景:人数增多,后台直接循环推送消息卡死,存储到 redis 队列中执行 基础操作:查看队列信息 例:keys * ->"queues:WalletReportJob" (获取 key) typequeues:WalletReportJob (获取类型) -> list lrange...
  • class RedisHa { protected static $name = 'redis_ha'; protected static $connections = []; protected static function init() { $hosts = explode(',', env('REDIS_HA_HOSTS'...
  • 问题一:启用监听收不到过期时间消息,原因是未开启配置解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令: config set notify-keyspace-events Ex 问题二:...
  • 使用setex命令可以同时设置数据和保存时间 $data = [ 'name'=>zhangsan, 'age' => 28, 'sex' => 1 ]; Redis::setex($cacheKey, 300, serialize($data)); 2、取redis if (Redis::exi....
  • laravel使用redis队列

    2020-04-01 10:59:48
    1、队列配置文件是config/queue.php(这里我...laravel中 app/Jobs 不存在,在运行 Artisan 命令 make:job 的时候,它将会自动创建。你可以通过 Artisan CLI 来生成队列任务类: php artisan make:job ProcessPodcast
  • Laravel 使用Redis 笔记

    千次阅读 2015-12-10 11:39:24
    1. Laravel中, Redis可以作为cache, session, queue的储存容器 2. 要启用Redis, 必须安装 predis插件, 即在composer.json中引用 'predis/predis', 最新版本为1.0.3 3. redis 地址与端口配置, 在config/database....
  • laravel使用redis缓存

    2019-12-31 08:47:12
    一,laravel安装redis扩展 composer require predis/predis 备注:如果安装了lumen微框架还需要安装illuminate/redis (5.2.) composer require illuminate/redis (5.2.) 如果安装了lumen //需要在bootstrap/app.php...
  • 每当用户登录时,执行两个操作:(1)写入session(用户信息 + 随机字符串A)(2)判断redis的集合长度是否大于等于3,如果是,则弹出集合第一个元素,否则,继续第三步。(3)写入redis,利用集合(key:用户id,...
  • Laravel使用redis保存SESSION 首先确认服务器已经安装redis服务,php安装了redis扩展. 1.打开config/database.php。在redis配置项中增加session的连接 'session' => [ 'host' => env('REDIS_HOST', '...
  • laravel 使用 redis 问题

    千次阅读 2018-08-09 14:13:41
    首先需要为laravel安装依赖包,通过composer安装,命令:composer require predis/predis 1.0.* 安装完之后首先需要确保你的服务器已经安装了redis服务,并且已经开启redis服务,否则会报Connection refused ...
  • Laravel开发-laravel-redis

    2019-08-28 08:26:56
    Laravel开发-laravel-redis Laravel Redis酒店
  • 首先安装redis服务器,如下安装教程地址 http://www.runoob.com/redis/redis-install.html 先在composer里安装(输入这条命令) composer require predis/predis 2.控制器里引入Redis use Illuminate\Support\Facades...
  • 例如,如果我们希望在Laravel API中对缓存和会话使用Sentinel后面的Redis,则无法像在没有Sentinel的标准单服务器Redis设置中那样为这两种类型的数据设置单独的Redis数据库。 当我们需要清除缓存时,这会引起问题,...
  • laravel 原子锁

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,669
精华内容 3,067
关键字:

laravel使用redis

redis 订阅