memcached和php关系,php – memcacheD这没关系?

Is this code vulnerable to the expired cache race condition? How would you improve it?

是.如果两个(或多个)并发客户端尝试从缓存中获取相同的密钥并最终从数据库中提取它.您将在数据库上出现峰值,并且数据库将在一段时间内处于高负载状态.这称为缓存标记.有几种方法可以解决这个问题:

>对于新项目预热缓存(基本上意味着您在网站上线之前预加载所需的对象).

>对于定期过期的项目,创建一个未来的过期时间,而不是实际过期时间(比如说5-10分钟).然后,当您从缓存中提取对象时,请检查过期时间是否已关闭,将来是否缓存以防止任何其他客户端更新缓存,以及从数据库进行更新.为了能够在没有缓存标记的情况下工作,您需要实现密钥锁定或使用cas标记(需要最新的客户端库才能工作).

Let’s say that query X gets 100 rows. A little after row #50 is modified by another process (lets say that the retail price gets increased).

缓存中有三种类型的数据:

>对象

>物体清单

>生成的数据

我通常做的是将对象保持为单独的键,然后在列表中使用缓存“指针”.在你的情况下你在缓存中的某个地方有N个objets(假设键是1,2..N),然后你有一个数组数组中的对象列表(1,2,3,10,42 …) .当您决定使用对象加载列表时,从缓存加载列表键,然后从缓存加载实际对象(使用getMulti减少请求).在这种情况下,如果任何对象得到更新,您只能在一个位置更新它,并且它会自动更新到任何地方(更不用说使用此技术可以节省大量空间).

编辑:决定添加更多关于超前时间到期的信息.

使用到期数据x设置对象并将其保存到数据库中,其有效期为x 5分钟.这是从缓存加载对象时执行的步骤:

>检查是否需要更新(时间() – x <0)

>如果是这样,请锁定密钥,以便在刷新项目时没有人可以更新它.如果您无法锁定密钥,那么其他人已经在更新密钥,它就变成了SEP(Somebody Else的问题).由于memcached没有锁的解决方案,因此您必须设计自己的机制.我通常通过在末尾添加一个单独的键和原始键值“:lock”来完成此操作.您必须将此键设置为以尽可能短的数量到期(对于1秒的memcached).

>如果您获得了密钥的锁定,则首先使用新的到期时间保存对象(这样您确定没有其他客户端会尝试锁定密钥),然后继续您的业务并从数据库更新密钥,使用适当的超前期限再次保存新值(请参阅第1点).

希望这清除一切:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 如何单独刷新模板,反馈一个x-admin模板的问题,点击左侧栏不会刷新右侧栏当前页面的问题,并提供解决方案。...

在xadmin.js或者x-admin.js里面找到左侧菜单效果的函数&#xff0c;2.0版本的如下&#xff1a;//左侧菜单效果// $(#content).bind("click",function(event){$(.left-nav #nav li).click(function (event) {if($(this).children(.sub-menu).length){if($(this).hasCl…

oracle 安装乱码,linux安装Oracle中文乱码问题汇总

解决oracle中文显示乱码有三层地方需要调整或者修改第一层&#xff1a;操作系统层1.首先查看linux是否有安装中文字符集&#xff0c;locale -a2.设置用户的中文字符集查看到linux安装了中文字符集&#xff0c;那么oracle用户下面要设置中文字符集vi /etc/locale.conf # centos7…

php 解析yaml,php yaml 解析 报错问题

今天用php写了一个简单的博客引擎&#xff0c;其中要用php yaml解析器&#xff0c;但是在使用的过程中遇到了这样的报错[09-Dec-2017 14:54:25 PRC] PHP Warning: yaml_parse(): end of stream reached without finding document 0 in /home/twikoizo/public_html/dev/core/mod…

oracle 00371,PLS-00371: 'WEB_LOGIN_CHECK_PK.CURSORTYPE' 最多允许有一个声明

Oracle 10.2.0.4 , 从其他地方导入过来的packages, 发现编译的时候报错。报错信息如下&#xff1a;PACKAGE BODY DPBG_WEB.WEB_LOGIN_CHECK_PKOn line: 11PLS-00371: WEB_LOGIN_CHECK_PK.CURSORTYPE 最多允许有一个声明package的spec 如下&#xff1a;CREATE OR REPLACE P…

oracle判断数据出现交叉,Oracle move table分析

在move操作的时候&#xff0c;进行的是block之间的数据copy&#xff0c;所以table所位于的block的区域会发生变化&#xff1b;所有行物理存储的顺序不会发生变化&#xff0c;但行号会变成按AAA增1的顺子&#xff0c;所以block里行会挪紧&#xff0c;实现了消除HWM和行碎片(包括…

php 路径有汉字,路径文字工具

大家可能会在视频上面看到一些不规则的字幕吧&#xff0c;比如&#xff1a;圆形、椭圆、波浪形等等&#xff0c;这些也叫做路径文字&#xff0c;就是在给视频添加字幕的时候&#xff0c;让文字按着自己描绘的路径来排列&#xff0c;这样就得到了路径文字。原理很简单&#xff0…

在toad新增oracle用户,利用toad发现oracle自动为你干了什么(表空间建立和用户建立)...

利用toad发现oracle自动为你干了什么(表空间建立和用户建立)Oracle:10.2.0.1Windows 2003一、表空间sql>Create tablespace dba datafile ‘D:\dba.dbf’ size 1M autoextend on maxsize 10M;-- DBA (Tablespace)--CREATE TABLESPACE DBA DATAFILED:\DBA.DBF SIZE 1M AUTOE…

