对于缓存在redis中且不会改变的数据并发读为什么还会出现QPS的瓶颈
答案:1 悬赏:10 手机版
解决时间 2021-12-04 03:52
- 提问者网友:像風在裏
- 2021-12-03 20:53
对于缓存在redis中且不会改变的数据并发读为什么还会出现QPS的瓶颈
最佳答案
- 五星知识达人网友:往事隔山水
- 2021-12-03 21:59
相对于熟读官方文档,更重要的是要把框架环境搭起来。零、环境介绍操作系统:centOS数据库:mysql5/installerphpmvcomposer.phar/usr/local/bin/composer安装完成,使用以下命令看是否安装成功composer-V出现版本号,即说明安装成功三、安装Laravel按照Laravel的官方文档说明即可,建议使用【通过Laravel安装工具】,没什么坑,这里略过提示:由于Laravel还依赖于一些的PHP扩展,所以使用yum安装sudoinstallyumphp-mysqlphp-mcryptphp-mbstringphp-tokenizerphp-openssl安装完成后,在Nginx的配置文件(一般是/etc/nginx/conf.d/default.conf)最下方添加如下配置location/{try_files$uri$uri//index.php?$query_string;}来到你的laravel工程目录下,看到storage和vendor文件夹,使用以下命令修改其文件读写权限,让Nginx用户能读写它sudochmod-R766storagesudochmod-R766vendor四、让MVC跑起来!在此之前,你应该读一下官方文档路由、控制器、数据库使用基础、EloquentORM至此,可以开始coding,开发一个MVC的demo了,此demo的功能是将数据库表tbl_item从数据库里读出来,并以json格式响应给浏览器。假设你已经通过laravelnewdemo来初始化你的webapp。数据库里建库(demo)、建表(tbl_item),(字段随意定)配置配置文件config/database.php直接操作数据库,往tbl_item里插入一条数据开始codingdemo/app/http/routes.php底部添加如下代码:Route::get('/item/{id}','ItemController@showItem');demo/app/http/controllers/目录新添文件ItemController.php,代码如下:model=newItem();}publicfunctionshowItem($id){$users=$this->model->fetchAll();echojson_encode($users);Log::info('获取用户列表,通过msyql');}}demo/app/目录下新增文件Item.php代码如下all()->toJson();return$items;}}使用浏览器访问yourIp/item/1,即可列出所有的item数据五、Laravel结合Redis直连DB是不够的,很快数据库访问就会成为系统的瓶颈。我们引入缓存Redis。还是一样的思路,先让系统跑起来。1、安装启动Redis安装$wgetdownload.redis.io/releases/redis-3.0.1.tar.gz$tarxzfredis-3.0.1.tar.gz$cdredis-3.0.1$make启动$src/redis-server查看官方下载和安装文档,只需要几个命令即可2、安装PHPPRedisPRedis是PHP访问redis的扩展包,只需要下载原码即可,不需要安装PHP扩展(如php-redis.so)。但在这之前要介绍一个composer,因为laravel通过它来安装第三方程序包(管理依赖关系)。cd到你的App所在路径,修改composer.json,在require字段里,添加"predis/predis":"~1.0.1",然后当前目录下sudocomposerupdate,此时就会自动下载包需要的扩展包,这些扩展包将会被放在vendor目录下。如果出现内存不够这些报错,现在看来是内存分配不够的原因,重启一下服务器即可,彻底解决的法要修改服务器配置,但我不清楚改哪里,后续再补配置相关配置,查看官方文档即可。主要是配置config/database.php'redis'=>array('cluster'=>false,'default'=>array('host'=>'127.0.0.1','port'=>6379))3、codingmodel=newUser();}publicfunctionshowUser($id){$redis=Redis::connection('default');$cacheUsers=$redis->get('userList');if($cacheUsers){$users=$cacheUsers;print_r($users);Log::info('获取用户列表,通过redis');}else{$users=$this->model->fetchAll();$redis->set('userList',$users);print_r($users);Log::info('获取用户列表,通过msyql');}}}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