redis游戏排行榜php
创始人
2024-11-25 00:32:06
0

大家好,如果您还对redis游戏排行榜php不太了解,没有关系,今天就由本站为大家分享redis游戏排行榜php的知识,包括thinkphp redis 怎么选择数据库的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一、在php中 为什么不能使用redis类

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

若想在PHP中使用redis,首先要先安装redis。然后在PHP中配置扩展。

首先下载好redis安装文件,解压到D盘或其他盘。

把这个文件夹复制到其它地方,比如D:\redis目录下。

打开一个cmd窗口使用cd命令切换目录到D:\redis运行 redis-server.exe redis.conf

如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。

这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了

切换到redis目录下运行 redis-cli.exe-h 127.0.0.1-p 6379

完成了配置之后,要在PHP中添加redis的扩展,之后才可以用PHP灵活的使用它。

在windows下安装php的redis扩展非常简单,下载一个.dll扩展包放到php的ext目录下,在php.ini里边添加一行配置就可以了。

redis=newRedis();redis->connect(‘127.0.0.1′,6379);

redis−>set(‘test′,′helloworld!′);echoredis->get(‘test’);

二、PHP Redis是使用connect还是pconnect

connect:脚本结束之后连接就释放了。

pconnect:脚本结束之后连接不释放,连接保持在php-fpm进程中。

为了验证这点,可以写个脚本测试一下。

其中服务器是nginx,php-fpm采用静态方式,因为动态方式下php-fpm的进程数量可能会变化,所以为了简单我们采用静态方式启动。

其中php-fpm的数量我们设置成5个。

下面的脚本测试使用connect的情况,让脚本连接到redis,然后休眠10s。