linux依据时间过滤文件,详解Linux查找目录下的按时间过滤的文件

在维护项目中&#xff0c;有时会指定都一些条件进行过滤文件&#xff0c;并对该批文件进行操作&#xff1b;这时我们将使用shell命令进行操作&#xff1b;直接上代码#!/bin/sh#BEGIN#find ./ ! -name "." -type d -prune -o -newermt 2001-01-01 00:00:00 ! -newermt…

linux view查看日志命令,【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

linux查看日志文件内容命令tail、cat、tac、head、echotail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,---------------------------linux 如何显示一个文件的某几行(中间几行)从第3000行开始&#xff0c;显示1000行。即显示3000~3999行cat fi…

qq linux版本下载官网下载,腾讯QQ For Linux

安装帮助如何选择安装包&#xff1f;Linux QQ 目前支持x64(x86_64、amd64)、arm64(aarch64)、mips64(mips64el)三种架构&#xff0c;每种架构支持Debian系、红帽系、Arch Linux系、其它发行版中的一种或几种(未来可能继续扩充)。每一次发布均会提供架构和发行版的若干种组合支持…

linux ip隧道技术,linux之IP隧道配置

本文系统Centos6.0在这里我就不讲什么隧道、IP隧道技术了&#xff1b;lvs的三种模式也不说了我这里隧道说白了就是不同机房&#xff0c;不同公网IP&#xff0c;怎么让他们实现局域网的效果&#xff0c;配置同一网段的私网IP&#xff1b;可以实现互联互通&#xff1b;写这篇文章…

windows控制linux桌面图标,完全控制你的Windows桌面 (转)

完全控制你的Windows桌面 (转)[more]完全控制你的桌面对于Windows的桌面界面相信大家已经十分熟悉了&#xff0c;占据屏幕大半部分的是桌面&#xff0c;在上面排列的是桌面图标。任务栏一般位于桌面的下面&#xff0c;也可以在桌面其它边缘。在最左边是“开始按钮”&#xff0c…

windows查看linux文件中文,Linux 系统下无法查看Windows 中创建的中文文件名

标 题: Linux 系统下无法查看Windows 中创建的中文文件名我是Linux初学者&#xff0c;在网上搜索了很久&#xff0c;经过多次尝试仍然无法解决问题&#xff0c;只好在这里发贴请教了&#xff0c;还望各位高手指点一下。问题描述&#xff1a;Linux 系统下无法查看Windows 中创建…

arm-none-linux-gnueabi-gcc:未找到命令,“make: arm-none-linux-gnueabi-gcc:命令未找到”

Ubuntu12.04下编译飞凌嵌入式OK6410开发板提供的内核android2.3_kernel_v1.01-2012-09-23.tar已经执行export PATH/usr/local/arm/arm-none-linux-gnueabi/bin:$PATH&#xff0c;但还是出现如下问题make: arm-none-linux-gnueabi-gcc&#xff1a;命令未找到CHK include/lin…

linux 内核入口地址,linux内核的加载地址和入口地址

编译完内核之后&#xff0c;会产生zImage,而把它直接导入0x30008000&#xff0c;会出现Bad Magic Number.查明是需要将内核加一个0x40大小的头,由mkimage工具来添加.mkimage在编译u-boot时在u-boot-1.1.6/tools下生成,可以为编译的内核添加头信息的.在bootm命令中会解析这个头,…

linux脚本监控某一进程,linux监控某个进程的运行shell脚本

该脚本实现了对指定进程名的进程进行每隔2的扫描监控&#xff0c;一旦发现进程不存在便重新启动。#!/bin/sha10;while [[ a -gt 5 ]]; doif test $(pgrep -f $1|wc -l) -eq 2;thensh stop.shgnome-terminal -x sh start.sh &fi;sleep 2;done;总结&#xff1a;(1)&表示当…

kali linux conky配置文件,7个美丽的Conky配置为您的Linux桌面 | MOS86

现在&#xff0c;大多数Linux用户非常熟悉Conky包括多少人都没有今天我们Note:其中一些不仅仅是一个习惯。conkyrc文件。许多都配有专门的字体或附加软件&#xff0c;有些则作为更大的桌面主题的一部分打包。此处列出的所有配置都提供了到原始下载位置以及每个包的链接此外&…

sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...

手机android系统&#xff0c;也许您会碰到这样的情况。错误提示&#xff1a;正在准备SD卡 正在检测是否有错误。这时sd卡(即内存卡)不能正常使用&#xff0c;不管手机自带的程序&#xff0c;还是通过usb口连接到电脑都无法识别sd卡。这可能是由于没有正常卸载sd卡导致的原因。比…

linux+系统优化基础,Linux入门基础(三):Linux用户及权限基础

用户基础用户和组每个用户都拥有一个userid每个用户都属于一个主组,属于一个或多个附属组每个组拥有一个groupid每个进程以一个用户身份运行,受该用户可访问资源限制每个可登陆用户拥有一个指定的shell用户userid为32位,从0开始,为了和老式系统兼容,用户id限制在60000以下用户分…

linux dhcp 负载均衡,dhcp双机负载均衡

dhcp双机负载均衡1&#xff1a;环境介绍&#xff1a;我是用两个linux机器(dhcpd server 一个是master &#xff0c;一个是slave)和一个windows xp机器来做的(测试用的client&#xff01;) &#xff0c;master:ip:172.17.61.124netmask&#xff1a;255.255.255.0gw&#xff1a;1…