搜索

查看: 3219|回复: 11

[PHP] Laravel操作redis和缓存操作详解

[复制链接]
发表于 2023-5-4 17:03:54 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:03:54 3219 11 看全部
目录
  • 一:操作redis
  • 1:redis拓展安装
  • 2:配置redis
  • 3:操作redis
  • 二:缓存操作
  • 1:缓存配置
  • 2:缓存操作
    一:操作redis
    1:redis拓展安装
    composer require predis/predis
    或者你也可以通过 PECL 安装 PhpRedis PHP 扩展,安装方法比较复杂,个人不推荐

    2:配置redis
    在config/database.php文件中配置redis
    (1):单个redis配置
    'redis' => [
        'client' => env('REDIS_CLIENT', 'predis'),//别名,如果你安装的是PhpRedis,将client值改为phpredis
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),//redis服务器主机
            'password' => env('REDIS_PASSWORD', null),//redis服务器密码
            'port' => env('REDIS_PORT', 6379),//redis服务器端口
            'database' => env('REDIS_DB', 0),
        ],
        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),//redis服务器主机
            'password' => env('REDIS_PASSWORD', null),//redis服务器密码
            'port' => env('REDIS_PORT', 6379),//redis服务器端口
            'database' => env('REDIS_CACHE_DB', 1),
        ],
    ],
    (2):redis集群配置
    'redis' => [
        'client' => env('REDIS_CLIENT', 'predis'),
        'clusters' => [
            'default' => [
                [
                    'host' => env('REDIS_HOST', 'localhost'),
                    'password' => env('REDIS_PASSWORD', null),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => 0,
                ],
            ],
        ],
    ],
    3:操作redis
    (1):设置redis
    Redis::set('val1','asdasd');
    (2):获取redis
    Redis::get('key')
    (3):删除redis
    Redis::del('key');
    二:缓存操作
    1:缓存配置
    laravel框架的缓存配置在config/cache.php文件中,配置参数有:
    (1):配置cache的驱动
    'default' => env('CACHE_DRIVER', 'file')
    Laravel 自带了几个不错且可开箱即用的驱动
    • file - 将 Session 保存在 framework/cache/data 中。
    • cookie - Session 保存在安全加密的 Cookie 中。
    • database - Session 保存在关系型数据库中。
    • memcached / redis - Sessions 保存在其中一个快速且基于缓存的存储系统中。
    • array - Sessions 保存在 PHP 数组中,不会被持久化。
    (2):根据你所选的驱动配置
    'stores' => [
            'apc' => [
                'driver' => 'apc',
            ],
            'array' => [
                'driver' => 'array',
            ],
            'database' => [
                'driver' => 'database',
                'table' => 'cache',
                'connection' => null,
            ],
            'file' => [
                'driver' => 'file',
                'path' => storage_path('framework/cache/data'),
            ],
            'memcached' => [
                'driver' => 'memcached',
                'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
                'sasl' => [
                    env('MEMCACHED_USERNAME'),
                    env('MEMCACHED_PASSWORD'),
                ],
                'options' => [
                    // Memcached::OPT_CONNECT_TIMEOUT => 2000,
                ],
                'servers' => [
                    [
                        'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                        'port' => env('MEMCACHED_PORT', 11211),
                        'weight' => 100,
                    ],
                ],
            ],
            'redis' => [
                'driver' => 'redis',
                'connection' => 'cache',
            ],
            'dynamodb' => [
                'driver' => 'dynamodb',
                'key' => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
                'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
                'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
                'endpoint' => env('DYNAMODB_ENDPOINT'),
            ],
        ],
    • 如果你选择了的database作为驱动的时,就需要修改stores内的database配置
    'database' => [
        'driver' => 'database',
        'table' => 'cache',//配置的缓存表名
        'connection' => null,//连接名,这个是在config/database.php文件配置的,不进行配置使用默认连接的数据库
    ],
    你选择了database作为缓存驱动的话,在目录命令行执行
    php artisan cache:table
    php artisan migrate
    这时候会在数据库生成一个cache表用于存储缓存数据
    • 如果你选择了file作为驱动时,就需要修改stores内的file配置
    'file' => [
        'driver' => 'file',
        'path' => storage_path('framework/cache/data'),//这里配置的是缓存数据保存地址
    ],
    • 如果你选择了redis作为驱动时,就需要修改stores内的redis配置
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',//redis的连接名,对应config/database.php文件的redis配置,如果不进行配置使用默认的redis连接配置
    ],
    2:缓存操作
    (1):设置缓存
    Cache::put('key', 'value', $minutes);
    //将不存在于缓存中的数据放入缓存中,如果存放成功返回 true ,否则返回 false
    Cache::add('key', 'value', $minutes);
    //数据永久存入缓存
    Cache::forever('key', 'value');
    //获取users缓存,如果不存在,执行第三个参数,将返回值存入缓存
    $value = Cache::remember('users', $minutes, function () {
        return DB::table('users')->get();
    });
    //获取users缓存,如果不存在,执行第三个参数,将返回值存入缓存并永久储存
    $value = Cache::rememberForever('users', function() {
        return DB::table('users')->get();
    });
    (2):获取缓存
    $value = Cache::get('key')
    //传递第二个参数,用来指定如果查找的数据不存在时,你希望返回的默认值
    $value = Cache::get('key', 'default');
    //第二个参数传递 Closure 作为默认值。如果指定的数据不存在于缓存中,将返回 Closure 的结果
    $value = Cache::get('key', function () {
        return DB::table(...)->get();
    });
    //判断缓存是否存在,如果值为 null 或 不存在返回false
    Cache::has('key')
    (3):删除缓存
    //从缓存中获取到数据之后再删除它,如果缓存中不存在该数据, 则返回 null
    $value = Cache::pull('key');
    //删除缓存
    Cache::forget('key');
    //清空缓存
    Cache::flush();
    (4):缓存递增递减
    increment 和 decrement 方法可以用来调整高速缓存中整数项的值。这两个方法都可以传入第二个可选参数,用来指示要递增或递减值的数量
    注意:使用increment和decrement前提对应的缓存之前必须有缓存数据,不然返回NULL
    Cache::increment('key');
    Cache::increment('key', 2);
    Cache::decrement('key');
    Cache::decrement('key', 2);
    (5):使用多种缓存方式
    如果你想要使用多种缓存,你可以使用下面这种形式操作缓存,其他方法同理
    $value = Cache::store('file')->get('foo');//获取
    Cache::store('redis')->put('bar', 'baz', 10);//设置
    以上就是Laravel操作redis和缓存操作详解的详细内容,更多关于Laravel操作redis 缓存操作的资料请关注知鸟论坛其它相关文章!
  • 发表于 2023-6-28 19:32:46 | 显示全部楼层
    胡37 2023-6-28 19:32:46 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-28 20:13:20 | 显示全部楼层
    123456868 2023-6-28 20:13:20 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-28 22:20:17 | 显示全部楼层
    塞翁364 2023-6-28 22:20:17 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 03:09:19 | 显示全部楼层
    Gordon520 2023-6-30 03:09:19 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-30 09:07:37 | 显示全部楼层
    风来时狂放 2023-6-30 09:07:37 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 21:47:25 | 显示全部楼层
    惜颜705 2023-6-30 21:47:25 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-7-3 15:02:15 | 显示全部楼层
    123456809 2023-7-3 15:02:15 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-7-3 22:48:38 | 显示全部楼层
    我是的十八簿 2023-7-3 22:48:38 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-7-3 23:23:09 | 显示全部楼层
    十二音阶囤 2023-7-3 23:23:09 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表