php实现基于shmop扩展的数据缓存
http://eslizn.com/post/php-data-cache-for-shmop.html
今天上课时研究了下PHP的数据缓存,根据网上的资料,一般采用serialize序列化存储,读取时将数据通过unserialize将数据反序列化还原.
接着,缓存一般存储在文件或者内存中.在大型应用中,一般是将模板缓存和数据缓存分割开来的,而且是将模板缓存以文件的形式缓存,数据使用内存来缓存.这样的架构能在很大程度上减轻数据库和程序的压力.
关于php操作内存,我选择了shmop扩展,其方法只有6个:
- shmop_open 打开内存块.
- shmop_write 向内存块中写入数据
- shmop_size 获得内存块大小
- shmop_read 读取内存块数据
- shmop_delete 删除内存块数据
- shmop_close 关闭内存块
1
|
int shmop_open ( int $key , string $flags , int $mode , int $size )
|
- a:只读内存段
- c:读写内存段,如果内存段不存在则创建
- w:读写内存段
- n:创建一个新的内存段,如果已经存在则返回失败.
1
|
int shmop_write ( int $shmid , string $data , int $offset )
|
1
|
string shmop_read ( int $shmid , int $start , int $count )
|
1
|
int shmop_size ( int $shmid )
|
1
|
bool shmop_delete ( int $shmid )
|
1
|
void shmop_close ( int $shmid )
|
/*
* Memcache 内存缓存模块
* init() 初始化
* get($key) 获取数据
* set($key,$val) 存储数据
* del($key) 删除数据
* close() 关闭内存段
* Author Eslizn http://eslizn.com at 2011-12-17
*/
class
Memcache
{
public
static
$list
=
array
();
public
static
function
init()
{
//Memcache::close();
}
public
static
function
get(
$key
)
{
if
(isset(Memcache::
$list
[
$key
]))
{
return
unserialize(shmop_read(Memcache::
$list
[
$key
],0,shmop_size(Memcache::
$list
[
$key
])));
}
return
false;
}
public
static
function
set(
$key
,
$val
)
{
$val
=serialize(
$val
);
if
(isset(Memcache::
$list
[
$key
]))
{
shmop_close(Memcache::
$list
[
$key
]);
}
Memcache::
$list
[
$key
] = shmop_open(
ftok
(
__FILE__
,
$key
),
"c"
,0664,
strlen
(
$val
));
shmop_write(Memcache::
$list
[
$key
],
$val
,0);
return
true;
}
public
static
function
del(
$key
)
{
if
(isset(Memcache::
$list
[
$key
]))
{
return
shmop_delete(Memcache::
$list
[
$key
]);
}
}
public
static
function
close()
{
while
(!
empty
(Memcache::
$list
))
{
shmop_close(
array_pop
(Memcache::
$list
));
}
return
true;
}
}
php实现基于shmop扩展的数据缓存相关推荐
- ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...
ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...
- 深入云原生 AI:基于 Alluxio 数据缓存的大规模深度学习训练性能优化
作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...
- 【深度学习】基于 Alluxio 数据缓存的性能优化
作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...
- 阿里云原生实践:基于 Alluxio 数据缓存的大规模深度学习训练性能优化
导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟.然而,随着云原生人工智能(Clou ...
- 基于ICN的数据缓存
什么是数据缓存? • 在每个 ICN 路由器的 CS 中输入一个条目. • 格式(前缀,二进制数据). • 使用缓存,无需费心向具有原始内容的服务器发送请求. • 缓存哪些数据取决于算法. • 此外, ...
- 如何基于java代理对大数据缓存组件返回的数据进行脱敏和阻断
如何基于java代理对大数据缓存组件返回的数据进行脱敏和阻断 背景 架构拓扑图 实现方式对比 UDF方案 优点: 缺点: 改写返回结果方案 优点: 缺点: 说明 实现 默认处理方式 redis报文解析 ...
- PHP扩展安装与使用系列教程(39) --- yac 用户数据缓存插件
yac 用户数据缓存插件 假设 可自定义 php 安装目录: /root/php/bin/php74 php 超链接目录路径 : /usr/bin 源码目录 : /root/php/packages ...
- 用Apache Ignite实现可扩展的数据网格
在本文中,我们将先介绍数据网格(Data Grid)的基本概念.属性.以及能够提供的服务,然后讨论如何设计可扩展的数据网格,以满足实际场景的业务需求. 什么是数据网格? 数据网格是一组能够提供共享数据 ...
最新文章
- python3 zipfile模块 zip压缩解压
- 请问:hive中avg聚合函数会使用到combiner功能吗?
- Matlab图形用户界面编程初级入门
- CINNO:2025年全球折叠屏智能手机销量有望超5700万部
- poj 动态规划总结
- 怒爬某 Hub 资源就为撸了一个鉴黄平台
- 软件开发中的需求种类
- [辅助工具]	【羽睿】Proxmark3 Easy Gui 4.0 5.0 5.1加强版 PM3GUI_X稳定优化版
- TL-WAN726N_V2_免驱版Win10开启AP网络
- java iv不是内部命令_java – 解密错误:“no iv set when one expected”
- c语言中calc用法,CSS中calc()函数怎么使用
- Effective Java(第三版) 学习笔记 - 第六章 枚举和注解 Rule34~Rule41
- 多维尺度分析MDS详解
- 【CF #797 Div3】A-E
- 数据结构教程(第五版 李春葆 上机实验题3 验证性实验)
- 为什么 Java 与 Python 在对待成员变量的访问控制方式截然相反?
- 一文读懂多分类的评价指标(微平均、宏平均、加权平均)
- 没有思考的生活是走向迷失自己的开始
- Centos执行.sh文件
- Unity中 批量设置成 预制体