整理的一些小笔记

宝塔nginx laravel框架路由访问404:

location / { 

    try_files $uri $uri/ /index.php$is_args$query_string; 

} 

宝塔nginx tp5框架路由访问404:

location / {

  if (!-e $request_filename) {

       rewrite ^(.*)$ /index.php?s=$1 last;

        break;

  }

}

宝塔nginx vue路由刷新404解决方案:

location / {

    root  /www/wwwroot/clothing/clothing-admin/dist/; //项目路径

    index  index.html index.htm;

    try_files $uri $uri/ @router;

    index index.html;

}

location @router {

    rewrite ^.*$ /index.html last;

}

location / {

  try_files $uri $uri/ /index.html;

}

跨域问题:

  • php服务端添加请求头:
header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:OPTIONS, GET, POST'); // 允许option,get,post请求

header('Access-Control-Allow-Headers:x-requested-with'); // 允许x-requested-with请求头

vue项目显示base64图片:

src="data:image/png;base64,编码"

laravel composer安装:

  • 方式一:

    composer global require "larave/installer"
    
    laravel new 项目名称
    
  • 方式二:

    composer create-project --prefer-dist laravel/laravel 项目名称
    

创建中间件:php artisan make:middleware 类名

创建资源控制器:php artisan make:controller 控制器名称 --resource

创建普通控制器:php artisan make:controller 控制器名称

资源控制器路由:

  动作          URI              操作      路由名称

  GET        /photos                  index    photos.index

  GET        /photos/create create    photos.create

  POST        /photos   store    photos.store

  GET        /photos/{photo}    show      photos.show

  GET        /photos/{photo}/edit   edit      photos.edit

  PUT/PATCH  /photos/{photo}            update    photos.update

  DELETE      /photos/{photo}  destory  photos.destory

curl请求回来的数据带头部信息:

  //对返回的结果进行字符串处理

    if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {

        $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);

        $header = substr($result, 0, $headerSize);

        $body = substr($result, $headerSize);

    }

redis使用场景:

  • 一、热点数据的缓存:

    由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,我们可以设置过期时间然后再进行缓存更新操作,这个功能最为常见,我们几乎所有的项目都有所运用。
    
  • 二、限时业务的运用:

    redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。
    
  • 三、计数器相关问题

    redis由于incrby命令可以实现原子性的递增,所以可以运用于高并发的秒杀活动、分布式序列号的生成、具体业务还体现在比如限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。
    
  • 四、排行榜相关问题:

    关系型数据库在排行榜方面查询速度普遍偏慢,所以可以借助redis的SortedSet进行热点数据的排序。在奶茶活动中,我们需要展示各个部门的点赞排行榜, 所以我针对每个部门做了一个SortedSet,然后以用户的openid作为上面的username,以用户的点赞数作为上面的score, 然后针对每个用户做一个hash,通过zrangebyscore就可以按照点赞数获取排行榜,然后再根据username获取用户的hash信息,这个当时在实际运用中性能体验也蛮不错的。
    
  • 五、分布式锁

    这个主要利用redis的setnx命令进行,setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0 ,这个特性在俞你奔远方的后台中有所运用,因为我们服务器是集群的,定时任务可能在两台机器上都会运行,所以在定时任务中首先 通过setnx设置一个lock,如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行。 当然结合具体业务,我们可以给这个lock加一个过期时间,比如说30分钟执行一次的定时任务,那么这个过期时间设置为小于30分钟的一个时间 就可以,这个与定时任务的周期以及定时任务执行消耗时间相关。
    
    当然我们可以将这个特性运用于其他需要分布式锁的场景中,结合过期时间主要是防止死锁的出现。
    
  • 六、延时操作

     这个目前我做过相关测试,但是还没有运用到我们的实际项目中,下面我举个该特性的应用场景。 比如在订单生产后我们占用了库存,10分钟后去检验用户是够真正购买,如果没有购买将该单据设置无效,同时还原库存。 由于redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub/Sub频道,以便以某种方式接收影响Redis数据集的事件。 所以我们对于上面的需求就可以用以下解决方案,我们在订单生产时,设置一个key,同时设置10分钟后过期, 我们在后台实现一个监听器,监听key的实效,监听到key失效时将后续逻辑加上。 当然我们也可以利用rabbitmq、activemq等消息中间件的延迟队列服务实现该需求。
    
  • 七、分页、模糊搜索

    redis的set集合中提供了一个zrangebylex方法,语法如下:ZRANGEBYLEX key min max [LIMIT offset count]通过ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页数据查询,其中- +表示获取全部数据
    
    zrangebylex key min max 这个就可以返回字典区间的数据,利用这个特性可以进行模糊查询功能,这个也是目前我在redis中发现的唯一一个支持对存储内容进行模糊查询的特性。
    
    前几天我通过这个特性,对学校数据进行了模拟测试,学校数据60万左右,响应时间在700ms左右,比mysql的like查询稍微快一点,但是由于它可以避免大量的数据库io操作,所以总体还是比直接mysql查询更利于系统的性能保障。
    

八、点赞、好友等相互关系的存储

  Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。 又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。这个在奶茶活动中有运用,就是利用set存储用户之间的点赞关联的,另外在点赞前判断是否点赞过就利用了sismember方法,当时这个接口的响应时间控制在10毫秒内,十分高效。

九、队列

  由于redis有list push和list pop这样的命令,所以能够很方便的执行队列操作。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容