位置: 编程技术 - 正文

降低PHP Redis内存占用(redis设置内存淘汰策略)

编辑:rootadmin

推荐整理分享降低PHP Redis内存占用(redis设置内存淘汰策略),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:redis缓存调优,redis设置内存淘汰策略,redis调整内存大小,php redis 缓存,redis缓存降级怎么实现,redis调整内存大小,redis内存飙升,redis调整内存大小,内容如对您有帮助,希望把文章链接给更多的朋友!

1、降低redis内存占用的优点

 1、有助于减少创建快照和加载快照所用的时间

 2、提升载入AOF文件和重写AOF文件时的效率

 3、缩短从服务器进行同步所需的时间

 4、无需添加额外的硬件就可以让redis存贮更多的数据

2、短结构

Redis为列表、集合、散列、有序集合提供了一组配置选项,这些选项可以让redis以更节约的方式存储较短的结构。

2.1、ziplist压缩列表(列表、散列、有续集和)

通常情况下使用的存储方式

当列表、散列、有序集合的长度较短或者体积较小的时候,redis将会采用一种名为ziplist的紧凑存储方式来存储这些结构。

ziplist是列表、散列、有序集合这三种不同类型的对象的一种非结构化表示,它会以序列化的方式存储数据,这些序列化的数据每次被读取的时候都需要进行解码,每次写入的时候也要进行编码。

双向列表与压缩列表的区别:

为了了解压缩列表比其他数据结构更加节约内存,我们以列表结构为例进行深入研究。

典型的双向列表

在典型双向列表里面,每个值都都会有一个节点表示。每个节点都会带有指向链表前一个节点和后一个节点的指针,以及一个指向节点包含的字符串值的指针。

每个节点包含的字符串值都会分为三部分进行存储。包括字符串长度、字符串值中剩余可用字节数量、以空字符结尾的字符串本身。

例子:

假若一个某个节点存储了'abc'字符串,在位的平台下保守估计需要个字节的额外开销(三个指针+两个int+空字符即:3*4+2*4+1=)

由例子可知存储一个3字节字符串就需要付出至少个字节的额外开销。

ziplist

压缩列表是由节点组成的序列,每个节点包含两个长度和一个字符串。第一个长度记录前一个节点的长度(用于对压缩列表从后向前遍历);第二个长度是记录本当前点的长度;被存储的字符串。

例子:

存储字符串'abc',两个长度都可以用1字节来存储,因此所带来的额外开销为2字节(两个长度即1+1=2)

结论:

压缩列表是通过避免存储额外的指针和元数据,从而达到降低额外的开销。

配置:

测试list:

1、建立test.php文件

此时的test-list中含有条数据,没有超除配置文件中的限制

2、往test-list中再推入一条数据

此时test-list含有条数据,大于配置文件中限制的条,索引将放弃ziplist存储方式,采用其原来的linkedlist存储方式

散列与有序集合同理。

2.2、intset整数集合(集合)

前提条件,集合中包含的所有member都可以被解析为十进制整数。

以有序数组的方式存储集合不仅可以降低内存消耗,还可以提升集合操作的执行速度。

配置:

set-max-intset-entries #限制集合中member个数,超出则不采取intset存储

测试:

建立test.php文件

2.3、性能问题

不管列表、散列、有序集合、集合,当超出限制的条件后,就会转换为更为典型的底层结构类型。因为随着紧凑结构的体积不断变大,操作这些结构的速度将会变得越来越慢。

测试:

#将采用list进行代表性测试

测试思路:

1、在默认配置下往test-list推入条数据,查看所需时间;接着在使用rpoplpush将test-list数据全部推入到新列表list-new中,查看所需时间

2、修改配置,list-max-ziplist-entries ,再执行上面的同样操作

降低PHP Redis内存占用(redis设置内存淘汰策略)

3、对比时间,得出结论

默认配置下测试:

1、插入数据,查看时间

结果耗时4秒

2、执行相应命令,查看耗时

更改配置文件下测试  

1、先修改配置文件

list-max-ziplist-entries #将这个值修改大一点,可以更好的凸显对性能的影响

list-max-ziplist-value #此值可不做修改

2、插入数据

执行test1.php

结果为:耗时s

3、执行相应命令,查看耗时

执行test2.php

结果为:执行次数:,耗时s

结论:

在本机中执行测试条数据就相差8s,若在高并发下,长压缩列表和大整数集合将起不到任何的优化,反而使得性能降低。

3、片结构

分片的本质就是基于简单的规则将数据划分为更小的部分,然后根据数据所属的部分来决定将数据发送到哪个位置上。很多数据库使用这种技术来扩展存储空间,并提高自己所能处理的负载量。

结合前面讲到的,我们不难发现分片结构对于redis的重要意义。因此我们需要在配置文件中关于ziplist以及intset的相关配置做出适当的调整。

3.1、分片式散列

#ShardHash.class.php

散列分片主要是根据基础键以及散列包含的键计算出分片键ID,然后再与基础键拼接成一个完整的分片键。在执行hset与hget以及大部分hash命令时,都需要先将key(field)通过shardKey方法处理,得到分片键才能够进行下一步操作。

3.2、分片式集合

