以前记录在公司内部的wiki上的,如今把这些经验分享出来,固然这些优化,都已经在框架的底层作掉了,使用框架时,并不须要特别在乎php
hset/hsetnx和hmset的性能差异
在注册用户的时候,以前咱们大量使用hsetnx,能够保证用户数据的惟一性,防止屡次写入
但通过测试,这种方式,相比hmset性能差异巨大,因此采起了下面的方式redis
存储数据,某些状况采用ziplist节省空间
在作游戏时,咱们大量使用redis的hash结构,但这种结构,虽然叫作hash,但当hash-max-ziplist-entries 512实用这个配置,数据key < 512条时,实际用的是ziplist,一种用binary作链表链接标识的压缩链表,为了节省存储空间,毕竟hash结构要记录的信息太多,空间换时间
在优化以前,咱们的一个普通的角色信息,是相似这样存储的框架
Key role:96性能
Field 96测试
Value [96,96,0,10,1,100]优化
一个role:96里只有一个field(96),这样实际上很是浪费空间,用一个完整的ziplist结构描述,但只存储一个key
因此进行了优化,例如role:0这个key,存储了512个field,进行了这样的拆分后,即不会触发阀值,将存储结构变为真正的hash table,也充分利用了ziplist的结构描述,大大节省了空间
一个简单的配置:
$config['redis_cut_single_table'] = 512;spa