laravel 常用的一些例子总结

2022-09-11 14:38:07 浏览数 (1)

在laravel中使用redis的分布式锁

例一
代码语言:javascript复制
<?php

    $lockKey = 'lockKey';
    $redis = IlluminateSupportFacadesRedis::connection();
    $redis->setnx($lockKey, 1);
    $redis->expire($lockKey, 10);
?>
这样有一个问题,setNX设置过期时间并不是原子的操作,如果在设置执行完 $redis->setnx($lockKey, 1);时服务器宕机了,这时候未设置成功过期时间,则其他用户获取不到锁
例二
代码语言:javascript复制
<?php
    $lockKey = 'lockKey';
    $redis = IlluminateSupportFacadesRedis::connection();
    $lock = $redis->set($lockKey, 1, 'ex', 10,'nx');
?>
例二相对于例一而言,实现了原子操作设置过期时间(从2.6.12版本开始才有的)
下面我重点说一下laravel中set命令的几个参数含义,在网上未曾找到详细的解释,特此记录下来。
代码语言:javascript复制
//参数一: $key                           缓存键
//参数二: $value                         缓存值
//参数三: $expireResolution              EX/PX
//                                               EX        设置键key的过期时间,单位时秒(seconds)
//                                               PX        设置键key的过期时间,单位时毫秒(milliseconds)              
//   参数四: $expireTTL                     缓存键过期时间,单位由参数三决定
//   参数五: $flag                          NX/XX                               
//                                                NX  只有键key不存在的时候才会设置key的值
//                                                XX  只有键key存在的时候才会设置key的值                            
set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)

在Laravel中框架查询运行的 SQL 语句

方法一:
代码语言:javascript复制
 DB::connection()->enableQueryLog(); // 开启查询日志
 ......
 dd(DB::getQueryLog());
方法二:
  • 安装
代码语言:javascript复制
 composer require guanguans/laravel-dump-sql -v
 php artisan vendor:publish --provider="Guanguans\LaravelDumpSql\ServiceProvider"
  • 使用1
代码语言:javascript复制
 // Get sql statement.
User::where('id', 1)->toRawSql();
DB::table('user')->where('id', 1)->toRawSql();

// Print SQL statements.
User::where('id', 1)->dumpSql();
DB::table('user')->where('id', 1)->dumpSql();

// Print SQL statements and exit.
User::where('id', 1)->ddSql();
DB::table('user')->where('id', 1)->ddSql();
  • 使用2
    • 生成config/dumpsql.php文件
    • 自定义别名
代码语言:javascript复制
php artisan vendor:publish --tag="laravel-dump-sql"
代码语言:javascript复制
return [
    /*
     * Get sql statement.
     */
    'to_raw_sql' => 'Your favorite method name',

    /*
     * Print SQL statements.
     */
    'dump_sql' => 'Your favorite method name',

    /*
     * Print SQL statements and exit.
     */
    'dd_sql' => 'Your favorite method name',
];
方法三:
  • select语句可以直接使用->tosql();

0 人点赞