如何构造分片式集合才能够让它更节省内存,性能更加强大呢?主要的思路就是,将集合里面的存储的数据尽量在不改变其原有功能的情况下转换成可以被解析为十进制的数据。根据前面所讲到的,当集合中的所有成员都能够被解析为十进制数据时,将会采用intset存储方式,这不仅能够节省内存,而且还可以提高响应的性能。

例子:

假若要某个大型网站需要存储每一天的唯一用户访问量。那么就可以使用将用户的唯一标识符转化成十进制数字,再存入分片式set中。

#ShardSet.class.php

4、将信息打包转换成存储字节

结合前面所讲的分片技术,采用string分片结构为大量连续的ID用户存储信息。

使用定长字符串,为每一个ID分配n个字节进行存储相应的信息。

接下来我们将采用存储用户国家、省份的例子进行讲解:

假若某个用户需要存储中国、广东省这两个信息,采用utf8字符集,那么至少需要消耗5*3=个字节。如果网站的用户量大的话,这样的做法将会占用很多资源。接下来我们采用的方法每个用户仅仅只需要占用两个字节就可以完成存储信息。

具体思路步骤:

1、首先我们为国家、以及各国家的省份信息建立相应的'信息表格'

2、将'信息表格'建好后,也意味着每个国家,省份都有相应的索引号

3、看到这里大家应该都想到了吧,对就是使用两个索引作为用户存储的信息,不过需要注意的是我们还需要对这两个索引进行相应的处理

4、将索引当做ASCII码,将其转换为对应ASCII(0~)所指定的字符

5、使用前面所讲的分片技术,定长分片string结构,将用户的存储位置找出来(redis中一个string不能超过M)

6、实现信息的写入以及取出(getrange、setrange)

实现代码:

#PackBytes.class.php

测试:

1、dealData处理后的信息,即为'信息表表格'

2、saveCode()

userID 国家 省份 0 中国 广东 日本 龟孙子区 日本 王八区

3、getMessage()

标签: redis设置内存淘汰策略

本文链接地址:https://www.jiuchutong.com/biancheng/293453.html 转载请保留说明!

上一篇:使用Codeigniter重写insert的方法(推荐)(codeignitor)

下一篇:php PDO实现的事务回滚示例(php中的pdo)

  • 确认固定资产减值损失
  • 兼职工资直接入公司账户
  • 企业财务发工资流程
  • 银行回单可以做收入吗
  • 财务怎么算社保缴费
  • 净现值为零时的收益率
  • 房产企业因资金问题退市
  • 存货取得的分录
  • 回迁房项目的会计和税务处理
  • 发票种类和适用范围
  • 制造费用可以抵进项税吗
  • 单位购买办公用品可以抵扣吗
  • 持有至到期投资属于什么科目
  • 建筑企业新项目增值税的计算
  • 小规模季度不超30万需要交什么税
  • 消费型增值税计算公式
  • 兼职获得员工旅游资源
  • 企业购房房产税土地税补缴
  • 公司购买的汽车可以一次性扣除吗
  • 个人所得税的税率是多少
  • 零售金银首饰消费税税率是多少
  • 汇算清缴租赁费包括物业管理吗
  • 水电费无发票如何做账
  • Mac系统中使用QuickTime Player实现屏幕录像图文教程
  • Qq浏览器里的文档怎么以文件形式发送
  • vcpkgsrv.exe是什么进程
  • 总分类账和明细账
  • 蚊子叮咬怎么办手抄报
  • 对外支付企业所得税计税依据
  • 印度泰姬陵建筑
  • php读取xml文件
  • php读取xml接口数据
  • 失业保险金支出项目14项
  • 土方工程合同签了一般多久开工
  • dedecms转eyoucms
  • 清包工一般计税如何开票
  • 技术开发免征增值税怎么开票
  • 还未摊销的房租怎么入账
  • 以前年度损益调整科目编码是多少
  • 工资标准表
  • 车辆通行费
  • 棚户区改造国家给政府拨款吗
  • 固定资产加速折旧最新政策2022
  • 扣缴个人所得税申报表模板
  • 酒店支付模式
  • 油卡充值做账
  • 设计费要计入固定成本吗
  • 借资本公积贷递延所得税负债是什么意思
  • 所得税多缴纳分录
  • 异地工程开票要注意什么手续
  • 采购入库单如何弃审U8
  • 利润表中财务费用中的利息费用和利息收入
  • 交易性金融资产的入账价值
  • 如何判断应当预见
  • 冲回以前年度工会费
  • 残保金减免优惠政策2023最新
  • 其他商业项目
  • 英特尔双核cpu
  • windows下怎么安装mac
  • windowsxp怎么改windows7
  • linux更新内核的好处
  • xp系统如何取消开机自动启动程序
  • Windows7忘记开机密码一键还原
  • win10变成win8怎么办
  • rhel7提供的5种基本安装方式是
  • Linux运维工程师工作内容
  • cocos2dx键盘控制移动
  • redis开机自动启动linux
  • 分页jsp
  • unity物理引擎原理
  • linux的sed -i
  • jQuery AjaxUpload 上传图片代码
  • jQuery使用animate实现ul列表项相互飘动效果示例
  • 深入理解计算机系统
  • jquery 动态添加列表元素
  • python流数据
  • 仿百度首页html代码静态
  • 税务部门督查内审部门监督检查的内容
  • 公司自有房屋装修费用入什么料目
  • 税务非正常户要提交什么资料
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设