提高Redis使用性能秘诀
- KEY尽量少的原则,能放在1个KEY的就放入1个KEY,KEY开销很大
- 尽量减少与Redis发生的交互次数,能批量的就批量,能事务、管道的就事务、管道
- 从业务架构分析确定使用哪种数据类型,从 全局 出发,如果类型选错了再改变就很不容易
- 使用每一个Redis命令注意是 O(1) ,还是 O(N) ,切记滥用,认准每个命令的特性再使用也不迟
- 使用PHP Redis 的C语言扩展,性能远远高于PHP脚本编写的文件
- 时刻清醒你往Redis里存储了什么,频繁交互、相对静态的小数据存储至Redis是理想的,300万用户所有不常用的信息都无脑塞进去不但浪费内存(有可能服务器128G内存不够用必须要老大花钱买内存),还影响Redis性能,增大管理成本
Redis各大类型特性注意事项一览表
字符串(Strings) | 哈希(Hashes) | 列表(Lists) | 集合(Sets) | 有序集合(Sorted sets) |
---|---|---|---|---|
512MB/Value | 4294967295/Hash | 4294967295/List | 4294967295/Set | 4294967295/Stored |
Key【唯一】 Value【重复】 | Key【唯一】 Hash key【唯一】 Value【重复】 | Key【唯一】 Index【唯一】 Value【重复】 | Key【唯一】 Value【唯一】 | Key【唯一】 Score【重复】 Value【唯一】 |
无序 | key无序 Hash key按先后进入顺序有序 | key无序 Index按先后进入顺序有序 | key无序 Value无序 | key无序 按Score值排序有序 |
简单存储,持久化的memcached,计数器、灵活操作字符串 | Json KV结构,单表存储,缓存,对象存储 | 队列系统,时间轴系统设计,显示极端数据,先进先出,后进后出 | 以key为班级,Value老师,可以求出不同班级中老师的交集、并集 | 以key为班级,Score为分数,Value为学生的考试成绩排行榜报表等分组统计功能 |
最原始的缓存系统,性能高,任意1个的性能 O(1) | 类似关系型数据库操作,性能高,任意1个的性能 O(1) | 操作首尾数据,统计长度很快 O(1) ,中间数据操作性能不高 O(N) | 类似数组下标访问元素,添加,删除,查找任意1个的复杂度都是 O(1) | Sets 升级版,有分组+统计等功能,添加,删除,查找任意1个的复杂度都是 O(log(1)) |
简单的数据交互 | 简单的数据交互 | 简单的数据交互 | 支持服务端数据运算 | 支持服务端数据运算 |
注意
phpRedisAdmin 里面显示的顺序有BUG,显示结果排序与redis-cli命令里面的排序顺序并不完全一致,生产环境应以redis-cli为准(Redis version: 3.0.7 )