$app->get('/', function(){

$redis->connect('127.0.0.1');

这时候可以看下redis中的connect_clients:

[lunweiwei@stefanie~]$ redis-cli info| grep connected_clients

等脚本运行完毕之后再看一下connect_clients:

[lunweiwei@stefanie~]$ redis-cli info| grep connected_clients

之前建立的redis连接资源被释放了。

修改上面的代码,把connect改成pconnect:

$app->get('/', function(){

$redis->pconnect('127.0.0.1');

和上面同样的操作,发现脚本脚本运行结束后connected_clients还是14:

[lunweiwei@stefanie~]$ redis-cli info| grep connected_clients

这说明脚本运行结束后,redis连接资源并没有释放,而是由php-fpm进程保持(可以通过 kill php-fpm看到,当脚本停止运行后连接释放)

所以使用pconnect代替connect,可以减少频繁建立redis连接的消耗。

另外,使用pconnect还可以减少同一个进程(php-fpm)频繁建立连接的消耗,可以通过以下代码验证:

$redis1->connect('127.0.0.1');

$redis2->connect('127.0.0.1');

运行上述脚本,会发现connect_clients会增加2个。

$redis1->pconnect('127.0.0.1');

$redis2->pconnect('127.0.0.1');

而运行上述代码,connect_clients只会增加1个,这说明在一个进程中,pconnect是可以保持redis连接状态提供复用的。

三、PHP删除Redis所有数据

返回已经删除key的个数(长整数)

$redis->delete('key1','key2');

$redis->delete(array('key3','key4','key5'));

$redis->lPop('key');

输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素

$redis->lRem('key','A', 2);

删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素

返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

$redis->delete('x','y');

$redis->lPush('x','abc');$redis->lPush('x','def');$redis->lPush('y','123');$redis->lPush('y','456');// move the last of x to the front of y. var_dump($redis->rpoplpush('x','y'));

var_dump($redis->lRange('x', 0,-1));

var_dump($redis->lRange('y', 0,-1));

删除等一系列相关操作查看redis相关文档

四、thinkphp redis 怎么选择数据库

1、redis中的每一个数据库,都由一个 redisDb的结构存储。其中,redisDb.id存储着 redis数据库以整数表示的号码。redisDb.dict存储着该库所有的键值对数据。redisDb.expires保存着每一个键的过期时间。

2、当redis服务器初始化时,会预先分配 16个数据库(该数量可以通过配置文件配置),所有数据库保存到结构 redisServer的一个成员 redisServer.db数组中。当我们选择数据库 select number时,程序直接通过 redisServer.db[number]来切换数据库。有时候当程序需要知道自己是在哪个数据库时,直接读取 redisDb.id即可。

3、既然我们知道一个数据库的所有键值都存储在redisDb.dict中,那么我们要知道如果找到key的位置,就有必要了解一下dict的结构了:

//记录 rehash进度的标志,值为-1表示 rehash未进行

//当前正在运作的安全迭代器数量

由上述的结构可以看出,redis的字典使用哈希表作为其底层实现。dict类型使用的两个指向哈希表的指针,其中 0号哈希表(ht[0])主要用于存储数据库的所有键值,而1号哈希表主要用于程序对 0号哈希表进行 rehash时使用,rehash一般是在添加新值时会触发,这里不做过多的赘述。所以redis中查找一个key,其实就是对进行该dict结构中的 ht[0]进行查找操作。

4、既然是哈希,那么我们知道就会有哈希碰撞,那么当多个键哈希之后为同一个值怎么办呢?redis采取链表的方式来存储多个哈希碰撞的键。也就是说,当根据key的哈希值找到该列表后,如果列表的长度大于1,那么我们需要遍历该链表来找到我们所查找的key。当然,一般情况下链表长度都为是1,所以时间复杂度可看作o(1)。

二、当redis拿到一个key时,如果找到该key的位置。

了解了上述知识之后,我们就可以来分析redis如果在内存找到一个key了。

1、当拿到一个key后, redis先判断当前库的0号哈希表是否为空,即:if(dict->ht[0].size== 0)。如果为true直接返回NULL。

2、判断该0号哈希表是否需要rehash,因为如果在进行rehash,那么两个表中者有可能存储该key。如果正在进行rehash,将调用一次_dictRehashStep方法,_dictRehashStep用于对数据库字典、以及哈希键的字典进行被动 rehash,这里不作赘述。

3、计算哈希表,根据当前字典与key进行哈希值的计算。

4、根据哈希值与当前字典计算哈希表的索引值。

5、根据索引值在哈希表中取出链表,遍历该链表找到key的位置。一般情况,该链表长度为1。

6、当 ht[0]查找完了之后,再进行了次rehash判断,如果未在rehashing,则直接结束,否则对ht[1]重复345步骤。

到此我们就找到了key在内存中的位置了。

关于本次redis游戏排行榜php和thinkphp redis 怎么选择数据库的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

相关内容

热门资讯

ios黄油游戏排行榜 各位老铁们,大家好,今天由我来为大家分享ios黄油游戏排行榜,以及手机黄油有哪些推荐的相关问题知识,...
黑魔法游戏提高知识和修养 一、哥特风游戏《黑魔法》怎么玩洗完之后选择去晚餐室吃些东西。吃完饭之后去浴室可以解锁剧情,去卧室睡觉...
游泳安全知识游戏 一、游泳的安全知识有哪些1,必须在家长(监护人)的带领下去游泳。单身一人去游泳最容易出问题,如果你的...
没点知识怎么玩游戏呢图片 一、不上班,吃外卖,整天玩游戏的人是靠什么生活的身边恰好就有这样一个女生朋友,从一起毕业出来上班到目...
丰富知识英文游戏推荐一下 一、我知道游戏很好玩的英文下载地址:类型:安卓游戏-益智休闲版本:v1.1.2大小:27.00M语言...
竞答游戏知识 一、关于答题的游戏有哪些答题的游戏有一站到底pk版,微信成语猜猜看,问答RPG魔法使与黑猫维兹,挑战...
电脑游戏相关知识点归纳 一、二年级数学下册知识点归纳学习的成功与失败原因是多方面的,要首先从自己身上找原因,才能受到鼓舞,找...
知识比赛类游戏 一、求一个响亮而有文采的百科知识竞赛活动的名称求一个响亮而有文采的百科知识竞赛活动的名称 1、知识百...
二年级下册趣味知识游戏 一、二年级下册数学广角推理(二)趣味乐园挖地雷原问题:答案:扩展资料主要考察的是平均数的知识点:表示...
传奇游戏制作基础知识是什么 一、传奇是什么游戏呵呵哥们算你问对人了我就是传奇的忠实粉丝他的全名叫热血传奇是2001年推出的一款基...